Advertisement
mamamaria

GA

Mar 13th, 2022
795
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.72 KB | None | 0 0
  1. // TSP GA.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
  2. //
  3. #include <iostream>
  4. #include <vector>
  5. #include <ctime>
  6. #include <random>
  7.  
  8. using namespace std;
  9. default_random_engine eng(time(0));
  10. const double N = 10;
  11. using Graph = vector<vector<double>>;
  12. using Way = vector<int>; // они же геномы
  13. struct Creature //особь
  14. {
  15.     Way way;
  16.     double fitness;
  17.     Creature() : way(N - 1, 0), fitness(0) {}
  18. };
  19. using Generation = vector <Creature>; //поколение
  20.  
  21. //допустим что все пути по умолчанию начинаются в 0 и заканчиваются в 0
  22. Graph GraphGenerator() {
  23.     Graph graph(N);
  24.     for (int i = 0; i < N; i++) {
  25.         graph[i].resize(N);
  26.     }
  27.     uniform_real_distribution<double> distr(1, 10);
  28.     for (int i = 0; i < N; i++) {
  29.         for (int j = 0; j <= i; j++) {
  30.             if (i == j) {
  31.                 graph[i][j] = 0;
  32.                 graph[j][i] = 0;
  33.                 continue;
  34.             }
  35.             graph[i][j] = distr(eng);
  36.             graph[j][i] = distr(eng);
  37.         }
  38.     }
  39.     return graph;
  40. }
  41.  
  42. void WayShuffling(Creature &creature) {
  43.     for (int i = 0; i < creature.way.size(); i++) {
  44.         creature.way[i] = i + 1;
  45.     }
  46.     shuffle(creature.way.begin(), creature.way.end(), eng);
  47.  
  48. }
  49. Generation GenerationGenerator(int creaturesnumber) {
  50.     Generation generation;
  51.     for (int i = 0; i < creaturesnumber; i++) {
  52.         Creature creature;
  53.         WayShuffling(creature);
  54.         generation.push_back(creature);
  55.     }
  56. }
  57. void Fitness(Creature &creature, const Graph &graph) {
  58.     double waylong=0;
  59.     for (int i = 0; i < creature.way.size()-1; i++) {
  60.         waylong += graph[creature.way[i]][creature.way[i + 1]];
  61.     }
  62.     waylong += graph[0][creature.way[0]] + graph[creature.way.back()][0];
  63.     creature.fitness = 1/waylong;
  64. }
  65. bool CreaturesComparing(const Creature &creature1, const Creature &creature2) { return (creature1.fitness > creature2.fitness); }
  66.  
  67. void FitnessSort(Generation &generation) {
  68.     sort(generation.begin(), generation.end(), CreaturesComparing);
  69. }
  70.  
  71. Creature TournamentSelection(const Generation &generation, int creaturesnumber) {
  72.     int num, maxindex, max = 0;
  73.     for (int i = 0; i < 0.1 * creaturesnumber; i++) {
  74.         num = rand() % creaturesnumber;
  75.         if (generation[num].fitness > max) {
  76.             max = generation[num].fitness;
  77.             maxindex = num;
  78.         }
  79.     }
  80.     return generation[maxindex];
  81. }
  82. int main()
  83. {
  84.  
  85.  
  86. }
  87.  
  88. // Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
  89. // Отладка программы: F5 или меню "Отладка" > "Запустить отладку"
  90.  
  91. // Советы по началу работы
  92. //   1. В окне обозревателя решений можно добавлять файлы и управлять ими.
  93. //   2. В окне Team Explorer можно подключиться к системе управления версиями.
  94. //   3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения.
  95. //   4. В окне "Список ошибок" можно просматривать ошибки.
  96. //   5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода.
  97. //   6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл.
  98.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement