From 55fad703037ed18d7b0604cb05aeec753b320cda Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期三, 18 十二月 2024 14:35:20 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java | 92 +++++++--------------------------------------- 1 files changed, 14 insertions(+), 78 deletions(-) diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java index 0f4def0..46501c0 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java @@ -1,11 +1,13 @@ package com.zy.acs.manager.core.service.astart; +import com.zy.acs.common.constant.RedisConstant; import com.zy.acs.common.utils.RedisSupport; import com.zy.acs.framework.common.Cools; import com.zy.acs.manager.common.utils.MapDataUtils; import com.zy.acs.manager.core.domain.Lane; import com.zy.acs.manager.core.service.LaneService; import com.zy.acs.manager.core.service.astart.domain.DynamicNode; +import com.zy.acs.manager.core.utils.RouteGenerator; import com.zy.acs.manager.manager.entity.Route; import com.zy.acs.manager.manager.entity.Segment; import com.zy.acs.manager.manager.service.CodeService; @@ -50,7 +52,7 @@ Integer maxAgvCountInLane = configService.getVal("maxAgvCountInLane", Integer.class); PriorityQueue<NavigateNode> openQueue = new PriorityQueue<>(); - ArrayList<NavigateNode> existNodes = new ArrayList<>(); + Set<NavigateNode> existNodes = new HashSet<>(); openQueue.add(start); existNodes.add(start); @@ -59,7 +61,7 @@ DynamicNode[][] dynamicMatrix = mapDataDispatcher.getDynamicMatrix(null); String[][] waveMatrix = mapDataDispatcher.getWaveMatrix(null); - while (openQueue.size() > 0) { + while (!openQueue.isEmpty()) { // 鍙栦紭鍏堥槦鍒楅《閮ㄥ厓绱犲苟涓旀妸杩欎釜鍏冪礌浠嶰pen琛ㄤ腑鍒犻櫎锛屽彇F鍊兼渶灏忕殑鑺傜偣 NavigateNode currentNode = openQueue.poll(); @@ -175,7 +177,7 @@ } // 鑾峰彇鍥涘懆鑺傜偣 - private ArrayList<NavigateNode> getNeighborNodes(NavigateNode currentNode, int[][] mapMatrix, List<NavigateNode> existNodes) { + private ArrayList<NavigateNode> getNeighborNodes(NavigateNode currentNode, int[][] mapMatrix, Set<NavigateNode> existNodes) { //鑾峰彇褰撳墠缁撶偣鐨剎, y int x = currentNode.getX(); int y = currentNode.getY(); @@ -183,29 +185,29 @@ ArrayList<NavigateNode> neighbourNodes = new ArrayList<>(); NavigateNode rightNode = extendNeighborNodes(currentNode, new NavigateNode(x, y + 1), mapMatrix, existNodes, null, null); - if (is_valid(currentNode, rightNode, mapMatrix, existNodes)) { + if (null != rightNode) { neighbourNodes.add(rightNode); } NavigateNode leftNode = extendNeighborNodes(currentNode, new NavigateNode(x, y - 1), mapMatrix, existNodes, null, null); - if (is_valid(currentNode, leftNode, mapMatrix, existNodes)) { + if (null != leftNode) { neighbourNodes.add(leftNode); } NavigateNode topNode = extendNeighborNodes(currentNode, new NavigateNode(x - 1, y), mapMatrix, existNodes, null, null); - if (is_valid(currentNode, topNode, mapMatrix, existNodes)) { + if (null != topNode) { neighbourNodes.add(topNode); } NavigateNode bottomNode = extendNeighborNodes(currentNode, new NavigateNode(x + 1, y), mapMatrix, existNodes, null, null); - if (is_valid(currentNode, bottomNode, mapMatrix, existNodes)) { + if (null != bottomNode) { neighbourNodes.add(bottomNode); } return neighbourNodes; } - private NavigateNode extendNeighborNodes(NavigateNode currentNode, NavigateNode extendNode, int[][] mapMatrix, List<NavigateNode> existNodes, Integer dx, Integer dy) { + private NavigateNode extendNeighborNodes(NavigateNode currentNode, NavigateNode extendNode, int[][] mapMatrix, Set<NavigateNode> existNodes, Integer dx, Integer dy) { NavigateNode nextNode = null; if (null == dx || null == dy) { @@ -230,7 +232,7 @@ } else { - if (isExist(nextNode, existNodes)) { + if (existNodes.contains(nextNode)) { return null; } @@ -245,11 +247,9 @@ nextNode.setCodeData(nextNodeCodeData); // 鍒ゆ柇閫氳繃鎬� - Route route = routeService.findByCodeOfBoth( - codeService.selectByData(currentNodeCodeData).getId(), - codeService.selectByData(nextNodeCodeData).getId() - ); - if (null == route) { + String routeKey = RouteGenerator.generateRouteKey(currentNodeCodeData, nextNodeCodeData); + Object routeVal = redis.getMap(RedisConstant.AGV_MAP_ROUTE_HASH_FLAG, routeKey); + if (routeVal == null || !(Boolean) routeVal) { return null; } @@ -257,74 +257,10 @@ } } - private boolean is_valid(NavigateNode currentNode, NavigateNode node, int[][] mapMatrix, List<NavigateNode> existNodes) { - if (null == node) { - return false; - } -// int x = node.getX(); -// int y = node.getY(); -// if (x < 0 || x >= mapMatrix.length -// || y < 0 || y >= mapMatrix[0].length) { -// return false; -// } -// -// // 濡傛灉缁撶偣鐨勪綅缃皬浜�0锛屽垯涓嶅悎娉� -// if (mapMatrix[x][y] < 0) return false; -// -// if (is_exist(node, existNodes)) { -// return false; -// } -// -// // 鍒ゆ柇閫氳繃鎬� -// String[][] codeMatrix = mapDataDispatcher.getCodeMatrix(null); -// String currentNodeCodeData = codeMatrix[currentNode.getX()][currentNode.getY()]; -// String nextNodeCodeData = codeMatrix[node.getX()][node.getY()]; -// node.setCodeData(nextNodeCodeData); -// -// Route route = routeService.findByCodeOfBoth( -// codeService.selectByData(currentNodeCodeData).getId(), -// codeService.selectByData(nextNodeCodeData).getId() -// ); -// if (null == route) { -// return false; -// } - - return true; - } - -// private boolean is_exist(NavigateNode node, List<NavigateNode> existNodes) { -// for (NavigateNode exist_node : existNodes) { -// if (node.getX() == exist_node.getX() && node.getY() == exist_node.getY()) { -// return true; -// } -// } -// return false; -// } - - private boolean isExist(NavigateNode node, List<NavigateNode> existNodes) { - for (NavigateNode existNode : existNodes) { - if (this.isSame(node, existNode)) { - return true; - } - } - return false; - } - - private boolean isSame(NavigateNode o1, NavigateNode o2) { - if (Cools.isEmpty(o1, o2)) { - return false; - } - return o1.getX() == o2.getX() && o1.getY() == o2.getY(); - } - //------------------A*鍚彂鍑芥暟------------------// //璁$畻閫氳繃鐜板湪鐨勭粨鐐圭殑浣嶇疆鍜屾渶缁堢粨鐐圭殑浣嶇疆璁$畻H鍊�(鏇煎搱椤挎硶锛氬潗鏍囧垎鍒彇宸�肩浉鍔�) private int calcNodeCost(NavigateNode node1, NavigateNode node2) { -// Code code1 = codeService.selectByData(node1.getCodeData()); -// Code code2 = codeService.selectByData(node2.getCodeData()); -// return (int) (Math.abs(code2.getX() - code1.getX()) + Math.abs(code2.getY() - code1.getY())); - return Math.abs(node2.getX() - node1.getX()) + Math.abs(node2.getY() - node1.getY()); } -- Gitblit v1.9.1