我有一个决策问题,结果被衡量为我想最小化的成本。它似乎很适合 Q-learning,但我不确定如何调整它以处理成本而不是奖励。
在不改变学习算法的任何其他内容的情况下,最简单的方法是注意
Reward=−Cost
因此,从字面上看,只需使用标准 Q 学习,根据负成本的总和对预期回报进行优化。一切都会正常工作。你最好的代理最终可能仍会得到负的预期回报(和负的 Q 值),但将其最大化仍应导致最优策略。
如果您出于某种原因确实必须将最小化成本作为您的目标,那么您需要进行一些小的更改才能与 Q 学习一起使用。
您的 Q 函数的定义成为未来成本的预期贴现总和:
Q(s,a)=Eπ[∑k=0∞γkCt+k+1|St=s,At=a]
(这实际上只是将替换为)RtCt
那么您对最优策略的最佳猜测是最小化预期未来成本的策略:
π(s)=argminaQ(s,a)
而且您的 Q-learning 更新规则也基于最小化下一步的假设优化
Q(s,a)←Q(s,a)+α(c+γmina′[Q(s′,a′)]−Q(s,a))
这不符合您的任何建议。如果我要更正您的代码,然后使用奖励(带r = -c),它将如下所示:
q_dict[state1][act1] += alpha * (r + max(q_dict[state2].values()) - q_dict[state1][act1])
学习率在哪里alpha,我假设没有折扣(所以它必须是一个偶发问题,而不是连续的)。
如果您想c直接使用成本,并找到最小化总成本的策略,那么它看起来像这样:
q_dict[state1][act1] += alpha * (c + min(q_dict[state2].values()) - q_dict[state1][act1])
即你代替c和。rminmax
您关于具有不同起始值的想法可能会对收敛速度产生一些影响。但是,这与您使用成本还是奖励无关。
我建议不要像这样直接使用成本。虽然它很简单并且可以工作,但每当您阅读任何 RL 文章时,您都必须不断调整是否切换max到min. 最大化总和(或平均)奖励的约定在 RL 教程中更为常见,并且在您学习它的同时,您将节省一点努力来遵循这个约定。