我构建了一个自定义强化学习
environment
和agent
,类似于迷宫游戏。
在迷宫中有 5 种可能的动作:上、下、左、右和停留。而如果被阻止,例如代理无法上去,那么人们如何设计
env
和agent
来模拟呢?
具体来说,智能体处于当前状态
s0
,根据定义,采取下、左、右操作会将状态更改为其他一些值,并立即获得奖励(如果在出口,则>0)。一种可能的方法是,当采取行动up
时,状态将保持在s0
,并且奖励将是一个很大的负数。理想情况下,智能体会了解到这一点,并且在这种状态下永远不会再去up
。
但是,我的经纪人似乎没有学到这一点。相反,它仍然是
up
。另一种方法是对代理和环境进行硬编码,使代理在up
时无法执行操作s0
,我能想到的是:
up
不被允许时,我们看看不同动作的Q值up
请问以上的做法可行吗?会不会有相关的问题?或者有没有更好的设计来处理边界和无效动作?
我多次看到这个问题,代理会坚持单一操作。我在以下情况中看到过:
我想说这应该可行(但比猜测更好的是尝试 它)。其他问题是:您的代理能够观察到的状态是什么?你在做奖励剪辑吗?
另一方面,如果你的智能体没有学会避免碰壁,那么你的学习例程中可能会出现另一个问题(也许奖励函数中有一个错误?)
硬编码的剪辑操作可能会导致您希望看到的行为,但它肯定会降低代理的整体性能。
您还实施了什么?如果还没有完成,最好考虑一下经验回放。