Esempio n. 1
0
        public static void RunMain()
        {
            int maxIterations = 2000;
            int dimension     = 2;
            int popSize       = 200;

            double[]       lowerBounds = new double[] { -2.048, -2.048 };
            double[]       upperBounds = new double[] { 2.048, 2.048 };
            SimpleParticle finalSolution;

            ParticleSwarm <SimpleParticle> .Solve(popSize, dimension, (solution, constraints) =>
            {
                // this is the Rosenbrock Saddle cost function
                double[] positions = solution.Positions;
                double x0          = positions[0];
                double x1          = positions[1];

                double cost = 100 * Math.Pow(x0 *x0 - x1, 2) + Math.Pow(1 - x0, 2);
                return(cost);
            }, lowerBounds, upperBounds, out finalSolution, maxIterations);
        }
Esempio n. 2
0
        private void Run(object payload)
        {
            var castedPayload = payload as AsyncPsoPayload;

            if (castedPayload == null)
                throw new Exception("Niepoprawny typ parametru");

            var settings = castedPayload.Settings;

            Function mathFunction;
            switch(settings.MathFunction)
            {
                case Enums.MathFunctions.Ackley:
                    mathFunction = new Ackley();
                    break;
                case Enums.MathFunctions.Rastrigin:
                    mathFunction = new Rastrigin();
                    break;
                case Enums.MathFunctions.Rosenbrock:
                    mathFunction = new Rosenbrock();
                    break;
                default:
                    throw new ArgumentException("Wskazana funkcja nie została zaimplementowana");
            }

            ParticleSwarm p = new ParticleSwarm(settings.ParticleCount,
                                                mathFunction,
                                                settings.Inertia,
                                                settings.COneValue,
                                                settings.CTwoValue,
                                                settings.MaxSpeed,
                                                settings.Tightness,
                                                settings.TightnessLevel);

            if (settings.IsLiczbaIteracji)
            {
                List<DataPoint> bestPos = new List<DataPoint>();
                for (int i = 0; i < settings.IterationCount; i++)
                {
                    if (settings.IsLivePlot && bestPos.Count == settings.IterationCount / 10)
                    {
                        castedPayload.UpdatePlotFunction(bestPos);
                        bestPos = new List<DataPoint>();
                    }

                    bestPos.Add(new DataPoint(i, p.BestFitness));
                    p.Iteration();
                }

                if (bestPos.Count > 0)
                    castedPayload.UpdatePlotFunction(bestPos);
            }
            else
            {
                var isRunning = true;
                _timer = new System.Timers.Timer(settings.TimeInSeconds * 1000);
                _timer.Elapsed += (s, e) => { isRunning = false; };
                _timer.Start();

                List<DataPoint> bestPos = new List<DataPoint>();
                int i = 0;
                while (isRunning)
                {
                    bestPos.Add(new DataPoint(i++, p.BestFitness));
                    p.Iteration();

                    if (settings.IsLivePlot && i % 5000 == 0)
                    {
                        castedPayload.UpdatePlotFunction(bestPos);
                        Thread.Sleep(150);
                        bestPos = new List<DataPoint>();
                    }
                }

                if (bestPos.Count > 0)
                    castedPayload.UpdatePlotFunction(bestPos);
            }

            castedPayload.CalculationFinished();
        }
        protected TravellingSalesmanMap Map;// { get; set; }

        //Referencia a melhor particula atualmente
        //public TSPParticle gBest;

        /*
         * public TSPParticle(TSPParticle particle) : base() {
         *  this.Position = particle.Position;
         *  this.Velocity = particle.Velocity;
         *  this.Fitness = particle.Fitness;
         * }
         *
         * private TSPParticle() : base() {
         *
         * }
         */
        private TSPParticle(ParticleSwarm containingSwarm, TravellingSalesmanMap Map)
            : base(containingSwarm)
        {
            this.Map = Map;
        }
Esempio n. 4
0
        /// <summary>
        /// Before we start solver prepare all neccessery information
        /// </summary>
        /// <param name="termSet"></param>
        /// <param name="funSet"></param>
        /// <param name="annParams"></param>
        public override void PrepareAlgorithm(Experiment expData, ANNParameters annParams = null)
        {
            if (annParams == null || expData == null)
            {
                throw new Exception("Argument value cannot be null");
            }


            //reset iteration and network
            if (m_Network == null)
            {
                m_IterationCounter = 0;


                //depending on the type of the colum create adequate neural network
                var colType = expData.GetOutputColumnType();

                if (colType == ColumnDataType.Binary)//Binary Clasification
                {
                    m_Network = new BCNeuralNetwork(annParams, expData.GetColumnInputCount_FromNormalizedValue(), expData.GetColumnOutputCount_FromNormalizedValue());
                }
                else//multiclass classification
                {
                    m_Network = new MCNeuralNetwork(annParams, expData.GetColumnInputCount_FromNormalizedValue(), expData.GetColumnOutputCount_FromNormalizedValue());
                }

                m_Network.InitializeNetwork();
            }

            //
            m_Experiment = expData;

            PSOParameters swarm = null;

            if (m_Parameters != null)
            {
                swarm = m_Parameters.m_PSOParameters;
            }
            else
            {
                m_psoAlgorithm = null;
                swarm          = annParams.m_PSOParameters;
            }


            //
            m_Parameters = annParams;
            m_Parameters.m_PSOParameters = swarm;

            m_expRowCount      = m_Experiment.GetRowCount();
            IsAlgorthmPrepared = true;
            StopIteration      = false;

            float newfitness = 0;

            if (m_psoAlgorithm == null)
            {
                //initilaize swarm
                m_Parameters.m_PSOParameters.m_Dimension = m_Network.GetWeightsAndBiasCout();
                m_psoAlgorithm = new ParticleSwarm(m_Parameters.m_PSOParameters, CrossEntropy);
                //init
                newfitness = m_psoAlgorithm.InitSwarm();
            }
            // else
            newfitness = m_psoAlgorithm.RunSwarm();


            var model = CalculateModel(false);

            //Send report for iteration
            var rp = new ProgressIndicatorEventArgs()
            {
                ReportType       = ProgramState.Started,
                LearningError    = newfitness,
                CurrentIteration = 0,
                LearnOutput      = model,
            };

            ReportProgress(rp);
        }