#
luxiaotao1123
2024-12-18 55fad703037ed18d7b0604cb05aeec753b320cda
#
2个文件已修改
36 ■■■■ 已修改文件
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java
@@ -57,7 +57,9 @@
        NavigateNode startNode = new NavigateNode(startMapIdx[0], startMapIdx[1], startCode.getData());
        NavigateNode endNode = new NavigateNode(endMapIdx[0], endMapIdx[1], endCode.getData());
        long startTime = System.currentTimeMillis();
        NavigateNode finishNode = aStarNavigateService.execute(agvNo, startNode, endNode, lock, blackList, segment);
//        System.out.println("AStart spend time: " + (System.currentTimeMillis() - startTime));
        if (null == finishNode) {
            log.warn("{} 号AGV检索[{}] ===>> [{}]路径失败......", agvNo, startCode.getData(), endCode.getData());
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java
@@ -185,22 +185,22 @@
        ArrayList<NavigateNode> neighbourNodes = new ArrayList<>();
        NavigateNode rightNode = extendNeighborNodes(currentNode, new NavigateNode(x, y + 1), mapMatrix, existNodes, null, null);
        if (is_valid(currentNode, rightNode)) {
        if (null != rightNode) {
            neighbourNodes.add(rightNode);
        }
        NavigateNode leftNode = extendNeighborNodes(currentNode, new NavigateNode(x, y - 1), mapMatrix, existNodes, null, null);
        if (is_valid(currentNode, leftNode)) {
        if (null != leftNode) {
            neighbourNodes.add(leftNode);
        }
        NavigateNode topNode = extendNeighborNodes(currentNode, new NavigateNode(x - 1, y), mapMatrix, existNodes, null, null);
        if (is_valid(currentNode, topNode)) {
        if (null != topNode) {
            neighbourNodes.add(topNode);
        }
        NavigateNode bottomNode = extendNeighborNodes(currentNode, new NavigateNode(x + 1, y), mapMatrix, existNodes, null, null);
        if (is_valid(currentNode, bottomNode)) {
        if (null != bottomNode) {
            neighbourNodes.add(bottomNode);
        }
@@ -257,36 +257,10 @@
        }
    }
    private boolean is_valid(NavigateNode currentNode, NavigateNode node) {
        if (null == node) {
            return false;
        }
        return true;
    }
    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());
    }