From 12f30a09bce1c61b2ae90129124cdc467a59b074 Mon Sep 17 00:00:00 2001
From: jianghaiyue <jianghaiyue@zkyt.com>
Date: 星期三, 05 十一月 2025 15:03:17 +0800
Subject: [PATCH] 优化更新

---
 algo-zkd/src/main/java/com/algo/service/AStarPathPlanner.java |   69 +++++++++++++++++++++++++++++-----
 1 files changed, 59 insertions(+), 10 deletions(-)

diff --git a/algo-zkd/src/main/java/com/algo/service/AStarPathPlanner.java b/algo-zkd/src/main/java/com/algo/service/AStarPathPlanner.java
index 5fe5554..894f28e 100644
--- a/algo-zkd/src/main/java/com/algo/service/AStarPathPlanner.java
+++ b/algo-zkd/src/main/java/com/algo/service/AStarPathPlanner.java
@@ -5,7 +5,10 @@
 import com.algo.model.PlannedPath;
 import com.algo.util.JsonUtils;
 import com.algo.util.PathTimeCalculator;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
 
+import java.io.File;
 import java.util.*;
 
 /**
@@ -41,7 +44,7 @@
     /**
      * 鏈�澶ф悳绱㈡繁搴�
      */
-    private final int maxSearchDepth = 15000;
+    private final int maxSearchDepth = 50000;
 
     /**
      * 璺濈缂撳瓨
@@ -70,13 +73,22 @@
      */
     public AStarPathPlanner(Map<String, Map<String, Integer>> pathMapping) {
         this.pathMapping = pathMapping;
-        this.adjacencyList = new HashMap<>();
 
         // 鍔犺浇鐜杩為�氭�ф暟鎹�
         this.environmentConnectivity = JsonUtils.loadEnvironmentConnectivity("environment.json");
 
-        // 鏋勫缓鐜鎰熺煡鐨勯偦鎺ヨ〃
-        buildEnvironmentAwareAdjacencyList();
+        // 鍔犺浇閭绘帴琛�
+        Map<String, List<Map<String, String>>> loadedAdjacency = loadAdjacencyListFromJson("adjacency.json");
+        
+        if (loadedAdjacency != null && !loadedAdjacency.isEmpty()) {
+            // 鎴愬姛鍔犺浇棰勭敓鎴愮殑閭绘帴琛�
+            this.adjacencyList = loadedAdjacency;
+            System.out.println("浠� adjacency.json 鍔犺浇閭绘帴琛�: " + adjacencyList.size() + " 涓妭鐐�");
+        } else {
+            this.adjacencyList = new HashMap<>();
+            buildEnvironmentAwareAdjacencyList();
+            System.out.println("浣跨敤缃戞牸鐩搁偦鎬ф瀯寤洪偦鎺ヨ〃: " + adjacencyList.size() + " 涓妭鐐�");
+        }
         
         // 鍔犺浇瀹為檯鍧愭爣鏄犲皠
         loadRealCoordinateMapping();
@@ -88,6 +100,39 @@
         precomputeCommonDistances();
 
         System.out.println("A*璺緞瑙勫垝鍣ㄥ垵濮嬪寲瀹屾垚锛岄偦鎺ヨ〃鍖呭惈 " + adjacencyList.size() + " 涓妭鐐�");
+    }
+    
+    /**
+     * 浠� JSON 鏂囦欢鍔犺浇棰勭敓鎴愮殑閭绘帴琛�
+     */
+    private Map<String, List<Map<String, String>>> loadAdjacencyListFromJson(String filePath) {
+        try {
+            File file = new File(filePath);
+            
+            if (!file.exists()) {
+                System.out.println("璺緞閭绘帴琛ㄦ枃浠朵笉瀛樺湪: " + filePath + "锛屼娇鐢ㄩ粯璁ゆ瀯寤烘柟娉�");
+                return null;
+            }
+            
+            ObjectMapper objectMapper = new ObjectMapper();
+            
+            TypeReference<Map<String, List<Map<String, String>>>> typeRef = 
+                new TypeReference<Map<String, List<Map<String, String>>>>() {};
+            
+            Map<String, List<Map<String, String>>> adjacency = objectMapper.readValue(file, typeRef);
+            
+            if (adjacency == null || adjacency.isEmpty()) {
+                System.out.println("閭绘帴琛ㄦ枃浠朵负绌�: " + filePath);
+                return null;
+            }
+            
+            return adjacency;
+            
+        } catch (Exception e) {
+            System.err.println("鍔犺浇閭绘帴琛ㄥけ璐�: " + e.getMessage());
+            e.printStackTrace();
+            return null;
+        }
     }
     
     /**
@@ -113,7 +158,8 @@
         if (fastPath != null) {
             return fastPath;
         }
-        return planSpaceTimePath(startCode, endCode, constraints, null, null);
+        long defaultStartTime = System.currentTimeMillis();
+        return planSpaceTimePath(startCode, endCode, constraints, null, null, defaultStartTime);
     }
 
     @Override
@@ -129,12 +175,14 @@
      * @param constraints           闈欐�佺害鏉熸潯浠�
      * @param spaceTimeOccupancyMap 鏃剁┖鍗犵敤琛�
      * @param physicalConfig        CTU鐗╃悊閰嶇疆
+     * @param startTimeMs           璧峰鏃堕棿锛堟绉掞級
      * @return 瑙勫垝鐨勮矾寰�
      */
     public PlannedPath planSpaceTimePath(String startCode, String endCode,
                                          List<double[]> constraints,
                                          Map<String, String> spaceTimeOccupancyMap,
-                                         CTUPhysicalConfig physicalConfig) {
+                                         CTUPhysicalConfig physicalConfig,
+                                         long startTimeMs) {
         // 楠岃瘉杈撳叆
         if (!isValidPathPoint(startCode) || !isValidPathPoint(endCode)) {
             System.out.println("鏃犳晥鐨勮矾寰勭偣: " + startCode + " 鎴� " + endCode);
@@ -167,7 +215,7 @@
         // 鏃剁┖A*绠楁硶瀹炵幇
         PlannedPath result = spaceTimeAStarSearch(
                 startCode, endCode, startCoord, endCoord,
-                constraints, spaceTimeOccupancyMap, physicalConfig
+                constraints, spaceTimeOccupancyMap, physicalConfig, startTimeMs
         );
 
         if (result != null) {
@@ -189,13 +237,15 @@
      * @param constraints    绾︽潫鏉′欢
      * @param occupancyMap   鏃剁┖鍗犵敤琛�
      * @param physicalConfig 鐗╃悊閰嶇疆
+     * @param startTimeMs    璧峰鏃堕棿锛堟绉掞級
      * @return 瑙勫垝鐨勮矾寰�
      */
     private PlannedPath spaceTimeAStarSearch(String startCode, String endCode,
                                              int[] startCoord, int[] endCoord,
                                              List<double[]> constraints,
                                              Map<String, String> occupancyMap,
-                                             CTUPhysicalConfig physicalConfig) {
+                                             CTUPhysicalConfig physicalConfig,
+                                             long startTimeMs) {
 
         // 浣跨敤浼樺厛闃熷垪瀹炵幇寮�鏀惧垪琛�
         PriorityQueue<SpaceTimeAStarNode> openSet = new PriorityQueue<>(
@@ -205,8 +255,7 @@
         Map<String, Double> gScores = new HashMap<>();
         Map<String, SpaceTimeAStarNode> cameFrom = new HashMap<>();
 
-        // 璧峰鏃堕棿
-        long startTime = System.currentTimeMillis();
+        long startTime = startTimeMs;
 
         // 鍒濆鍖栬捣濮嬭妭鐐�
         SpaceTimeAStarNode startNode = new SpaceTimeAStarNode(

--
Gitblit v1.9.1