我认为体验和重放是一种处理这种延迟效应的机制。
Experience Replay 在这里没有直接帮助,它是一种从有限的数据中使学习更加稳定和有效的机制,但它不会解决延迟返回的问题。
任何学习 Q 的方法都应该可以很好地应对延迟奖励。因此,蒙特卡罗控制、SARSA、Q-learning、DQN 及其所有变体在理论上都能够学习延迟奖励。总回报是任何行动的最终效果。
但是,我猜只是因为它没有被提及并且您在问这个问题,所以您可能仍然有问题。. .
您声称该行动具有“对环境的延迟影响”。您需要更改它,因为这意味着您的状态表示对于您的问题不正确。显然,为某事下订单会改变环境。有订单的环境与没有订单的环境不同,在某种程度上对您的问题至关重要。
您可能缺少的是一个状态表示,它捕获了您的操作实际完成了什么。没有它,Q 函数无法了解隐藏变量(当前正在处理的订单),因为它不处于状态,s为了Q ( s , a ). 为了使 RL 可靠,状态值s必须捕获有关未来状态变化和奖励将如何进展的所有相关信息。例如,如果您正在编写一个代理来控制摆动的钟摆(一个标准的玩具问题),那么您不仅需要钟摆的位置,还需要它的速度来预测钟摆之前可能结束的位置采取任何行动。对于您的问题,当前库存就像钟摆的位置,您需要跟踪“进行中”的订单,因为它们有点像速度,因为无论采取何种行动,它们都会导致状态的进一步变化。
为了解决这个问题,您需要向您的州添加最近库存订单的表示。我猜想描述订单内容的内容(类似于您当前的库存表示)以及距离交付还有多少天的倒计时(或者如果它们不那么可靠,则与可能的到达时间相关的类似内容)。该状态应立即更改以响应导致命令的动作,否则代理将无法了解动作与其效果之间的关联,并将到达的命令视为来自环境的某种随机效应。
一旦你有了这样的表示,那么我认为这就足够了,接下来的步骤是找到正确的超参数值来有效地学习。如果您有一个模拟环境,这最初会更容易,尽管您也可以使用 DQN 之类的东西从历史数据中学习离线策略,前提是您有大量历史数据可供使用。
我想只是稍后将重新订购的数量添加到货架上,让代理了解它的效果。这足够了吗?
我认为这很相似,但可能还不够。要做的最重要的事情是将状态更改与导致它的操作相关联。无论如何都应该在新库存到达时添加它,但是代理需要了解早期的操作是导致这种情况的原因,并且只有当该操作实际上以某种方式改变状态时才有可能。