//--------------------------------------------------------------------- public static void TestRandomWalkv2(string mesh_type) { int[] sizes_mesh = new int[21] { 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50 }; int[] final_positions = new int[21] { 99, 143, 195, 255, 323, 399, 483, 575, 675, 783, 899, 1023, 1155, 1295, 1443, 1599, 1763, 1935, 2115, 2303, 2499 }; for (int i = 0; i < sizes_mesh.Length; i++) { string size = "_" + sizes_mesh[i] + "x" + sizes_mesh[i] + ".txt"; string file_name = mesh_type + size; //Create the mesh environment MeshEnvironment env = new MeshEnvironment(_start: 0, _final: final_positions[i], _file_name: file_name, sizes_mesh[i]); env.InitEnviroment(type_mesh: mesh_type); Console.WriteLine("Init Execution -> " + file_name); //------------------------------------------------------------------- for (int j = 0; j < num_test; j++) { RandomWalkv2 rw2 = new RandomWalkv2(); rw2.ExecuteRandomWalk(ref env); AntColonyOptimizationv0 acov0 = new AntColonyOptimizationv0(_random_walk: true); acov0.ExecuteACO(ref env); ////Store variables in a txt Console.WriteLine("Execution {0} of " + file_name, j); StoreVariables_RW2(mesh_type, ref env, ref rw2); StoreVariable_RW2_and_ACOv0(mesh_type, ref env, ref acov0, ref rw2); env.InitPheromones(0); } Console.WriteLine("End Execution -> " + file_name); Console.WriteLine("---------------------------------------------"); } }
public static void Test_RWv2_ACOv0(string mesh_type) { int[] sizes_mesh = new int[21] { 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50 }; int[] final_positions = new int[21] { 99, 143, 195, 255, 323, 399, 483, 575, 675, 783, 899, 1023, 1155, 1295, 1443, 1599, 1763, 1935, 2115, 2303, 2499 }; for (int i = 0; i < sizes_mesh.Length; i++) { string size = "_" + sizes_mesh[i] + "x" + sizes_mesh[i] + ".txt"; string file_name = mesh_type + size; Console.WriteLine("Init Execution -> " + file_name); //------------------------------------------------------------------- //Create the mesh environment MeshEnvironment env = new MeshEnvironment(_start: 0, _final: final_positions[i], _file_name: file_name, sizes_mesh[i]); env.InitEnviroment(type_mesh: mesh_type); //------------------------------------------------------------------- for (int j = 0; j < num_test; j++) { //............................................................................ // ROUTE 1 env.FillDistanceMatrix(); DijkstraAlgorithm dk1 = new DijkstraAlgorithm(); dk1.Execute(ref env); RandomWalkv2 rw1 = new RandomWalkv2(); rw1.ExecuteRandomWalk(ref env); AntColonyOptimizationv0 aco1 = new AntColonyOptimizationv0(_random_walk: true); aco1.ExecuteACO(ref env); //............................................................................ //Insert the obstacle in a middle zone of the current optimal solution InsertSeveralObstacle(ref env, num_obstacle: 2, num_routes: 2); //............................................................................ // ROUTE 2 - REROUTING env.FillDistanceMatrix(); DijkstraAlgorithm dk2 = new DijkstraAlgorithm(); dk2.Execute(ref env); RandomWalkv2 rw2 = new RandomWalkv2(); rw2.ExecuteRandomWalk(ref env); AntColonyOptimizationv0 aco2 = new AntColonyOptimizationv0(_random_walk: true); aco2.ExecuteACO(ref env); //............................................................................ ////Store variables in a txt Console.WriteLine("Execution {0} of " + file_name, j); StoreVariable_RWv2_ACOv0(mesh_type, ref env, ref dk1, ref aco1, ref dk2, ref aco2); //............................................................................ //Reset environment env.InitPheromones(0); env.ClearObstacles(); } Console.WriteLine("End Execution -> " + file_name); Console.WriteLine("---------------------------------------------"); } }
//------------------------------------------------------------------- public void ExecuteACO(ref MeshEnvironment env) { //Create a list of ants colony = CreateColony(); if (!random_walk) { //Init pheromone minimum amount env.InitPheromones(tau_0); } //Variables to control the evaporation bool almost_one_route = false; bool several_stucks = false; //Variable to control the convergence bool converge = false; //Variable to take the execution time var watch = System.Diagnostics.Stopwatch.StartNew(); while (!converge) { foreach (var ant in colony) { //The current ant tries to find a route List <int> route = ant.FindRoute(ref env); //If the ant finds a route if (route.Count != 0) { //Reinforce the route Reinforcement(ref env, ref route); //Set the flag to the evaporation in the current episode almost_one_route = true; //Check and set if the best cost changed CheckAndSetBestCost(ref env, ref route); } else { //Control Testing Variables stuck_roads++; //Several stucks if (stuck_roads % 10 == 0) { several_stucks = true; } } } env.ResetNodes(); //If at least one ant found a route the evaporation step occurs if (almost_one_route || several_stucks) { Evaporation(ref env); almost_one_route = false; several_stucks = false; } //If a percentage of the ants follow the same path, the convergence variable will be true converge = CheckConvergence(ref colony, ref env); //Control Testing Variables //Episodes episode_counter++; } //Control Testing Variables //Execution Time watch.Stop(); execution_time += watch.ElapsedMilliseconds; }