寻路知识有限且没有距离启发式

时间:2014-01-05 13:12:58

标签: algorithm artificial-intelligence path-finding

我在编写一个简单的Elite-esque游戏中编写AI的寻路程序时遇到了麻烦。

这个游戏中的世界是由“虫洞”连接的少数“系统”,并且船只可以从它所处的系统跳到它每回合链接一次的任何系统。人工智能仅限于知道它应该知道的事情;它不知道什么链接来自一个它没有去过的系统(虽然它可以从它看到的系统中解决,因为链接是双向的)。人工智能的其他部分决定了船舶需要根据其库存中的商品以及它所记录的系统所记录的价值而记录的系统。

问题是,我不知道如何解决找到目标系统路径的问题。我不能用A *;没有路径,就无法确定与另一个系统的“距离”。我还需要这个算法才能有效,因为每次玩家轮到它时都需要运行大约100次。

有谁知道合适的算法?

4 个答案:

答案 0 :(得分:1)

我最终实现了广度优先搜索的双向,贪婪版本,这非常适合这个目的。简单地说,我只是让程序通过每个节点查看其起始节点连接,然后每个节点连接到那些节点,然后连接到每个节点......直到找到目标节点。

通常人们会建立一个合适的路径列表并选择最短的路径,但我尝试了另一种方法;我让程序并行运行两次搜索,一次从起点开始,一次从终点开始。当'from'搜索找到'to'搜索的最后一个节点时,该路径被认为是找到的。

然后通过检查路径上的每个节点是否连接到路径中的某个节点,并删除它们之间的每个节点来优化路径。

这个时髦算法实际上是否比直接BFS更好还有待观察。

答案 1 :(得分:0)

当涉及未知环境时,我通常使用进化算法方法。它并不能保证您在很短的时间内找到最佳解决方案,但这是解决此类问题的一种方法。

答案 2 :(得分:0)

查看Partially Observable Markov Decision Problems(POMDP)。您应该能够用此模型表达您的问题。

然后您可以使用解决这些问题的算法来尝试找到一个好的解决方案。请注意,解决POMDP通常非常昂贵,您可能不得不采用近似方法。

答案 3 :(得分:0)

最容易欺骗的方法是通过,或者至少尝试访问尽可能多的系统,然后将距离启发式实现为你去过的所有系统的总和。

另外,方式更酷:

我已经使用ACO(蚁群优化)实现了类似的功能,并且与PSO(粒子群优化)结合得非常好,但是,系统施加的额外限制意味着您将不得不花费一些(在至少一个会议确定环境布局,如果它是动态的...好吧......但是 好处是这个算法完全绕过了启发式生成的需要,这是你需要的,因为你是盲目的。但请注意,如果您的搜索空间(运行次数)很小,这是一个坏主意。 (100可能是可以接受的,但10或5 ......不是那么多)。

这在处理大量节点(系统)时非常好地扩展,并且它绕过了每个节点到节点关系的启发式距离计算需求,从而使其更有效。

祝你好运。