如何为A *启发式添加更多参数而不仅仅是距离?

时间:2013-02-03 01:21:05

标签: algorithm search artificial-intelligence a-star

对于小型2D游戏中的寻路,我现在使用A *算法,基于简单的欧氏距离启发式算法。我的游戏世界被表示为一个细胞网格,或者被障碍占用。必须使用A *计算路径的字符可以向任何方向移动(如果未被阻止),而不仅仅是N / E / S / W.

好的,所以基本上工作正常。现在我需要在A *启发式函数中添加另一个参数,一个与每个网格单元相关联的成本值。这个成本值越高,我们的角色应该越多地避免使用该单元格。

但是,我无法将启发式函数更改为仅使用每个网格单元格的此成本值,因为单元格到A *目标位置的距离仍然很重要。角色应该尽量避免任何高成本的细胞,但同时它也不能离目标位置太远。因此,我需要在单元格的距离和成本值之间进行“权衡”。

理想情况下,我想找到一个解决方案,允许我轻松调整/优化单元格的距离和成本值之间的这种关系,以便我可以微调启发式。

任何想法如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

当您使用任何最短路径算法(A *或Dijkstrs)时,每个节点需要一个成本值。
因此,您必须认为自己是一个如何将距离(您的单元格)与障碍成本相结合的公式。
您可以创建一个cost()函数,该函数需要花费长度成本并增加障碍成本。

答案 1 :(得分:0)

你需要使用权重(0到1之间的值),假设w是远程权重,1-w是成本权重,所以你的新启发式将是这样的: H = w *距离+(1-w)*成本

现在你需要根据你的域优化W - 安非。