ソースを参照

New approach for global optimum sharing

Jan Potocki 5年前
コミット
b577fd6c13
1個のファイルの変更20行の追加17行の削除
  1. 20
    17
      Graph.cpp

+ 20
- 17
Graph.cpp ファイルの表示

560
                     }
560
                     }
561
 
561
 
562
                     // Kryterium aspiracji...
562
                     // Kryterium aspiracji...
563
-                    globalOptimumMutex.lock();
564
-                    if(tabu == true && neighbourRouteLength >= globalOptimumLength)
565
-                    {
566
-                        globalOptimumMutex.unlock();
567
-
563
+                    if(tabu == true && neighbourRouteLength >= optimalRouteLength)
568
                         // ...jezeli niespelnione - pomijamy ruch
564
                         // ...jezeli niespelnione - pomijamy ruch
569
                         continue;
565
                         continue;
570
-                    }
571
-                    else
572
-                        globalOptimumMutex.unlock();
566
+
573
 
567
 
574
                     if(nextRouteLength == -1)
568
                     if(nextRouteLength == -1)
575
                     {
569
                     {
592
             // PEA 2 Plus
586
             // PEA 2 Plus
593
             // Jan Potocki 2019
587
             // Jan Potocki 2019
594
 
588
 
595
-            globalOptimumMutex.lock();
596
-            if(globalOptimumLength == -1)
589
+            if(optimalRouteLength == -1)
597
             {
590
             {
598
-                globalOptimumLength = nextRouteLength;
599
-                globalOptimum = nextRoute;
591
+                optimalRouteLength = nextRouteLength;
600
                 optimalRoute = nextRoute;
592
                 optimalRoute = nextRoute;
601
 
593
 
602
                 // Reset licznika
594
                 // Reset licznika
603
                 stopCounter = 0;
595
                 stopCounter = 0;
604
-
605
-                std::cout << "Nowa najlepsza trasa: " << globalOptimumLength << std::endl;
606
             }
596
             }
607
-            else if(globalOptimumLength > nextRouteLength)
597
+            else if(optimalRouteLength > nextRouteLength)
608
             {
598
             {
609
-                globalOptimumLength = nextRouteLength;
610
-                globalOptimum = nextRoute;
599
+                optimalRouteLength = nextRouteLength;
611
                 optimalRoute = nextRoute;
600
                 optimalRoute = nextRoute;
612
 
601
 
613
                 // Zaplanowanie intensyfikacji przy znalezieniu nowego optimum
602
                 // Zaplanowanie intensyfikacji przy znalezieniu nowego optimum
615
 
604
 
616
                 // Reset licznika
605
                 // Reset licznika
617
                 stopCounter = 0;
606
                 stopCounter = 0;
607
+            }
608
+
609
+            // Synchronizacja globalnie najlepszej trasy (1)
610
+            globalOptimumMutex.lock();
611
+            if(globalOptimumLength == -1 || globalOptimumLength > nextRouteLength)
612
+            {
613
+                globalOptimumLength = nextRouteLength;
614
+                globalOptimum = nextRoute;
618
 
615
 
619
                 std::cout << "Nowa najlepsza trasa: " << globalOptimumLength << std::endl;
616
                 std::cout << "Nowa najlepsza trasa: " << globalOptimumLength << std::endl;
620
             }
617
             }
680
                 currentRoute = Graph::travellingSalesmanHybrid(graph);
677
                 currentRoute = Graph::travellingSalesmanHybrid(graph);
681
                 currentTabuSteps = tabuSteps;
678
                 currentTabuSteps = tabuSteps;
682
                 intensification = false;
679
                 intensification = false;
680
+
681
+                // Synchronizacja globalnie najlepszej trasy (2)
682
+                globalOptimumMutex.lock();
683
+                optimalRouteLength = globalOptimumLength;
684
+                optimalRoute = globalOptimum;
685
+                globalOptimumMutex.unlock();
683
             }
686
             }
684
         }
687
         }
685
 
688
 

読み込み中…
キャンセル
保存