我假设您正在询问有关价值估计的蒙特卡洛模拟,也许是蒙特卡洛控制学习代理的一部分。
所有基于价值的方法的基本方法是估计预期回报,通常是行动价值Q(s,a)这是采取行动的预期未来回报的总和a处于状态s. 蒙特卡洛方法对此采取了一种直接而简单的方法,即将环境运行到一个情节的结尾并测量回报。该回报是所有可能回报中的一个样本,因此可以将其与其他观察到的回报进行平均以获得估计值。一个小问题是回报取决于当前策略,并且在控制场景中会发生变化,因此需要对平均值进行新近加权以进行控制,例如使用固定的学习率α在更新中Q(s,a)←Q(s,a)+α(G−Q(s,a))
鉴于此,您几乎可以运行任何方法来计算观察到的状态/动作对的回报。您会发现通常使用“起泡”方法 - 通常称为备份的过程- 从剧集结尾向后工作。
如果你有一个情节t=0到t=T以及状态、动作、奖励的记录s0,a0,r1,s1,a1,r2,s2,a2,r3...sT−1,aT−1,rT,sT(注意索引,奖励跟随状态/动作,没有r0和不aT),那么可以使用以下算法来计算个人收益gt:
g←0
为了t=T−1向下0:
g←rt+1+γg
Q(st,at)←Q(st,at)+α(g−Q(st,at))
这种向后工作是一种处理奖励的有效方法,并为所有状态的动作值分配折扣,在情节中观察到动作对。
或者也许这是两种不同的方法?
只计算第一个状态/动作的回报是有效的,并随机选择状态/动作开始(称为探索开始)。或者实际上采用这种方式生成的任意一组估计。你不必使用所有的回报估计,但你需要有一个算法来保证长期更新所有状态/动作对的值。
有没有一种情况是你想要一个而不是另一个?
大多数情况下,您会看到所有观察到的状态/动作对的备份返回估计,因为这更有效,而且蒙特卡洛已经是一种高方差方法,需要大量样本才能获得良好的估计(尤其是对于早期状态/动作在长剧集开始时配对)。
但是,如果您使用诸如神经网络之类的函数逼近,则需要避免输入相关数据以进行学习。来自单个情节的一系列状态/动作对将被关联。有几种方法可以避免这种情况,但一种简单的方法可能是从每次推出中仅抽取一个样本。如果部署可以非常快地运行,您可能会这样做,可能在计算机上进行模拟。但其他替代方案可能更好——例如将所有状态、动作、返回值放入一个数据集中,在 N 集之后对其进行洗牌并从所有内容中学习。