Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 迷宫中所有可能块的行走算法_Algorithm_Traversal_Backtracking_Maze - Fatal编程技术网

Algorithm 迷宫中所有可能块的行走算法

Algorithm 迷宫中所有可能块的行走算法,algorithm,traversal,backtracking,maze,Algorithm,Traversal,Backtracking,Maze,我读过很多关于如何解决迷宫的Q/a,我熟悉在编程中使用递归。我的情况略有不同: 我正在尝试开发一台机器(用Java)来解决一个具有一个入口点的2D竞技场,该入口点可以位于地图的任何位置,而不仅仅是边缘。我们的目标不是找到出路(没有出路,入口是出口)。他们的任务是四处走动,寻找收藏品,避开障碍物 想象一下,这是矿井里的挖掘机。天黑了,你可以看到周围有2、3、4块瓷砖,在这个范围内你只能看到收藏品,因为它们有点闪烁。无论是障碍物,还是地图的边缘都不能被“看到”,直到挖掘者尝试它们并且无法移动。这意味

我读过很多关于如何解决迷宫的Q/a,我熟悉在编程中使用递归。我的情况略有不同:

我正在尝试开发一台机器(用Java)来解决一个具有一个入口点的2D竞技场,该入口点可以位于地图的任何位置,而不仅仅是边缘。我们的目标不是找到出路(没有出路,入口是出口)。他们的任务是四处走动,寻找收藏品,避开障碍物

想象一下,这是矿井里的挖掘机。天黑了,你可以看到周围有2、3、4块瓷砖,在这个范围内你只能看到收藏品,因为它们有点闪烁。无论是障碍物,还是地图的边缘都不能被“看到”,直到挖掘者尝试它们并且无法移动。这意味着我们不知道地图的完整大小和形状。有时是一系列细长隧道,有时是一组大房间(30x100个街区),或两者的组合

我尝试了一个简单的迷宫解决方案,在一个像房间一样的地图上递归,有半个空房间(没有障碍物,也没有收藏品)。从房间的这一部分开始,digger在这些空的街区里来回走了几十次,直到它最终用尽所有可能的方法,最后到达房间的另一端

显然,我需要一种不同的方法来绘制这样的地图,而这个简单的迷宫解算器非常适合(几乎可以)行走长隧道

对于已经达到这一水平的人,这里列出了其他条件和特征:

  • 虽然大多数收藏品在被“挖掘”时会消失并让路,但有些收藏品会变成障碍物而无法通过
  • 地图周围有通往另一张地图的大门。把它想象成电梯和楼层
  • 有杠杆,可以打开门,收集钥匙,移动石头以打开道路,或放置在某些地方以打开区域,等等
  • 好吧,非常棒的案例,当然,我的挖掘机将只做简单的工作(1.和2.很容易编码,而3.是给艾萨克·阿西莫夫的)

    所以,如果我不清楚我到底在问什么,这里是:


    如何改进我的算法,使其不在一个已经清晰的区域内重复太多次,并且无论地图的类型如何,在寻找收藏品时“更聪明”?

    我所知道的所有图形搜索算法都假设图形从一开始就已知。如果您想尝试使用类似于图形搜索的方法,则需要为环境(传感器范围之外)建立某种概率模型,然后进行蒙特卡罗模拟:

    循环N次并:

    • 根据模型随机化环境未知部分的一个实例,给出您已经拥有的信息
    • 在“猜测”环境中使用常用算法解决搜索问题
    • 对“最佳路径”将采取的第一个运动进行投票
    得票最多的运动方向获胜


    您必须调整N和建模环境的方式,以使此方法具有任何用途。无论如何,这是一个非常困难的问题。甚至这种技术也没有考虑到每一个选择的潜在信息增益(用这种计算来深入观察,因为状态评估是昂贵的)

    如何进行广度优先搜索,跟踪已经访问过的每个瓦片,这样它就不会再访问了吗?我正在考虑,看看我的实现中缺少了什么。听起来像是一个图形问题,使用一个图形库(我会说boost::graph,但您使用的是Java…)仍然在做我的研究,并在名称“backjumping”后面找到了另一种方法。我会在我的初始注释中添加以下内容,回到您的起点,您可能应该从头开始进行另一次搜索。毕竟,在收集所有东西时,您到达某个磁贴的路径可能比从该磁贴返回的最短路径长得多。您当然应该保留有关哪些磁砖无法通行的信息。谢谢,@yonil!使我的机器能够学习是伟大的。首先,我会选择一些过于简单的方法,比如在一组解算器之间进行选择,或者/或者优先选择“挖掘”的方向——一种简单的投票系统。有了你和@Bart的指导方针,我接下来几天会很忙。再次感谢!