A *算法的启发式算法

时间:2013-04-14 23:27:04

标签: java artificial-intelligence a-star heuristics

我有一个问题要用A *来解决,但我很难设计一个好的启发式。

我的问题是:

确定城市中垃圾收集车完成的最佳路线,该城市在地图上移动,以寻求最大化负荷并最大限度地减少旅行时间。

我有4种类型的节点:Geral Nodes,Dump Nodes,Garbage Nodes和Gas Nodes。

垃圾收集车可能会耗尽燃气并有机会重新装满车辆。可能还有超过1个垃圾转储站在哪里交付。

什么是解决此问题的最佳启发式方法?

此致

2 个答案:

答案 0 :(得分:3)

良好的首次通过搜索启发式是使用贪心算法。例如,在一般的路线规划算法(找到城市之间的最短路线)中,一个不错的启发式算法就是使用贪婪的算法,你总是会去乌鸦飞行时最接近目的地的下一个城市;这是一种线性时间启发式算法,永远不会过高估计解决方案。在您的情况下,也许您可​​以使用贪婪算法,其中垃圾车始终进入下一个最接近的垃圾节点,或垃圾节点最多的垃圾节点;如果不知道你正在使用的四个节点的细节,我就无法更具体,但你明白了。任何不高估解决方案的线性时间算法都可以,然后您可以在下一次传递中调整它。 (在大多数情况下,nlog(n)启发式也是可以接受的; n ^ 2变得非常昂贵。)

答案 1 :(得分:1)

A *非常适合找到2点之间的最快/最短路线。

但是,您的垃圾车问题可能是一个完全不同的问题:您需要通过订购一组点来找到最快/最短的路线。这基本上是旅行商问题(TSP)或它的车兄弟车辆路径问题(VRP),两者都是 NP-complete

A *无法处理NP完全问题,您需要 metaheuristics 等算法等。寻找有关TSP和VRP问题的解决方案,例如the TSP and VRP example in OptaPlanner (java, open source) (显示在this video)。