Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.49 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Collections;
  7. using System.Data;
  8. using System.Diagnostics;
  9.  
  10. namespace Elitist
  11. {
  12. internal class Program
  13. {
  14. private static Random random = new Random(0);
  15. private static int alpha = 1;
  16. private static int beta = 10;
  17. private static double rho = 0.5;
  18. private static double Q = 100;
  19.  
  20. public static void Main(string[] args)
  21. {
  22. try
  23. {
  24. int numCities = 60;
  25. int numAnts = 4;
  26. int[][] dists = MakeGraphDistances(numCities);
  27. int[][] ants = InitAnts(numAnts, numCities);
  28. int[] bestTrail = Program.BestTrail(ants, dists);
  29. double bestLength = Length(bestTrail, dists);
  30.  
  31. //Console.WriteLine("\nBest trail found:");
  32. Display(bestTrail);
  33. //Console.WriteLine("\nLength of best trail found: " + bestLength.ToString("F1"));
  34. Console.ReadLine();
  35. }
  36. catch (Exception ex)
  37. {
  38. Console.WriteLine(ex.Message);
  39. Console.ReadLine();
  40. }
  41. }
  42.  
  43. private static int[][] InitAnts(int numAnts, int numCities)
  44. {
  45. int[][] ants = new int[numAnts][];
  46. for (int k = 0; k <= numAnts - 1; k++)
  47. {
  48. int start = random.Next(0, numCities);
  49. ants[k] = RandomTrail(start, numCities);
  50. }
  51. return ants;
  52. }
  53.  
  54. private static int[] RandomTrail(int start, int numCities)
  55. {
  56. int[] trail = new int[numCities];
  57. for (int i = 0; i <= numCities - 1; i++)
  58. trail[i] = i;
  59.  
  60. for (int i = 0; i <= numCities - 1; i++)
  61. {
  62. int r = random.Next(i, numCities);
  63. int tmp = trail[r];
  64. trail[r] = trail[i];
  65. trail[i] = tmp;
  66. }
  67.  
  68. int idx = IndexOfTarget(trail, start);
  69. int temp = trail[0];
  70. trail[0] = trail[idx];
  71. trail[idx] = temp;
  72. return trail;
  73. }
  74.  
  75. private static int IndexOfTarget(int[] trail, int target)
  76. {
  77. for (int i = 0; i <= trail.Length - 1; i++)
  78. if (trail[i] == target) return i;
  79. throw new Exception("Target not found in IndexOfTarget");
  80. }
  81.  
  82. private static double Length(int[] trail, int[][] dists)
  83. {
  84. double result = 0.0;
  85. for (int i = 0; i <= trail.Length - 2; i++)
  86. result += Distance(trail[i], trail[i + 1], dists);
  87. return result;
  88. }
  89.  
  90. private static int[] BestTrail(int[][] ants, int[][] dists)
  91. {
  92. double bestLength = Length(ants[0], dists);
  93. int idxBestLength = 0;
  94. for (int k = 1; k <= ants.Length - 1; k++)
  95. {
  96. double len = Length(ants[k], dists);
  97. if (len < bestLength)
  98. {
  99. bestLength = len;
  100. idxBestLength = k;
  101. }
  102. }
  103. int numCities = ants[0].Length;
  104. int[] bestTrail_Renamed = new int[numCities];
  105. ants[idxBestLength].CopyTo(bestTrail_Renamed, 0);
  106. return bestTrail_Renamed;
  107. }
  108.  
  109. private static int[][] MakeGraphDistances(int numCities)
  110. {
  111. int[][] dists = new int[numCities][];
  112. for (int i = 0; i <= dists.Length - 1; i++)
  113. dists[i] = new int[numCities];
  114. for (int i = 0; i <= numCities - 1; i++)
  115. {
  116. for (int j = i + 1; j <= numCities - 1; j++)
  117. {
  118. int d = random.Next(1, 9);
  119. dists[i][j] = d;
  120. dists[j][i] = d;
  121. }
  122. }
  123. return dists;
  124. }
  125.  
  126. private static double Distance(int cityX, int cityY, int[][] dists)
  127. {
  128. return dists[cityX][cityY];
  129. }
  130.  
  131. private static void Display(int[] trail)
  132. {
  133. for (int i = 0; i <= trail.Length - 1; i++)
  134. {
  135. Console.Write(trail[i] + " ");
  136. if (i > 0 && i % 20 == 0) Console.WriteLine("");
  137. }
  138. Console.WriteLine("");
  139. }
  140. }
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement