用于电源管理的强化学习
Posted
技术标签:
【中文标题】用于电源管理的强化学习【英文标题】:Reinforcement learning for power management 【发布时间】:2012-06-17 15:34:47 【问题描述】:我正在处理一个电源管理问题,我根据事件的发生来控制计算板的电源管理。我正在使用强化学习(传统的 Q 学习)进行电源管理,其中计算板作为服务提供商 (SP) 来处理请求(图像)。 SP 连接到智能相机,电源管理器 (PM) 算法在相机上运行,向 SP 发出适当的电源命令(睡眠、唤醒)。智能相机根据事件的发生捕获图像(请求),并为请求(图像)维护一个服务队列(SQ)。我还有一个基于 ANN 的工作负载估计器,它将当前工作负载分类为 low 或 high。 Q 学习算法的状态空间因此包括 Q(s,a) 的复合,其中 s=(SR, SQ, SP)。 SR 是工作负载的状态。 SQ 是服务队列的状态,SP 是服务提供者的状态。 PM 根据当前的工作量、队列的状态和服务提供者的状态,向 SP 发出某些命令(睡眠、唤醒)。 该决定在以下阶段做出:
-
SP 空闲
SP刚进入睡眠状态,SQ>=1
SP 处于睡眠状态,SQ 从 0 转变为 1。
对于每个操作,都会分配一个成本,该成本由该操作引起的每个请求的平均功耗和平均延迟的加权和组成。在睡眠状态和空闲状态中,该动作包括从预定义超时值列表中选择一些超时值。我的问题如下:
当SP进入休眠状态并选择一个超时值时,一些请求可能会在超时值期间到达,因此SQ的状态会发生变化。这也将复合状态(例如,S(0,0,0) 更改为 S(0,N,0)。在超时值结束时,PM 决定唤醒 SP(因为 SQ>0 ). 唤醒后,SP 处理请求,当 SQ =0 时,它的状态为 (0,0,1) 或 (1,0,1)。然后它为之前的状态分配一个成本。它还更新相应的Q-matrix。我的问题是,成本应该分配给状态(0,0,0)还是(0,N,0)?原则上,前一个状态是(0 ,N,0) 但是这个请求会在队列中的一些请求到达时自动到达,因此在这个状态下没有采取任何行动,也没有任何行动可以分配成本。
【问题讨论】:
这是一个相当密集的帖子。有什么办法可以减少冗长,增加有人阅读全部内容的机会? 问题是如果我不详细解释的话,就没有多大意义了。 【参考方案1】:Q 学习适用于马尔可夫决策过程 (MDP),其中在给定状态下执行操作会导致确定性转换到新状态。
目前尚不清楚您描述的问题是部分可观察马尔可夫决策过程 (POMDP) 还是 MDP。如果你有一个 POMDP(你在没有关于队列状态的信息的情况下决定睡觉或醒来),那么问题就更难解决了。
如果您只是在可以观察系统状态时才做出睡眠超时决定,那么您就有了 MDP。在这种情况下,您应该只在到达您选择动作的下一个状态时更新 Q 矩阵。
以下是我对您示例中事件顺序的理解:
-
系统处于睡眠状态 (0,0,0)
请求到达队列,系统仍在休眠 - (0,N,0)。
系统唤醒 - (0,N,1) 或 (1,N,1)
系统处理请求 - (0|1,0,1)
在第 4 步之后,系统需要做出另一个超时决定并更新 Q 矩阵。当前状态是(0|1,0,1),这个状态应该用在Q-learning算法中。
不过,您担心在 (0|1,0,1) 处更新 Q 矩阵不会考虑系统处理在睡眠时到达的 N 个请求所花费的时间。 可能有许多选项可以处理这个问题,其中大多数可能涉及重构问题的状态空间。一种方法是在奖励函数中考虑 N 个请求 - 如果系统发现您在唤醒时发现的大量请求,那么它应该立即惩罚之前的操作。
【讨论】:
你已经完全理解了这个问题。睡眠超时决定基于对系统状态的观察。但是,我不知道是否可以将其称为 MDP,因为决策还取决于过去的历史(工作量预测)。我计算成本如下。当系统唤醒时,它会在处理完所有请求后为之前的状态分配一个成本。成本包括即时平均功耗和每个请求的平均延迟的加权和。当系统空闲时,它会选择一个超时策略并在下一个状态中评估该策略。 如果在超时期间没有请求来,成本只是平均功耗并且系统被关闭。但是,如果在从空闲到睡眠的过渡过程中有一些请求,则成本变为平均功耗和队列中请求数的加权和(在这种情况下我不能使用平均延迟,因为请求不是尚未处理)。如果在超时期间有请求,则立即处理,成本为平均功耗。 我的困惑是当系统进入睡眠模式并且队列为空时,状态为(0|1,0,0)。但是在超时策略期间可能会有一些请求,并且状态变为(0|1,N,0)。当超时策略到期时,系统唤醒并处理所有请求并将成本分配给先前的状态。分配成本的状态应该是(0|1,0,0)还是(0|1,N,0)?事实上,成本是分配给前一个状态(超时值)的动作。但问题是,为上一个动作分配成本的上一个状态应该是什么? 成本应该分配给 (0,0,0),因为这是系统执行最后一次超时操作的地方。 您还可以在每次处理请求时执行超时操作(在这种情况下,您将更新 Q((0|1,N,0),a) )。这种配置可能会降低学习效率,因为在初始阶段系统可能会在队列已满时休眠,但额外的灵活性可能会在后期阶段带来更高的电源效率。以上是关于用于电源管理的强化学习的主要内容,如果未能解决你的问题,请参考以下文章