public Particle(int dimentions, ParticleCostFunction costFunction, IInitalise initalise) { Velocity = Vector.FromDesign(initalise.Initalise(dimentions + 1)) / 2; Position = Vector.FromDesign(initalise.Initalise(dimentions + 1)); this.costFunction = costFunction; EvaluateCost(); }
public Log Compute(Graph graph) { TerminateCondition terminate = terminateStrategy(); Route?bestRoute = default; int itterationCounter = 0; Stopwatch timer = new Stopwatch(); timer.Start(); while (!terminate()) { Route parent = initalisationStrategy.Initalise(graph.nodes); Route candidate = Search(parent); bestRoute = bestRoute == null? candidate : step.CostP(candidate, bestRoute); OnItterationComplete?.Invoke(this, new Log() { numberOfRoutesEvaluated = routesEvaluated, bestRouteCost = bestRoute.Distance(), iteration = itterationCounter++, bestRoute = bestRoute != null ? bestRoute.ToString() : String.Empty, timeToCompute = timer.ElapsedMilliseconds, }); } timer.Stop(); return(new Log() { timeToCompute = timer.ElapsedMilliseconds, numberOfRoutesEvaluated = routesEvaluated, iteration = itterationCounter, bestRouteCost = bestRoute != null?bestRoute.Distance() : float.PositiveInfinity, bestRoute = bestRoute != null?bestRoute.ToString() : String.Empty, }); }
public Log Compute(Graph graph) { TerminateCondition Terminate = this.terminateStrategy(); int numberOfRoutes = 0; //Initalise population for (int i = 0; i < population.Length; i++) { population[i] = InitalisationStrategy.Initalise(graph.nodes); } Route?bestRoute = default; Stopwatch timer = new Stopwatch(); timer.Start(); int generationCounter = 0; int itterationCounter = 0; while (!Terminate()) { Route[] parents = selectionStrategy.Select(population, 20, step); //Recombine pairs of parents Route[] children = Recombine(parents, (int)eliteism * parents.Length); //Mutate the resulting offsprint for (int i = 0; i < children.Length; i++) { if (random.NextDouble() < mutationRate) { children[i] = swap.Swap(children[i]); } numberOfRoutes++; bestRoute = bestRoute == null ? children[i] : step.CostP(children[i], bestRoute); population[generationCounter] = children[i]; generationCounter = (generationCounter + 1) % population.Length; } OnItterationComplete?.Invoke(this, new Log() { numberOfRoutesEvaluated = numberOfRoutes, iteration = itterationCounter, bestRouteCost = bestRoute != null ? bestRoute.Distance() : float.MaxValue, bestRoute = bestRoute != null ? bestRoute.ToString() : string.Empty, timeToCompute = timer.ElapsedMilliseconds, }); } timer.Stop(); return(new Log() { timeToCompute = timer.ElapsedMilliseconds, numberOfRoutesEvaluated = numberOfRoutes, iteration = itterationCounter, bestRouteCost = bestRoute != null?bestRoute.Distance() : float.MaxValue, bestRoute = bestRoute != null?bestRoute.ToString() : string.Empty, }); }