2

我正在使用 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是折扣因子。

4

1 回答 1

2

要回答评论中提出的问题:

我应该使用所有请求的全部功耗和全部延迟来计算每个状态(s,a)的成本吗?

不会。在 Q 学习中,奖励通常被认为是与单个状态-动作对相关联的瞬时信号。看看Sutton 和 Barto 的奖励页面。如图所示,瞬时奖励函数 (r_t+1) 下标为时间步 - 表明它确实是瞬时的。请注意,预期回报 R_t 考虑了奖励的历史(从时间 t 回到 t_0)。因此,您无需明确跟踪累积的延迟和功耗(这样做可能会适得其反。)

还是应该使用状态 s 中的动作 a 引起的即时功耗和平均延迟?

是的。要强调上述陈述,请参阅此处第 4 页的 MDP 定义。相关位:

奖励函数将预期的瞬时奖励指定为当前状态和动作的函数

正如我在上面的评论中指出的那样,奖励正在“丢失”或“被淘汰”的问题可能会通过 Q(lambda) 实现更好地解决,因为时间信用分配可以更有效地执行。在此处查看 Sutton 和 Barto 关于 TD(lambda) 方法的章节。您还可以在此处找到一些很好的示例和实现。

于 2012-08-13T02:50:58.250 回答