From 70b0c325bfd26d2c231b70184175cc4b9dc22019 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期三, 19 十一月 2025 14:58:46 +0800
Subject: [PATCH] 最新版本541200007

---
 server/visits/dmvisit_service/src/main/java/com/doumee/core/tsp/TspSolver.java |   50 ++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 38 insertions(+), 12 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 d8eaa4f..2aa6bef 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
@@ -4,8 +4,10 @@
 import com.doumee.core.exception.BusinessException;
 import com.google.ortools.Loader;
 import com.google.ortools.constraintsolver.*;
+import com.google.protobuf.Duration;
+import com.google.protobuf.DurationOrBuilder;
 import lombok.extern.slf4j.Slf4j;
-import com.google.protobuf.Internal.IntListAdapter.IntConverter;
+import com.google.ortools.constraintsolver.mainJNI;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -85,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);
@@ -94,25 +96,45 @@
 
         // 瀹氫箟鍥炶皟鍑芥暟鑷虫瘡鏉¤矾绾�
         routing.setArcCostEvaluatorOfAllVehicles(transitCallbackIndex);
-        // 澧炲姞璺濈缁村害绾︽潫
-        routing.addDimension(transitCallbackIndex, 0, 300000000,
+        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;
+                });
+        for (int d = 0; d < data.vehicleMaxNodes.length; d++) {
+            // 澧炲姞璺濈缁村害绾︽潫
+            routing.addDimension(transitCallbackIndex1, 0, data.vehicleMaxNodes[d],
+                    true,
+                    "customer_"+d);
+            RoutingDimension distanceDimension1 = routing.getMutableDimension("customer_"+d);
+            distanceDimension1.setGlobalSpanCostCoefficient(100);
+        }
+        // 娣诲姞瀹归噺闄愬埗
         final int demandCallbackIndex = routing.registerUnaryTransitCallback((long fromIndex) -> {
             int fromNode = manager.indexToNode(fromIndex);
             return data.demands[fromNode];
         });
         routing.addDimensionWithVehicleCapacity(demandCallbackIndex, 0, data.vehicleCapacities, true, "Capacity");
-//        routing.addDimensionWithVehicleTransits()
-        Solver solver = routing.solver();
 
-        //璁剧疆鎼滅储鏂规硶
+/*
+        // 娣诲姞瀹归噺闄愬埗
+        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灏忔椂
                         .setFirstSolutionStrategy(FirstSolutionStrategy.Value.PATH_CHEAPEST_ARC)
                         .build();
 
@@ -203,6 +225,7 @@
         public   long[] demands;
         //杞﹁締鏈�澶у杞�
         public   long[] vehicleCapacities ;
+        public   long[] vehicleMaxNodes ;
         public   long[][] distanceMatrix ;
 
        public List<TspSolverSolutions> getSolutions() {
@@ -213,22 +236,25 @@
            this.solutions = solutions;
        }
 
-       public  void initDataInfo(int vehicleNumber1, long[] demands1, long[] vehicleCapacities1, long[][] distanceMatrix1){
+       public  void initDataInfo(int vehicleNumber1, long[] demands1, long[] vehicleCapacities1, long[][] distanceMatrix1,long[] vehicleMaxNodes){
             this.demands = demands1;
             this.vehicleNumber = vehicleNumber1;
             this.vehicleCapacities=vehicleCapacities1;
             this.distanceMatrix=distanceMatrix1;
+            this.vehicleMaxNodes =vehicleMaxNodes;
         }
         public   void initDataList(){
-            lenght = 100;
-            vehicleNumber = 7;
+            lenght = 20;
+            vehicleNumber = 5;
             demands = new long[lenght];
             vehicleCapacities =new long[vehicleNumber];
+            vehicleMaxNodes =new long[vehicleNumber];
             distanceMatrix =  new long[lenght][lenght];
             int total0 =0;
             for (int i = 0; i <vehicleNumber ; i++) {
                 long tem = (long) (Math.random() * 1000 + 20000);
                 vehicleCapacities[i] = tem;
+                vehicleMaxNodes[i] =5;
                 total0+=tem;
                 System.out.print(tem+" ,");
             }

--
Gitblit v1.9.3