2

在此处输入图像描述

我有一个网格,如图所示。到目前为止,我已经实现了以下函数作为我的启发式函数。所以这个游戏的目标是收集所有放在这个网格上的数字。起点 A。

  1. 曼哈顿距离,然后取它的最大值来计算启发式。
    distance = abs(A_x-x_i)+abs(A_y-y_i)
    if distance > manhMax:
       manhMax = distance
  1. 所有曼哈顿距离到所放置数字的总和。(我认为这是不可接受的,因为它高估了到达目标的距离——如果我错了,请纠正我)

我的问题是,第一种方法扩展状态超出了我的需要,第二种方法是不可接受的。我目前正在实施我自己的启发式方法。

我想出了这个想法,计算从 A 到 2 再到 1 再到 3 和 0 的距离之间的距离之间的平方欧几里得距离。没有这样的顺序来收集数字。然而,问题只是欧几里得距离扩展了太多的状态,尽管它是可以接受的。你能帮我一个合适的距离或方法来完成我的任务吗?

谢谢!

4

1 回答 1

1

我怀疑您在解释您的方法时遇到了麻烦,因为这个问题没有用于定义“可接受”的简单、单一目标范式。相反,您有一个小的 TSP(旅行商问题),您可以在其中收集 4 个中的任何一个项目!订单。您没有描述您在方法中使用距离,但不会进行简单的计算。添加所有 10 个距离(对于 n=5 个节点;5x4 / 2)只是超支,因为您将只遍历其中的 4 个边。同样,将 A 到每个项目的距离相加是错误的。

相反,您需要在路径的每条边上使用启发式算法,然后添加所考虑的四边路径的启发式估计值。对于这种处理,欧几里得距离是可以接受的——但它的平方不是:它严重高估,并且单位错误(面积,而不是距离)。曼哈顿距离可能更适合您。

请注意,您在此示例中遇到问题,因为边 3-0 将被低估 4 到 5 倍,具体取决于您的启发式方法。

于 2019-06-25T23:13:34.703 回答