Esempio n. 1
0
        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++;
            }
        }
Esempio n. 2
0
        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++;
            }
        }