【问题标题】:A* and diagonal movement cost on 2D x,y grid2D x,y 网格上的 A* 和对角线移动成本
【发布时间】:2019-04-06 20:54:12
【问题描述】:

我刚刚为 2D xy 网格编写了一个 A* 算法,它运行良好。但是,目前我将对角线移动与水平或垂直移动相同,实际上,如果我们用欧几里得或毕达哥拉斯术语来看,对角线移动大约要远 40%,所以如果我想为我的模型以这种方式查看它。

不过,仅此而已。你正在进一步移动 40%,但它的难度也增加了 40%。因此,如果我决定在计算中进行这种调整,似乎一切都应该“洗掉”,无论如何我应该得到基本相同的结果。我的意思是,似乎什么都不做应该没问题,而不是在对角线运动中加入“进一步移动 40%,难度增加 40%”的因素。

我的想法正确吗?

【问题讨论】:

  • A* 用于查找最短路径。我不明白“困难”与它有什么关系。如果您想识别“up, up”比“up-left, up-right”短,那么您必须认识到对角线移动更长。
  • @MattTimmermans,称之为“难度”,称之为“成本”,随便你怎么称呼。 A* 使用这种启发式方法来确定“最短”(无论定义如何)路径是什么。在我的例子中,网格上的每个图块都有一个“困难”穿过该图块,无论这意味着它是几乎没有困难的铺砌道路,还是非常困难的山脉/森林。另外,是的,正如我已经说过的,我知道对角线移动更长。问题是这是否可以忽略,因为同样的比例也更难。

标签: algorithm search


【解决方案1】:

如果你绘制一个粗略的 4x4 节点网格。尝试测试起始节点和目标节点之间的各种路由。你会看到你在很大程度上是正确的。但是尝试开始在左上角而目标在右上角的情况。它水平的 3 个动作到达那里,太棒了。如果对角线的权重相同......你可以创建一个类似船的形状(vertrightdown,horright,vertrightup),这也是3个动作。你知道对角线确实走得更远,所以你知道算法中需要有一些东西来说明水平路线是最好的。邻居 r 考虑的顺序可能会使这个额外的成本无关紧要。如果对角线和水平线是相同的 f 值......它仍然必须在 1 或其他之间进行选择。所以这取决于你在比较 f 值时如何从你的开放/前沿表中的池中选择你的“当前节点”。这真的取决于你如何设置你的算法以及它的用途,你可能根本不需要做任何事情。

【讨论】:

    猜你喜欢
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多