Algorithm 探索算法

Algorithm 探索算法,algorithm,search,artificial-intelligence,agent,Algorithm,Search,Artificial Intelligence,Agent,对该问题进行了大量编辑,以使其更易于理解 给定一个具有任意尺寸和任意数量障碍物的任意位置的环境,我让一个代理在有限的视线范围内探索环境(障碍物不会阻挡视线)。它可以在NSEW的四个基本方向上移动,一次移动一个单元格,并且图形未加权(每个步骤的成本为1)。下面链接的是一张地图,表示代理(黄种人)在制定计划时对环境的当前信念。当代理进行规划时,时间不会在模拟中流逝 在允许重新访问单元的情况下,我可以使用什么探索算法来最大限度地提高效用的成本效率?每个单元格都有一个效用值。理想情况下,我会寻求最大化

对该问题进行了大量编辑,以使其更易于理解

给定一个具有任意尺寸和任意数量障碍物的任意位置的环境,我让一个代理在有限的视线范围内探索环境(障碍物不会阻挡视线)。它可以在NSEW的四个基本方向上移动,一次移动一个单元格,并且图形未加权(每个步骤的成本为1)。下面链接的是一张地图,表示代理(黄种人)在制定计划时对环境的当前信念。当代理进行规划时,时间不会在模拟中流逝

在允许重新访问单元的情况下,我可以使用什么探索算法来最大限度地提高效用的成本效率?每个单元格都有一个效用值。理想情况下,我会寻求最大化所有看到(未访问)的单元的效用之和除以路径长度,尽管如果这对于任何合适的算法来说太复杂,那么看到的单元数量就足够了。有一个最大路径长度,但它通常在数百或更高。(在我的代理上使用的实际测试环境至少要大4倍,尽管理论上可以设置的维度没有上限,因此最大路径长度将相应增加)

我认为BFS和DFS是难处理的,如果没有适当的启发式算法,A*将是非最优的,而Dijkstra不适合于生成一条不间断的路径。你能想到什么算法吗?此外,我还需要循环检测方面的帮助,因为我以前从未这样做过,因为允许重新访问是我的第一次

我考虑过的一种方法是将地图简化为一棵生成树,不同的是它不是定义为一棵连接所有单元格的树,而是定义为一棵可以看到所有单元格的树。我的方法将产生以下结果:


在结果树中,代理可以从一个节点移动到交叉点处0-1转弯处的任何相邻节点。这就是我现在的想法。使用此树生成的解决方案可能不是最优的,但它至少应该是接近最优的,由算法处理的单元要少得多,因此,如果这会使算法更容易处理,那么我想这是一个可接受的权衡。然而,我仍然在思考如何准确地为这个问题生成路径。

您的问题非常类似于规范强化学习(RL)问题,即网格世界。我将把它形式化为一个标准的马尔可夫决策过程(MDP),并使用任何RL算法来解决它

正式化将是:

  • 状态
    s
    :您的
    NxM
    离散网格
  • 动作
    a
    上、下、左、右
  • 奖励
    r
    :代理可以从目标单元格
    s'
    看到的单元格值,即
    r(s,a,s')=总和(值(s'))
  • 转换函数:
    P(s'| s,a)=1
    如果
    s'
    未超出边界或黑色单元格,则
    0
    否则
由于您对平均奖励感兴趣,折扣系数为
1
,您必须根据步骤数对累积奖励进行标准化。您还说,每一步都要花费一个,因此您可以在每个时间步将即时奖励
r
减去1,但这不会增加任何内容,因为您已经将b平均y步骤数

由于问题是离散的,策略可以是简单的softmax(或Gibbs)分布

作为求解算法,您可以使用Q-learning,它保证了在提供足够数量样本的情况下解决方案的最优性。但是,如果您的网格太大(并且您说没有限制),我建议使用策略搜索算法,如策略梯度或相对熵(尽管它们只保证收敛到局部最优).你可以在互联网上的任何地方找到关于Q-learning的信息。关于最近的政策搜索调查,我建议

这些方法的酷之处在于,它们在策略中对探索进行编码(例如,softmax策略中的温度、高斯分布中的方差),并将尝试最大化MDP所描述的累积长期回报。因此,通常情况下,您以高探索量初始化策略(例如,一个完整的随机策略),通过反复试验,算法将使其具有确定性并收敛到最优策略(然而,有时随机策略也是最优的)。 所有RL算法之间的主要区别在于它们如何在每次迭代时执行策略更新,以及如何管理折衷探索利用(我应该探索多少与我应该利用多少我已经拥有的信息)

正如Demplo所建议的,您也可以使用遗传算法(GA),但它们通常速度较慢,需要更多的调整(精英主义、交叉、变异……)


我还尝试了一些策略搜索算法来解决您的问题,虽然我随机初始化了网格,不知道确切的最优解决方案,但它们似乎工作得很好。如果您提供一些其他详细信息(测试网格、最大步数以及初始位置是固定的还是随机的)我可以更精确地测试它们。

您可以查看以下内容:。为什么不使用基于单元格数量的启发式方法seen@perreal你知道SLAM中有什么精确算法可以应用于我的问题吗?我的代理能够访问地图的尺寸,并且随时知道它自己的确切位置,所以它只需要在tracta中生成一条探索路径不稳定的时间和循环检测。@nkcode我认为使用所看到的单元格数量是一个糟糕的启发式效用/成本度量,用于a*并不会给出最佳解决方案。参考,请参阅此以了解类似问题。我上面考虑的生成树方法是试图将我的问题尽可能地简化为类似于此问题