From d8b9d884967f502caac58d723e57931d0356fa11 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期一, 24 十一月 2025 19:53:05 +0800
Subject: [PATCH] 最新版本541200007

---
 server/visits/dmvisit_service/src/main/java/com/doumee/core/tsp/TspSolver.java |   44 ++++++++++++++++++++------------------------
 1 files changed, 20 insertions(+), 24 deletions(-)

diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/tsp/TspSolver.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/tsp/TspSolver.java
index a5263ab..b19f7f3 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/tsp/TspSolver.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/tsp/TspSolver.java
@@ -25,7 +25,7 @@
         data.initDataList();//鏋勯�犳暟鎹�
 
         long start =System.currentTimeMillis();
-        System.out.println("=============start=========="+start);
+       log.error("=============start=========="+start);
         //鍒涘缓姹傝В鍣╩anager瀵硅薄锛屽垵濮嬪寲姹傝В鍣ㄦ暟鎹�
         RoutingIndexManager manager =  new RoutingIndexManager(data.distanceMatrix.length, data.vehicleNumber, data.depot);
 
@@ -71,15 +71,15 @@
         // 鎵撳嵃璺嚎
         printSolution(data, routing, manager, solution);
         long end =System.currentTimeMillis();
-        System.out.println("=============end=========="+end);
+       log.error("=============end=========="+end);
 
-        System.out.println("=============鑰楁椂=========="+(end -start)+"锛坢s锛�"+(end -start)/1000 +"s"+(end -start)/60/1000 +"m");
+       log.error("=============鑰楁椂=========="+(end -start)+"锛坢s锛�"+(end -start)/1000 +"s"+(end -start)/60/1000 +"m");
     */}
     public static void startSearch(DataModel data) {
         // 鍒濆鍖栨暟鎹ā鍨�
         Loader.loadNativeLibraries();
         long start =System.currentTimeMillis();
-        System.out.println("=============start=========="+start);
+       log.error("寮�濮嬭鍒�=============start=========="+start);
         //鍒涘缓姹傝В鍣╩anager瀵硅薄锛屽垵濮嬪寲姹傝В鍣ㄦ暟鎹�
         RoutingIndexManager manager =  new RoutingIndexManager(data.distanceMatrix.length, data.vehicleNumber, data.depot);
 
@@ -87,7 +87,7 @@
         RoutingModel routing = new RoutingModel(manager);
 
         // 娉ㄥ唽鍥炶皟鍑芥暟
-       /* final int transitCallbackIndex =
+       final int transitCallbackIndex =
                 routing.registerTransitCallback((long fromIndex, long toIndex) -> {
                     int fromNode = manager.indexToNode(fromIndex);
                     int toNode = manager.indexToNode(toIndex);
@@ -96,15 +96,16 @@
 
         // 瀹氫箟鍥炶皟鍑芥暟鑷虫瘡鏉¤矾绾�
         routing.setArcCostEvaluatorOfAllVehicles(transitCallbackIndex);
-        routing.addDimension(transitCallbackIndex, 0, 30000000,
+  /*      routing.addDimension(transitCallbackIndex, 0, 30000000,
                 true,
                 "Distance");
         RoutingDimension distanceDimension = routing.getMutableDimension("Distance");
-        distanceDimension.setGlobalSpanCostCoefficient(100);*/
+        distanceDimension.setGlobalSpanCostCoefficient(100); */
         // 娉ㄥ唽鍥炶皟鍑芥暟
         final int transitCallbackIndex1 =
                 routing.registerTransitCallback((long fromIndex, long toIndex) -> {
-                    return 1;
+                    int fromNode = manager.indexToNode(fromIndex);
+                    return data.customerDemands[fromNode];
                 });
         for (int d = 0; d < data.vehicleMaxNodes.length; d++) {
             // 澧炲姞璺濈缁村害绾︽潫
@@ -121,20 +122,12 @@
         });
         routing.addDimensionWithVehicleCapacity(demandCallbackIndex, 0, data.vehicleCapacities, true, "Capacity");
 
