optimization - Q-学习值更新

标签 optimization machine-learning reinforcement-learning q-learning

我正在使用 Q-learning 算法研究设备的电源管理。该设备有两种电源模式,即空闲和 sleep 。当设备处于 sleep 状态时,处理请求将缓冲在队列中。 Q 学习算法寻求最小化成本函数,该函数是即时功耗和操作引起的延迟的加权和。

c(s,a)=lambda*p_avg+(1-lambda)*avg_latency

在每个状态下,学习算法都会采取行动(执行超时值)并评估下一个状态中所采取行动的效果(使用上述公式)。这些操作是通过执行预定义超时值池中的某些超时值来执行的。上式中的参数lambda是功率性能参数(0_<lambda<1)。它定义算法是否应该寻求节能(lambda-->1)或应该寻求最小化延迟(lambda-->0)。每个请求的延迟计算方式为排队时间 + 执行时间
问题是学习算法总是倾向于 sleep 状态下的小超时值。这是因为小超时值的平均延迟总是较低,因此它们的成本也较小。当我将 lambda 值从较低更改为较高时,我没有看到最终输出策略有任何影响。该策略始终选择较小的超时值作为每个状态的最佳操作。我尝试使用总体平均功耗和总体平均延迟来计算状态-操作对的成本,而不是每个状态的平均功率和平均延迟,但这没有帮助。我还尝试使用所有请求所经历的总能耗和总延迟来计算每个状态- Action 对中的成本,但这也没有帮助。 我的问题是:对于这种情况,什么是更好的成本函数?我按如下方式更新 Q 值:

Q(s,a)=Q(s,a)+alpha*[c(s,a)+gamma*min_a Q(s',a')-Q(s,a)]

其中alpha是学习率(缓慢下降),gamma=0.9是折扣因子。

最佳答案

回答评论中提出的问题:

shall I use the entire power consumption and entire latency for all the requests to calculate the cost in each state (s,a)?

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

or shall I use the immediate power consumption and average latency caused by an action a in state s?

是的。为了强调上述陈述,请参阅第 4 页 here 上 MDP 的定义。 。相关位:

The reward function specifies expected instantaneous reward as a function of the current state and action

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

关于optimization - Q-学习值更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11867052/

相关文章:

matlab - 查找矩阵中特定值的索引

artificial-intelligence - 网格世界中策略迭代背后的直觉

MySQL 从子查询中提取列以将其附加到主列

java - 如何在不调用System.gc()的情况下优化内存;

algorithm - 在图像中查找人员

python - 所有中间步骤都应该是变压器并实现拟合和变换

c# - 如何从 C# 中的 "pure function"获得优化?

c++ - 为什么编译器不优化这个简单的习惯用法?

opencv - CarRacing-v0 在健身房 : The screen is totally black when I run the environment

reinforcement-learning - CartPole-v0 的得分恰好为 200