我有一个如图所示的网格。到目前为止,我已经将以下功能实现为启发式功能。因此,该游戏的目标是收集放置在该网格上的所有数字。起点A。
distance = abs(A_x-x_i)+abs(A_y-y_i)
if distance > manhMax:
manhMax = distance
我的问题是,第一种方法扩展状态超出我的需要,第二种方法不可接受。目前,我正在实施自己的启发式方法。
我想到了这个主意,计算从A到2再到1再到3和0的距离之间的距离之间的平方欧几里得距离。没有这样的顺序来收集数字。然而,问题是尽管欧氏距离可扩展但扩展了太多状态。您能否以合适的距离或方法帮助我完成任务。
谢谢!
答案 0 :(得分:0)
我怀疑您在解释您的方法时遇到了麻烦,因为此问题没有用于定义“可允许的”的简单,单一目标范例。相反,您有一个小的TSP(旅行商问题),您可以在其中收集4种物品中的任何一种!订单。您没有描述在方法中使用的哪个距离,但是没有简单的计算可以做到。将所有10个距离相加(对于n = 5个节点; 5x4 / 2)只是超支,因为您将仅遍历其中4条边。同样,将A到每个项目的距离相加也是错误的。
相反,您需要在路径的每个边缘上使用启发式,然后添加,然后为所考虑的四边缘路径生成启发式估计。对于 this 处理,欧几里德距离是可以接受的-但其平方不是:它严重高估了并且以错误的单位(面积而不是距离)显示。曼哈顿距离可能会更适合您。
请注意,在此示例中您遇到问题,因为根据启发式方法,边缘3-0将被低估4到5倍。