我的问题如下。我有一个简单的网格世界:
https://i.sstatic.net/xrhJw.png
代理从标记为START的初始状态开始,目标是到达标记为END的终止状态。但代理必须避开标记为X的障碍物,并且在到达END状态之前必须收集所有标记为F的物品。我使用Q-Learning和Sarsa实现了这一点,代理能够到达END状态并避开障碍物(X状态)。所以这一部分运作良好。
我的问题是,如何让代理在到达END状态之前收集所有物品(F状态)?使用Q-Learning或Sarsa时,它会避开障碍物,到达END状态,但不会收集所有物品。通常只会访问一个F状态,然后代理就朝着END状态前进。
谢谢你的帮助!
回答:
你应该始终确保达到目标是最吸引人的与环境互动的方式。你希望代理达到特定目标,而代理试图最大化奖励信号,所以你需要做的是设计一个奖励函数,正确地“引导”代理执行正确的动作。
在你描述的情况下,似乎为了获得最多的奖励,代理应该访问一个F状态,然后前往END状态——所以尝试更改奖励函数,例如,为访问F状态返回更多的奖励。
我能想象的另一个奖励函数是,在没有收集物品的情况下访问END状态时返回-1,收集了物品后访问END状态时返回1,访问其他任何状态时返回0(或者,如果你希望尽快达到目标,可以返回-0.02)。
你可以尝试设计奖励函数——我的建议是进行实验并观察代理的行为。这通常是更好地了解和理解代理和环境的非常好的方法。