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); }
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; }
/// <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); }