在有限知识和无距离启发式下的路径查找

我在编写一个类似《精英》的简单游戏时,遇到了编写AI路径查找程序的问题。

游戏中的世界由几个通过“虫洞”连接的“系统”组成,飞船每回合可以从当前所在的系统跳跃到任何与之相连的系统。AI只能知道它应该知道的事情;它不知道未去过的系统有哪些连接(尽管它可以通过已经访问过的系统推断出来,因为连接是双向的)。AI的其他部分根据飞船库存中的货物以及它记得在经过的系统中货物的价值,来决定飞船需要到达哪个系统。

问题是,我不知道如何解决寻找目标系统路径的问题。我不能使用A*算法;在没有路径的情况下无法确定到另一个系统的‘距离’。此外,我需要这个算法高效,因为每次玩家行动时,它需要运行大约100次。

有谁知道合适的算法吗?


回答:

我最终实现了一个双向、贪婪版本的广度优先搜索,这足以满足需求。简单来说,我只是让程序查看起始节点连接的每个节点,然后是这些节点连接的节点,再然后是这些节点连接的节点……直到找到目标节点。

通常,人们会构建一个合适路径的列表并选择最短的路径,但我尝试了一种不同的方法;我让程序并行运行两个搜索,一个从起点开始,另一个从终点开始。当‘从’搜索找到‘到’搜索的最后一个节点时,就认为路径找到了。

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

这种古怪的算法是否真的比直接的广度优先搜索更好,还有待观察。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注