C++ Q-学习扫雷行为
我试图使用Q-learning来学习Mat Buckland智能扫雷艇的谨慎版本上的扫雷行为,原始版本在这里提供,用于分配任务。分配将我们限制在50次2000步的迭代中,在一个有效的40x40网格上,每次迭代都会重置地雷并在一个随机位置生成代理 我尝试过使用移动惩罚、扫雷奖励和未击中地雷惩罚来执行q学习。扫雷代理似乎无法学会如何在50次迭代中有效扫雷,因为它知道去特定的单元是好的,但在一次扫雷后,它不再得到奖励,而是因为去该单元需要移动成本而受到惩罚 我只想尝试在所有地雷被清除时提供奖励,试图使环境保持静态,因为只有一种状态不是所有地雷被收集,或者所有地雷都被收集,但我很难实现这一点,因为代理每次迭代只有2000次移动,并且能够回溯,无论是否有收集地雷的奖励,它都无法在一次迭代中扫除所有地雷 我的另一个想法是为每个地雷建立一个有效的新Q矩阵,因此一旦收集到地雷,清扫器将转换到该矩阵,并在当前地雷不在考虑范围内的情况下运行 有没有更好的方法,或者对我自己的方法进行更实际的调整,我可以试试 对规则的更明确解释:C++ Q-学习扫雷行为,c++,q-learning,C++,Q Learning,我试图使用Q-learning来学习Mat Buckland智能扫雷艇的谨慎版本上的扫雷行为,原始版本在这里提供,用于分配任务。分配将我们限制在50次2000步的迭代中,在一个有效的40x40网格上,每次迭代都会重置地雷并在一个随机位置生成代理 我尝试过使用移动惩罚、扫雷奖励和未击中地雷惩罚来执行q学习。扫雷代理似乎无法学会如何在50次迭代中有效扫雷,因为它知道去特定的单元是好的,但在一次扫雷后,它不再得到奖励,而是因为去该单元需要移动成本而受到惩罚 我只想尝试在所有地雷被清除时提供奖励,试图使
- 地图边缘环绕,因此离开地图的右边缘将导致机器人出现在左边缘等
- 清扫机器人可以从任何地图平铺上向上、向下、向左或向右移动
- 当机器人与地雷相撞时,地雷被视为扫雷,然后被移除
- 目标是让机器人学会从任何起始位置扫除地图上的所有地雷
v=pos\u mine-pos\u agent
。该向量为我们提供了两条非常重要的信息:
State: Direction x Distance
其中距离为浮点值,方向为描述角度的浮点值或规范化向量
定义奖励函数
鉴于我们新定义的状态,我们在奖励函数中唯一关心的是距离。既然我们只想把特工带到矿场,距离才是最重要的。下面是一些关于奖励功能如何工作的猜测:
剩下的唯一一件事就是确定一个好的学习率和折扣,以便您的代理在50次迭代后表现良好。但是,考虑到环境的简单性,这一点应该没那么重要。实验 你说的移动是指与瓷砖的互动,对吗?那么要么把它揭穿要么把它标记为地雷?此外,50次迭代确实是一个困难的限制。@Timo没有完全与瓷砖交互,它不像旧的扫雷游戏。有一个扫雷机器人在地图上四处游荡,识别地雷,移动就是移动,如果它与地雷相撞,该地雷被视为扫雷并从地图上移除。哦,我明白了,你能列出或链接实际游戏的整个规则集吗?@Timo我已经更新了给定的规则集列表。如果你看一下它所基于的练习,可能会更容易理解,这篇文章的开头附近有链接,它使用人工神经网络在连续的环境中执行相同的概念。特工们知道他们周围的环境或地雷吗?否则这是不可能的。这篇文章没有提到这件事。