【发布时间】:2015-06-30 11:10:00
【问题描述】:
大量编辑此问题以使其更易于理解。
给定一个具有任意尺寸和任意数量障碍物的任意位置的环境,我有一个代理在有限的视线范围内探索环境(障碍物不会阻挡视线)。它可以在 NSEW 的四个基本方向上移动,一次一个单元格,并且图是未加权的(每个步骤的成本为 1)。下面的链接是一张地图,表示代理(黄色人)在规划时对环境的当前信念。代理正在计划时,时间不会在模拟中流逝。
http://imagizer.imageshack.us/a/img913/9274/qRsazT.jpg
在允许重新访问单元的情况下,我可以使用什么探索算法来最大限度地提高公用事业的成本效益?每个单元格都有一个效用值。理想情况下,我会寻求最大化所有看到(未访问)单元格的效用总和除以路径长度,尽管如果这对于任何合适的算法来说太复杂,那么看到的单元格数量就足够了。存在最大路径长度,但通常为数百或更长。 (在我的代理上使用的实际测试环境至少要大 4 倍,虽然理论上可以设置的维度没有上限,因此最大路径长度会相应增加)
我认为 BFS 和 DFS 难以处理,A* 不是最优的,因为缺乏合适的启发式算法,而且 Dijkstra 不适合生成单个完整路径。有没有你能想到的算法?此外,我需要循环检测方面的帮助,因为我以前从未这样做过,因为允许重新访问是我的第一次。
我考虑过的一种方法是将地图缩减为生成树,只不过不是将其定义为连接所有单元格的树,而是将其定义为可以看到所有单元格的树。我的方法将导致以下结果:
http://imagizer.imageshack.us/a/img910/3050/HGu40d.jpg
在结果树中,代理可以从一个节点到任何相邻节点,这些节点在交叉口处 0-1 转开。这是我目前的想法。使用这棵树生成的解决方案可能不是最优的,但它至少应该是接近最优的,算法处理的单元要少得多,所以如果这会使算法更容易处理,那么我想这是可以接受的权衡。但是,我仍然在思考如何准确地为此生成路径。
【问题讨论】:
-
为什么不使用基于看到的单元格数量的启发式 A*
-
@perreal 你知道 SLAM 的哪些确切算法可以应用于我的问题吗?我的代理能够随时访问地图的尺寸并知道自己的确切位置,因此它只需要在可处理的时间和循环检测中生成探索路径。
-
@nkcode 我相信使用看到的单元格数量是用于 A* 的一种较差的启发式效用/成本度量,并且不会给出最佳解决方案
-
作为参考,请参阅此以了解类似问题。我在上面考虑的生成树方法是一种尝试将我的问题减少到尽可能类似于这个math.stackexchange.com/questions/55221/…
标签: algorithm search artificial-intelligence agent