我正在尝试找出如何在网格世界的例子中实现Q学习。我相信我理解Q学习的基本原理,但它似乎没有给我正确的价值观。
这个例子来自Sutton和Barton关于强化学习的书。
网格世界是这样指定的,即智能体可以在任何给定的状态下以相等的概率采取动作{N,E,W,S},并且所有动作的奖励都是0,除非智能体试图移出网格,在这种情况下是-1。有两个特殊的状态,A和B,其中智能体将确定性地分别移动到A‘和B’,奖励分别为+10和+5。
我的问题是,我将如何通过Q学习来实现这一点。我希望能够通过矩阵求逆来估计值函数。智能体开始于某个初始状态,不知道任何事情,然后采取由epsilon-greedy算法选择的操作,并获得我们可以模拟的奖励,因为我们知道奖励是如何分配的。
这就引出了我的问题。每次代理从某个状态S -> S‘转换时,我是否可以构建一个转换概率矩阵,其中概率是基于代理执行特定操作和执行特定转换的频率计算的?
发布于 2015-05-27 04:23:41
对于Q学习,你不需要环境的“模型”(即转移概率矩阵)来估计值函数,因为它是一种无模型的方法。对于矩阵求逆计算,您可以参考使用转换矩阵的动态编程(基于模型)。您可以将Q-learning算法视为一种试错算法,其中您可以选择一个操作并从环境中接收反馈。然而,与基于模型的方法相反,您不了解您的环境是如何工作的(没有转换矩阵和奖励矩阵)。最终,经过足够的采样经验,Q函数将收敛到最优函数。
对于算法的实现,您可以从初始状态开始,在初始化之后,您可以为所有统计信息和操作创建Q函数(这样您就可以跟踪$SxA$)。然后根据您的策略选择一个操作。在这里,您应该实现一个步骤函数。step函数将返回新状态$s'$和奖励。考虑将步长函数作为环境对您的操作的反馈。
最终,你只需要更新你的Q函数如下:$Q(s,a)=Q(s,a)+\alpha\leftr+\gamma\underset{a'}{\max(Q(s',a)})-Q(s,a)\-Q $s=s'$并重复整个过程直到收敛。
希望这能有所帮助
发布于 2015-05-06 13:05:50
不确定这是否有帮助,但here是一篇通过机器人的例子来解释Q学习的文章。如果你想自己尝试一下,还有一些R代码在里面。
https://stackoverflow.com/questions/29836104
复制相似问题