我正在使用Q学习算法进行设备的电源管理。该设备有两种电源模式,即空闲和休眠。当设备处于休眠状态时,处理请求将缓冲在队列中。 Q学习算法寻找最小化成本函数,该成本函数是即时功耗和由动作引起的等待时间的加权和。
c(s,a)=lambda*p_avg+(1-lambda)*avg_latency
在每个状态中,学习算法采取动作(执行超时值)并评估下一状态中采取的动作的效果(使用上面的公式)。通过从预定义的超时值池中执行某些超时值来执行操作。上述等式中的参数 lambda 是功率性能参数( 0 _< lambda < 1 )。它定义算法是否应该寻找省电(lambda - > 1)或者应该寻找最小化延迟(lambda - > 0)。每个请求的延迟计算为排队时间+执行时间 问题是学习算法总是倾向于在睡眠状态下使用小的超时值。这是因为小超时值的平均延迟总是较低,因此它们的成本也很小。当我将lambda的值从低变为高时,我看不到最终输出策略中的任何影响。策略始终选择小的超时值作为每个州的最佳操作。我尝试使用总体平均功耗和总体平均延迟来计算状态 - 动作对的成本,而不是每个状态的平均功率和平均延迟,但它没有帮助。我还尝试使用每个状态 - 动作对中计算成本的所有请求所经历的总能量消耗和总延迟,但它也没有帮助。 我的问题是:对于这种情况,什么可能是更好的成本函数?我更新Q值如下:
Q(s,a)=Q(s,a)+alpha*[c(s,a)+gamma*min_a Q(s',a')-Q(s,a)]
其中 alpha 是学习率(缓慢下降)而 gamma = 0.9 是折扣因素。
答案 0 :(得分:2)
回答评论中提出的问题:
我应该为所有人使用整个功耗和整个延迟 在每个州(s,a)计算成本的要求?
没有。在Q学习中,奖励通常被认为是与单个状态 - 动作对相关联的瞬时信号。看看Sutton and Barto's page on rewards。如图所示,瞬时奖励函数(r_t + 1)由时间步骤下标 - 表示它确实是瞬时的。注意,预期回报的R_t考虑奖励的历史(从时间t回到t_0)。因此,您无需明确跟踪累积的延迟和功耗(这样做可能会适得其反。)
或者我应该使用即时功耗和平均延迟 由状态s中的动作引起的?
是。要强调上述说明,请参阅第4页上的MDP定义here。相关位:
奖励功能将预期的即时奖励指定为 当前状态和行动的功能
正如我在上面的评论中指出的那样,使用Q(lambda)实现可以更好地解决奖励被“丢失”或“褪色”的问题,因为时间信用分配更有效地执行。看看Sutton和Barto关于TD(lambda)方法here的章节。您还可以找到一些很好的示例和实现here。