-/*
-        // 娣诲姞瀹归噺闄愬埗
-        final int demandCallbackIndex1 = routing.registerUnaryTransitCallback((long fromIndex) -> {
-            return 1;
-        });
-        routing.addDimensionWithVehicleCapacity(demandCallbackIndex1, 0, data.vehicleMaxNodes, true, "Capacity");
-*/
-
         Solver solver = routing.solver();
         //璁剧疆鎼滅储鏂规硶(
         RoutingSearchParameters searchParameters =
                 main.defaultRoutingSearchParameters()
                         .toBuilder()
-//                        .setTimeLimit(Duration.newBuilder().setSeconds(60*60).build())//鏈�涔�1灏忔椂
+                        .setTimeLimit(Duration.newBuilder().setSeconds(60*60*6).build())//鏈�涔�1灏忔椂
                         .setFirstSolutionStrategy(FirstSolutionStrategy.Value.PATH_CHEAPEST_ARC)
                         .build();
 
@@ -146,8 +139,7 @@
         // 鎵撳嵃璺嚎
         resultSolution(data, routing, manager, solution);
         long end =System.currentTimeMillis();
-        System.out.println("=============end=========="+end);
-        System.out.println("=============鑰楁椂=========="+(end -start)+"锛坢s锛�"+(end -start)/1000 +"s"+(end -start)/60/1000 +"m");
+       log.error("瑙勫垝缁撴潫=============鑰楁椂=========="+(end -start)+"锛坢s锛�"+(end -start)/1000 +"s"+(end -start)/60/1000 +"m");
     }
     static void resultSolution( DataModel data, RoutingModel routing, RoutingIndexManager manager, Assignment solution) {
         long maxRouteDistance = 0;
@@ -223,6 +215,7 @@
 
         //姣忎竴涓偣鐨勫晢鍝佺殑鏁伴噺
         public   long[] demands;
+        public   long[] customerDemands;
         //杞﹁締鏈�澶у杞�
         public   long[] vehicleCapacities ;
         public   long[] vehicleMaxNodes ;
@@ -236,17 +229,19 @@
            this.solutions = solutions;
        }
 
-       public  void initDataInfo(int vehicleNumber1, long[] demands1, long[] vehicleCapacities1, long[][] distanceMatrix1,long[] vehicleMaxNodes){
+       public  void initDataInfo(int vehicleNumber1, long[] demands1,long[] demands2, long[] vehicleCapacities1, long[][] distanceMatrix1,long[] vehicleMaxNodes){
             this.demands = demands1;
+            this.customerDemands = demands2;
             this.vehicleNumber = vehicleNumber1;
             this.vehicleCapacities=vehicleCapacities1;
             this.distanceMatrix=distanceMatrix1;
             this.vehicleMaxNodes =vehicleMaxNodes;
         }
         public   void initDataList(){
-            lenght = 20;
+            lenght = 10;
             vehicleNumber = 5;
             demands = new long[lenght];
+            customerDemands = new long[lenght];
             vehicleCapacities =new long[vehicleNumber];
             vehicleMaxNodes =new long[vehicleNumber];
             distanceMatrix =  new long[lenght][lenght];
@@ -254,15 +249,16 @@
             for (int i = 0; i <vehicleNumber ; i++) {
                 long tem = (long) (Math.random() * 1000 + 20000);
                 vehicleCapacities[i] = tem;
-                vehicleMaxNodes[i] =5;
+                vehicleMaxNodes[i] =50;
                 total0+=tem;
                 System.out.print(tem+" ,");
             }
-            System.out.println( "\ntotal Capacity:"+total0+"=====================");
+           log.error( "\ntotal Capacity:"+total0+"=====================");
             long total = 0;
             for (int i = 0; i <lenght ; i++) {
                 long tem =  (int)(Math.random()*100+100);
                 demands[i] =tem;
+                customerDemands[i] =1;
                 total+=tem;
                 System.out.print(tem+" ,");
                 for (int j = 0; j <lenght ; j++) {
@@ -276,7 +272,7 @@
                 }
             }
 
-            System.out.println( "\ntotal Demands:"+total+"=====================");
+           log.error( "\ntotal Demands:"+total+"=====================");
         }
        /* public final long[][] distanceMatrix = {
                 {0, 548, 776, 696, 582, 274, 502, 194, 308, 194, 536, 502, 388, 354, 468, 776, 662},

--
Gitblit v1.9.3