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