From 594309532fecd0f75c72752885ab93a8a56e5b9b Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期二, 14 十月 2025 14:56:38 +0800 Subject: [PATCH] 1 --- algo-zkd/src/main/java/com/algo/service/PathPlanningService.java | 81 +++++++++++++++++----------------------- 1 files changed, 34 insertions(+), 47 deletions(-) diff --git a/algo-zkd/src/main/java/com/algo/service/PathPlanningService.java b/algo-zkd/src/main/java/com/algo/service/PathPlanningService.java index 9fef948..026b64b 100644 --- a/algo-zkd/src/main/java/com/algo/service/PathPlanningService.java +++ b/algo-zkd/src/main/java/com/algo/service/PathPlanningService.java @@ -1,26 +1,25 @@ package com.algo.service; +import com.algo.config.EnvDataConfig; import com.algo.model.*; import com.algo.util.JsonUtils; +import com.algo.util.PathTimeCalculator; +import lombok.Data; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.PostConstruct; import java.util.*; import java.util.concurrent.*; /** * 璺緞瑙勫垝鏈嶅姟 */ +@Service public class PathPlanningService { - /** - * 璺緞鏄犲皠琛� - */ - private Map<String, Map<String, Integer>> pathMapping; - - /** - * 鐜閰嶇疆 - */ - private Map<String, Object> environmentConfig; + @Autowired + private EnvDataConfig envDataConfig; /** * 鎵ц涓换鍔℃彁鍙� @@ -46,64 +45,48 @@ * 鍓╀綑璺緞澶勭悊 */ private RemainingPathProcessor remainingPathProcessor; - + /** - * 绾跨▼姹犲ぇ灏� + * 璺緞鏃堕棿璁$畻鍣� */ - private final int threadPoolSize; + private PathTimeCalculator timeCalculator; + /** * 绾跨▼姹� */ - private final ExecutorService executorService; + private final ExecutorService executorService = Executors.newFixedThreadPool(Math.max(4, Runtime.getRuntime().availableProcessors())); /** * CTU鎵瑰鐞嗗ぇ灏� */ private final int batchSize = 10; - /** - * 鏋勯�犲嚱鏁� - * - * @param pathMapping 璺緞鏄犲皠琛� - * @param environmentConfig 鐜閰嶇疆 - * @param taskDataList 浠诲姟鏁版嵁鍒楄〃 - */ - public PathPlanningService(Map<String, Map<String, Integer>> pathMapping, - Map<String, Object> environmentConfig, - List<TaskData> taskDataList) { - this.pathMapping = pathMapping; - this.environmentConfig = environmentConfig; - - this.threadPoolSize = Math.max(4, Runtime.getRuntime().availableProcessors()); - this.executorService = Executors.newFixedThreadPool(threadPoolSize); - - // 鍒濆鍖� - initializeComponents(taskDataList); - - System.out.println("璺緞瑙勫垝鏈嶅姟鍒濆鍖栧畬鎴愶紙绾跨▼姹犲ぇ灏�: " + threadPoolSize + "锛�"); - } /** * 鍒濆鍖栧悇涓粍浠� - * - * @param taskDataList 浠诲姟鏁版嵁鍒楄〃 */ - private void initializeComponents(List<TaskData> taskDataList) { - // 鍒濆鍖栦换鍔℃彁鍙栧櫒 - this.taskExtractor = new ExecutingTaskExtractor(pathMapping, taskDataList); + @PostConstruct + public void initializeComponents() { // 鍒濆鍖栬矾寰勮鍒掑櫒 - this.pathPlanner = new AStarPathPlanner(pathMapping); + this.pathPlanner = new AStarPathPlanner(envDataConfig.getPathMapping()); // 鍒濆鍖栫鎾炴娴嬪櫒 - this.collisionDetector = new CollisionDetector(pathMapping); + this.collisionDetector = new CollisionDetector(envDataConfig.getPathMapping()); // 鍒濆鍖栫鎾炶В鍐冲櫒 this.collisionResolver = new CollisionResolver(collisionDetector); // 鍒濆鍖栧墿浣欒矾寰勫鐞嗗櫒 - this.remainingPathProcessor = new RemainingPathProcessor(pathMapping); + this.remainingPathProcessor = new RemainingPathProcessor(envDataConfig.getPathMapping()); + + // 鍒濆鍖栨椂闂磋绠楀櫒 + Map<String, double[]> realCoordinateMapping = JsonUtils.loadRealCoordinateMapping("man_code.json"); + this.timeCalculator = new PathTimeCalculator(envDataConfig.getPathMapping(), realCoordinateMapping); + + // 涓虹鎾炶В鍐冲櫒璁剧疆鏃堕棿璁$畻鍣� + this.collisionResolver.setTimeCalculator(timeCalculator); } /** @@ -114,9 +97,12 @@ * @param constraints 璺緞绾︽潫鏉′欢 * @return 璺緞瑙勫垝缁撴灉 */ - public PathPlanningResult planAllAgvPaths(List<AGVStatus> agvStatusList, + public PathPlanningResult planAllAgvPaths(List<TaskData> taskList, List<AGVStatus> agvStatusList, boolean includeIdleAgv, List<double[]> constraints) { + // 鍒濆鍖栦换鍔℃彁鍙栧櫒 + this.taskExtractor = new ExecutingTaskExtractor(envDataConfig.getPathMapping(), taskList); + long startTime = System.currentTimeMillis(); System.out.println("寮�濮嬩负 " + agvStatusList.size() + " 涓狢TU瑙勫垝"); @@ -348,7 +334,7 @@ List<double[]> constraints, Map<String, String> occupancyMap, AGVStatus agvStatus) { - // 棣栧厛灏濊瘯鍩烘湰璺緞瑙勫垝 + // 灏濊瘯鍩烘湰璺緞瑙勫垝 PlannedPath basicPath = pathPlanner.planPath(startPos, endPos, constraints); if (basicPath == null) { return null; @@ -359,8 +345,8 @@ basicPath, occupancyMap, agvStatus.getPhysicalConfig() ); - // 璁剧疆璺緞鐨勬椂闂翠俊鎭� - enhancePathWithTimeInfo(basicPath, safeStartTime, agvStatus.getPhysicalConfig()); + // 浣跨敤缁熶竴鐨勬椂闂磋绠楀櫒璁剧疆绮剧‘鐨勬椂闂翠俊鎭� + timeCalculator.calculatePathTiming(basicPath, safeStartTime, agvStatus.getPhysicalConfig(), 0.0); return basicPath; } @@ -416,7 +402,7 @@ long currentTime = System.currentTimeMillis() / 1000; // 杞崲涓虹 for (PathCode pathCode : codeList) { - int[] coord = JsonUtils.getCoordinate(pathCode.getCode(), pathMapping); + int[] coord = JsonUtils.getCoordinate(pathCode.getCode(), envDataConfig.getPathMapping()); if (coord != null) { String spaceTimeKey = coord[0] + "," + coord[1] + "," + currentTime; occupancyMap.put(spaceTimeKey, agvStatus.getAgvId()); @@ -627,6 +613,7 @@ /** * 璺緞瑙勫垝缁撴灉绫� */ + @Data public static class PathPlanningResult { private int totalAgvs; private int executingTasksCount; -- Gitblit v1.9.1