You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制DTN节点仅在曼哈顿地图指定区域移动?

问题:限制DTN节点在曼哈顿地图指定区域移动

我正尝试将10个名为v1至v10的代理(DTN节点)限制在曼哈顿地图的1/4区域内移动。现有MapBasedMovement方法支持全图移动,需要修改为仅允许在指定坐标范围内移动。

已尝试选取(0, 0)至(700, 700)的坐标范围,筛选该范围内的所有MapNode,让DTNNode仅选择这些节点,但未得到正确结果。

相关代码

public Path getPath() {
    Path p = new Path(generateSpeed());
    MapNode curNode = lastMapNode;
    MapNode prevNode = lastMapNode;
    MapNode nextNode = null;    
    List<MapNode> neighbors;
    Coord nextCoord;
    
    assert lastMapNode != null: "Tried to get a path before placement";
    
    // start paths from current node 
    p.addWaypoint(curNode.getLocation());
    
    int pathLength = rng.nextInt(maxPathLength-minPathLength) + 
        minPathLength;

    for (int i=0; i<pathLength; i++) 
    {
    //          neighbors = curNode.getNeighbors();
        neighbors = host.possibleNodes;
        Vector<MapNode> n2 = new Vector<MapNode>(neighbors);
        if (!this.backAllowed) 
        {
            n2.remove(prevNode); // to prevent going back
        }   
            
        if (okMapNodeTypes != null) { //remove neighbor nodes that aren't ok
            for (int j=0; j < n2.size(); ){
                if (!n2.get(j).isType(okMapNodeTypes)) {
                    n2.remove(j);
                }
                else {
                    j++;
                }
            }
        }
        
        if (n2.size() == 0) { // only option is to go back
            nextNode = prevNode;
        }
        else
        { 
           // choose a random node from remaining neighbors
           //nextNode = n2.get(rng.nextInt(n2.size()));
            nextNode = host.possibleNodes.get(rng.nextInt(host.possibleNodes.size()));
            System.out.println(lastMapNode);
            
            List<MapNode> nodePath = pathFinder.getShortestPath(lastMapNode, nextNode);
            
            for (MapNode node : nodePath) 
            { // create a Path from the shortest path
                p.addWaypoint(node.getLocation());
            }
            
            lastMapNode = nextNode;
            prevNode = curNode;
            nextCoord = nextNode.getLocation();
            curNode = nextNode;
            
            return p;
        }
        
        prevNode = curNode;
    
        nextCoord = nextNode.getLocation();
        curNode = nextNode;
        
        p.addWaypoint(nextCoord);
    }
    
    lastMapNode = curNode;

    return p;
}

注:代码中host.possibleNodes是我自定义的方法,用于筛选指定区域内的MapNode,若需要可提供该方法代码。


内容的提问来源于stack exchange,提问作者Abhay Goyal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:22:14