gpt4 book ai didi

c++ - Q-learning学习扫雷行为

转载 作者:行者123 更新时间:2023-11-30 04:43:25 24 4
gpt4 key购买 nike

我正在尝试使用 Q-learning 来学习 Mat Buckland 智能清扫器的谨慎版本上的扫雷行为,原始版本可在此处获得 http://www.ai-junkie.com/ann/evolved/nnt1.html , 一个任务。该任务限制我们在一个有效的 40x40 网格上进行 2000 次移动的 50 次迭代,每次迭代都会重置地雷并且在随机位置生成代理。

我曾尝试执行 q 学习,其中包括对移动的惩罚、对扫雷的奖励和对未击中地雷的惩罚。清扫代理似乎无法在 50 次迭代中学习如何有效地扫雷,因为它知道去特定的单元格是好的,但在地雷消失后它不再获得奖励,而是因为移动到那个单元格而受到惩罚费用

我想尝试仅在所有地雷都被清除时才提供奖励,以试图使环境静止,因为只会出现未收集到所有地雷或收集到所有地雷的状态,但由于以下原因,我正在努力实现这一点agent 每次迭代只有 2000 次移动并且能够回溯,无论是否有收集地雷的奖励,它都无法在一次迭代中扫清所有地雷。

我的另一个想法是为每个地雷创建一个有效的新 Q 矩阵,因此一旦收集到地雷,清扫器就会转换到该矩阵并在当前地雷被排除在外的情况下运行。

我是否可以采用任何更好的方法,或者我可以尝试对我自己的方法进行更实际的调整?

更明确的规则解释:

  • map 边缘环绕,因此离开 map 的右边缘将导致机器人出现在左边缘等。
  • 清扫机器人可以从任何 map block 上下左右移动。
  • 当机器人与地雷相撞时,地雷被视为已扫除并移除。
  • 目的是让机器人学会从任何起始位置扫除 map 上的所有地雷。

最佳答案

鉴于清扫机总能看到最近的地雷,这应该很容易。从你的问题来看,我认为你唯一的问题是为你的代理状态找到一个好的奖励函数和表示。

定义状态

绝对位置在随机环境中很少有用,特别是如果环境像您的示例中那样是无限的(因为机器人可以越过边界并在另一侧重生)。这意味着代理运行不需要环境的大小(我们实际上需要它来模拟无限空间)。

奖励函数根据代理的当前状态与其先前状态相比计算其返回值。但是我们如何定义状态呢?让我们看看我们实际需要什么才能像我们希望的那样操作代理。

  1. 代理人的职位。
  2. 最近的地雷位置。

这就是我们所需要的。现在我之前说过绝对位置是不好的。这是因为它使 Q 表(你称之为 Q 矩阵)变得静态并且对随机性非常脆弱。因此,让我们尝试从奖励函数中完全消除绝对位置,并用相对位置替换它们。幸运的是,这在您的情况下非常简单:我们不使用绝对位置,而是使用最近的地雷和代理之间的相对位置。

现在我们不再处理坐标,而是 vector 。让我们计算点之间的 vector :v = pos_mine - pos_agent。该 vector 为我们提供了两条非常重要的信息:

  1. 最近的矿井所在的方向,以及
  2. 到最近矿井的距离。

这些就是让我们的代理运行所需的全部内容。因此,代理状态可以定义为

State: Direction x Distance

距离是浮点值,方向是描述角度的 float 或归一化 vector 。

定义奖励函数

鉴于我们新定义的状态,我们在奖励函数中唯一关心的是距离。由于我们想要的只是将代理移向地雷,距离才是最重要的。以下是奖励函数如何工作的一些猜测:

  1. 如果智能体扫了地雷(距离 == 0),返回巨额奖励(例如 100)。
  2. 如果代理向地雷移动(距离正在缩小),返回中性(或小)奖励(例如 0)。
  3. 如果智能体远离地雷(距离增加),则返回负奖励(例如 -1)。

理论上,由于我们惩罚远离地雷,我们甚至不需要规则 1。

结论

剩下的唯一事情就是确定一个好的学习率和折扣,以便您的代理在 50 次迭代后表现良好。但是,考虑到环境的简单性,这应该不是那么重要。实验。

关于c++ - Q-learning学习扫雷行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58308078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com