体贴的路径查找AI

我想让宽度为1的流能够进行路径查找,同时考虑到在同一条宽度为2的路径上运行的另一条流。

假设我有一个这样的地图:(“0”表示不可通过,“-”表示可以通过,“1”和“A”是起点,而“2”和“b”是终点)

0000000000000000000001A0000000000--00B200------00--00------00------000000------00000000000000000

如果我使用A*算法让“A”查找通往“B”的路径,它会阻塞从“1”到“2”的路径。(“=”表示路径)

0000000000000000000001A0000000000-=00B200======00=-00=-----00=====-000000------00000000000000000

是的,我可以先查找从“1”到“2”的路径,然后再规划AB路径,但这并不总是有效。例如这种情况:

00000000000000000000000000000000000001A00000000000000000--00B200------00------00--00------00------00------00------000000------00------0000000000000000000000000

从“1”到“2”的A*路径查找会阻塞“A”到“B”的路径

000000000000000001A000000000000000000=-00B200------00=====-00-=00=====-00=-----00-====-00=====-000000------00------0000000000000000000000000

“A”到“B”的路径会阻塞“1”到“2”的路径

000000000000000001A000000000000000000-=00B200------00======00=-00=====-00=-----00=====-00=====-000000------00------0000000000000000000000000

补充说明:“A”、“B”、“1”和“2”可以在用户创建的地图上的任何位置。同时会有1到10条路径同时进行,起始和停止是独立的,尽管AI只需要考虑当前的其他路径。这也需要实时进行,因此计算时间不能超过几秒钟。

那么,我该如何让AI足够聪明以避免阻塞另一条路径呢?目前我使用的是A*算法,有没有改进它的方法,或者我应该使用一个全新的AI系统?(两种方法对我都适用)


回答:

如果我理解正确的话,你正在寻找合作路径查找。在过去的十年里,已经提出了许多解决这个问题的方案。你可以在这篇论文中找到对它们的很好的总结。

我给你一个简短的回顾:

  • 局部修复A* 每个代理使用A*算法搜索到目的地的路线,忽略所有其他代理,只考虑当前的邻居。然后代理开始沿着他们的路线行进,直到即将发生碰撞。每当一个代理即将移动到一个已被占用的位置时,它会重新计算剩余路线。这有点“蛮力”,并不是最先进的技术,但它“容易”实现,并且是当前视频游戏中的行业标准。不幸的是,我找不到该算法的伪代码。:(
  • 合作A* 是一种新的算法,用于解决合作路径查找问题。任务被分解为一系列单代理搜索。个体搜索在三维时空内进行,并考虑其他代理的计划路线。代理的行动集中包括一个“等待”移动,使其能够保持静止。
  • 层次合作A* 与之前类似,但以层次方式进行。
  • 窗口化层次合作A* 当时(我想是2005年)的最先进技术。互联网上有一个有趣的演示,带有Java源代码和所有内容,在这里。要了解为什么WHCA*更好,请查看论文的第3页。

我希望这些足以让你开始自己探索这个领域,如果你需要的话。:)

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中创建了一个多类分类项目。该项目可以对…

发表回复

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