예제 #1
0
        /*
         *  @param temperature : temperatur awal
         *  @param cooling_rate : cooling rate temperatur
         *  Menjalankan simulated annealing dan menuliskan jumlah konflik yang terjadi
         */
        public void execute(float temperature, float cooling_rate)
        {
            this.solution = new KelasManagement(this.kelasManagement.getArrayKelas());
            Console.WriteLine("Initial conflict: " + this.solution.getConflict());
            solution.printall();
            Console.WriteLine();
            Console.WriteLine("Temperature: " + temperature);
            Console.WriteLine("Cooling rate: " + cooling_rate);
            Console.WriteLine("---------");


            while (temperature > 1)
            {
                for (int i = 0; i < 200; i++)
                {
                    int random = myRandom.GetRandomNumber(0, this.kelasManagement.getArrayKelas().Count - 1);
                    this.kelasManagement.setRandomValue(random);
                    int newConflict     = this.kelasManagement.getConflict();
                    int currentConflict = this.solution.getConflict();
                    if (newConflict < currentConflict)
                    {
                        this.solution = new KelasManagement(this.kelasManagement.getArrayKelas());
                        Console.WriteLine("Found better: " + newConflict);
                    }
                    else
                    {
                        if (myRandom.GetRandomFloat(0, 100) <= Math.Exp((currentConflict - newConflict) / temperature))
                        {
                            this.solution = new KelasManagement(this.kelasManagement.getArrayKelas());
                            Console.WriteLine("Assign worse: " + newConflict);
                        }
                    }
                }
                temperature *= cooling_rate;
            }

            //solution.printall();
            this.solution.printall();
            Console.WriteLine("---------");
            Console.WriteLine("Last conflict: " + this.solution.getConflict());
        }