void Optimize() { stop = false; P = problem.GenerateFixSolution(); P.Fitness = problem.Fitness(P); P_opt = SmallestBoundaryPolygon.Solution.Copy(P); t = 0; while (!StoppingCondition()) { //Thread.Sleep(5); //get random neighbor SmallestBoundaryPolygon.Solution q = problem.RandomNeighbor(P, Epsilon); q.Fitness = problem.Fitness(q); float deltaE = (float)q.Fitness - (float)P.Fitness; if (deltaE < 0) { P = SmallestBoundaryPolygon.Solution.Copy(q); if (P.Fitness < P_opt.Fitness) { //New Optimal P_opt = SmallestBoundaryPolygon.Solution.Copy(P); Logol("--------\n Iteration: " + t + ", Temperature: " + Temperature().ToString()); Logol("BEST: " + P_opt.Fitness, P_opt); } } else { float T = Temperature(); double rand = r.NextDouble(); //Logol("random: " + rand + ", P: " + AcceptanceProbability(deltaE, T).ToString("0.0000")); if (rand < AcceptanceProbability(deltaE, T)) { P = SmallestBoundaryPolygon.Solution.Copy(q); Logol("random OK", q); } } NewSolution(P_opt, q); t++; } }
void Optimize_Stochastic() { P = problem.GenerateFixSolution(); P.Fitness = problem.Fitness(P); t = 0; while (!StoppingCondition()) { SmallestBoundaryPolygon.Solution q = problem.RandomNeighbor(P, Epsilon); q.Fitness = problem.Fitness(q); float deltaE = (float)q.Fitness - (float)P.Fitness; if (deltaE < 0) { P = SmallestBoundaryPolygon.Solution.Copy(q); Logol(t + ": BEST: " + p.Fitness, p); } NewSolution(P, q); t++; } }