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

Jump Point Search路径非最优问题排查求助

针对Jump Point Search非最优路径问题的排查建议

看起来你在实现JPS时遇到了路径非最优的问题,我仔细看了你的代码,发现几个可能的关键点,咱们一步步来排查:

1. 代价计算的明显错误(最可能的原因)

在你的IDSucessor函数里,计算HCost和FCost时用错了节点:

// 错误代码:
node.HCost = GetDistance(n, goal);
node.FCost = n.GCost + n.HCost;

这里的n是当前节点的初始邻居,而node是经过Jump得到的跳点,你应该用跳点node来计算代价,而不是初始邻居n。修正后应该是:

node.HCost = GetDistance(node, goal);
node.FCost = node.GCost + node.HCost;

这个错误会直接导致跳点的代价估计完全错误,算法自然无法选择最优路径。

2. Open/Closed列表的判断逻辑问题

你用closedList.Contains(node)和openList.Contains(node)来判断节点是否存在,但如果你的列表存储的是Node对象引用,而同一个坐标的节点可能被多次创建,这会导致判断失效。建议改成基于坐标的判断:

// 替换原有的!closedList.Contains(node)
!closedList.Any(item => item.x == node.x && item.y == node.y)

// 替换原有的!openList.Contains(node)
!openList.Any(item => item.x == node.x && item.y == node.y)

3. 强制节点判断的细节问题

  • 你的IsForecedDiangle函数名有拼写错误(应该是IsForcedDiagonal),如果调用时写错了名字,会导致对角线强制节点判断失效,影响跳点的选择。
  • 检查IsForcedHor的逻辑:JPS中水平移动时,强制节点的条件是垂直方向相邻节点是障碍物,且斜向节点可行走,你的代码逻辑看起来没问题,但要确认RetunNodeDir函数是否正确返回了对应坐标的节点(比如边界处理、障碍物判断是否准确)。

4. 距离计算函数的一致性

JPS的最优性依赖于启发式函数的可采纳性,如果你用的是8方向网格,应该使用切比雪夫距离作为HCost;如果是4方向网格,用曼哈顿距离。确保GetDistance函数的实现和你的网格移动模式匹配:

// 8方向网格(切比雪夫距离)
int GetDistance(Node a, Node b) {
    int dx = Math.Abs(a.x - b.x);
    int dy = Math.Abs(a.y - b.y);
    return Math.Max(dx, dy);
}

// 4方向网格(曼哈顿距离)
int GetDistance(Node a, Node b) {
    int dx = Math.Abs(a.x - b.x);
    int dy = Math.Abs(a.y - b.y);
    return dx + dy;
}

5. Jump函数的递归终止检查

虽然你的RetunNodeDir可能已经处理了边界,但建议在Jump函数开头增加网格边界判断,避免不必要的递归:

Node Jump(Node currentNode,int x,int y,Node start,Node goal) {
    Node n = RetunNodeDir(currentNode, x, y);
    // 新增:判断是否超出网格边界
    if (n == null || n.x < 0 || n.x >= gridWidth || n.y <0 || n.y >= gridHeight) {
        return null;
    }
    // ... 原有逻辑
}

先优先修正代价计算的错误,这是最可能导致非最优路径的原因,然后再逐一排查其他点。如果还有问题,可以补充跳点选择的具体场景或者网格的障碍物分布细节,方便进一步分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:45:34