论文笔记-建筑能源管理的强化模型预测控制

在这里插入图片描述这是一篇使用强化学习方法来解决建筑能源的论文,作者将MPC和RL结合起来来用于建筑室内温度的调节。

首先,作者通过讨论每种方法的主要方面,在概念水平上强调RL和MPC之间的互补性。其次,描述了RL-MPC算法,该算法有效地结合了来自每种方法的特征,即状态估计、动态优化和学习。最后,MPC、RL和RL-MPC在BOPTEST中实现和评估

一、引言

一方面,MPC处理不确定性、系统复杂性和长期预测范围,而深度强化学习可以自然地处理复杂系统的不确定性和无限预测范围。另一方面,RL难以满足约束,缺乏可解释性,而MPC可以提供安全性保证可理解性

在比较中,MPC使用灰箱模型,RL代理使用基于值的算法

在本文中,作者将MPC目标函数与RL代理值函数相结合,同时使用根据领域知识编码的非线性控制器模型。这种做法确保了两种方法之间的互操作性,并能够截断MPC优化问题。

这篇论文的主要局限在于缺乏RL-MPC的理论保证,这只能通过经验测试。

二、相关工作

更一般地,RL已经被提议与MPC合作用于除建筑能源管理之外的应用,建议使用MPC作为RL的函数近似值。

三、MPC和RL的区别

3.1

(1)MPC
在这里插入图片描述
首先,从工厂获得一个测量向量mmm,一个刻画当前系统特征的状态向量x^\hat{x}x^。然后,根据目标函数JJJ和控制模型FFF对未来状态向量xxx和输入轨迹uuu进行优化,同时也引入限制HHH。目标函数JJJ、模型FFF、限制HHH包含的变量包括:模型输出yyy,代数变量zzz(是个什么东西),干扰ddd,时间独立变量ppp,另外,预测的未来干扰d(tk,tk+Δth)d(t_k,t_k+\Delta t_h)d(tk,tk+Δth)作为优化器的外部输入。

状态xxx表示当前的一些温度,yyyxxx的一个子集。ddd表示影响建筑的其他不可控变量,如外部温度和太阳辐射等。

(2)MDP(markov决策过程)
在这里插入图片描述

3.2 术语

通过3.1可以看到MPC和RL有许多的相似之处。MPC的目标是最小化目标函数JJJ,RL的目标是最大化累积收益GGG。两者之间的关系可以通过即时奖励来形式化:
在这里插入图片描述

3.3 解决方法

MPC的求解可以分为隐式和显式。动态优化问题的求解是隐式预测控制方法的核心。可以确定三种主要的求解方法来解决动态优化问题:动态规划(DP)、直接方法和间接方法。

3.4 最优性

在MPC中,最优解的质量取决于控制器模型的精度,由于计算原因,控制器模型经常被简化。

另一方面,基于动态规划的方法依赖于贝尔曼原理,可以为全局最优提供充分条件。不利的是,这些方法受到维数灾难的阻碍。

3.6 预测范围

MPC沿有限预测范围使用显式优化,RL学习动作以优化当前和未来折扣奖励的总和。MPC的一个缺点是有限的视野。

3.7 模型的使用

模型和函数近似在MPC和RL中的使用是不同的。

在MPC中,用来表示系统的模型称为控制器模型。这些模型是通过领域知识、系统识别或从历史监测数据的监督学习获得的。通常情况下,控制器型号被划分为白盒、灰盒或黑盒,这取决于物理观察和/或监控数据是否用于其配置。MPC中的优化问题对控制器模型施加了严格的限制,这些模型通常被简化以保证收敛性,但代价是性能损失。

3.8 部分可观测性

四、 RL-MPC

来自控制和机器学习的元素被有效地结合,即状态估计、动态优化和学习。

4.1 合并MPC和RL

在MPC-RL中,作者使用RL超前一步的状态估计值来截断MPC的非线性规划。具体来说,使用基于值的Rl来估计MPC在超前一个状态s′s's的值。

MPC的主要组件在RL-MPC中不变,即状态估计器预测器优化器,但是值函数用于缩短非线性程序并实现学习,如图:
在这里插入图片描述

4.2 正式描述

RL中的q值
在这里插入图片描述
考虑MPC,可以改写为
在这里插入图片描述
定义状态值函数:
在这里插入图片描述
这允许将动作值函数重新表述如下:
在这里插入图片描述
假设知道了控制器模型,RL-MPC遵循的策略在等式组中定义:
在这里插入图片描述
在这里插入图片描述
RL-MPC的算法描述:
在这里插入图片描述
1-3行为离线学习,而第4–10行构成了算法在实际建筑环境中的部署。

五、实验

实验流程:
在这里插入图片描述
控制器的最终目标是保证热舒适性,同时将运行成本降至最低。

5.1 系统识别

MPC需要一个控制器模型FFF,来确定环境EFE_FEF来预训练RL和RL-MPC算法。

5.2 MPC实施

在每一个控制步骤中需要解决的优化问题如下图所示:
在这里插入图片描述
PPP是功率,6是不舒适度,被定义为实际温度与温度上下界的偏离。

5.3 RL实施

状态的维度∣S∣|S|S为608,将动作隔离为11个离散的单位。算法采用DDQN算法,DDQN是一种非策略算法,它按照随机梯度下降方案更新网络权重。

5.4 RL-MPC实施

RL-MPC算法继承了MPC和RL实现中描述的所有属性和超参数。这意味着使用与MPC相同的控制步骤、预测范围和状态估计器,以及与RL代理相同的预训练q函数。

5.5 结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、结论

本文提出并评估了强化模型预测控制RL-MPC,这是一种有效地结合了RL和MPC的元素(如状态估计、动态优化和学习)的算法。

新算法在确定性设置中获得类似于MPC的性能结果,即使当使用不完美的值函数时。它还能够像经典的RL方法一样进行学习,这种方法允许自然地处理不确定的环境或复杂的奖励,而不需要它们的分析形式。

此外,RL-MPC的当前实现可以通过用定义价值函数的方程扩展控制器模型来进一步改进,以使用有效的优化技术并实现算法的可扩展性。

事件驱动架构(Event-Driven Architecture, EDA)是一种在软件开发和系统设计中广泛采用的设计模式,特别适用于分布式系统、微服务架构以及实时数据处理场景。其核心思想是通过事件的产生、传播和消费来驱动系统的运行和交互。 ### 事件触发机制的基本组成 事件触发机制通常由以下几个关键组件构成: - **事件源(Event Source)**:生成事件的实体,例如用户操作、传感器数据或系统状态变化。 - **事件通道(Event Channel)**:用于传输事件的中间结构,可以是队列或流式传输机制。 - **事件处理器(Event Handler)**:负责监听并处理事件的组件,根据事件类型执行相应的业务逻辑[^1]。 ### 常见的设计模式 在实现事件触发机制时,常用的设计模式包括: #### 1. 发布-订阅模式(Pub/Sub) 发布-订阅模式是一种消息传递模式,允许事件生产者(发布者)将事件发送到一个主题(Topic),而多个事件消费者(订阅者)可以监听该主题并独立地处理事件。这种模式支持一对多的消息广播[^1]。 #### 2. 事件溯源(Event Sourcing) 事件溯源是一种持久化机制,它通过记录状态变化的事件序列来存储系统状态。每次状态变更都会以事件形式记录,系统可以通过重放这些事件来重建当前状态。这种方式提高了系统的可审计性和可恢复性[^1]。 #### 3. CQRS(Command Query Responsibility Segregation) CQRS 是一种将读取和写入操作分离的架构模式。结合事件驱动,写模型可以发布状态变更事件,供读模型或其他服务消费,从而保持数据一致性并提升性能[^1]。 #### 4. 状态机模式(State Machine Pattern) 在某些系统中,事件会触发状态转换。状态机模式利用事件来改变系统的状态,并根据当前状态执行不同的行为。这在工作流引擎和业务流程管理中非常常见[^1]。 ### 实现工具与技术 为了构建高效的事件触发机制,开发者通常会使用以下技术和工具: - **消息代理(Message Brokers)**:如 Apache Kafka、RabbitMQ、Amazon SNS/SQS 等,它们提供了可靠的消息传递机制,支持高并发和异步处理[^1]。 - **事件总线(Event Bus)**:轻量级的事件分发机制,常用于前端或单体应用内部通信,例如 Vue.js 的 `$emit` 或 RxJava 的 `Subject`。 - **Serverless 架构**:AWS Lambda、Azure Functions 等无服务器计算平台天然支持事件驱动模型,函数可以绑定特定事件源自动触发执行。 ### 示例代码:基于 Python 的简单事件处理器 ```python class Event: def __init__(self, event_type, data): self.event_type = event_type self.data = data class EventHandler: def handle_event(self, event: Event): if event.event_type == "user_registered": print(f"Sending welcome email to {event.data['email']}") elif event.event_type == "order_placed": print(f"Order placed for user {event.data['user_id']}") else: print("Unknown event type") # 模拟事件触发 handler = EventHandler() event1 = Event("user_registered", {"email": "user@example.com"}) event2 = Event("order_placed", {"user_id": 1001}) handler.handle_event(event1) handler.handle_event(event2) ``` 上述代码展示了一个简单的事件处理器,能够根据事件类型执行不同的操作。 ### 应用场景 事件触发机制广泛应用于以下场景: - **实时数据分析系统**:如金融交易监控、物联网设备数据处理。 - **微服务间通信**:通过事件解耦服务,提高系统的可扩展性和容错能力。 - **自动化运维**:监控系统日志并自动触发修复脚本或告警通知。 - **用户行为追踪**:记录用户操作以便进行后续分析或个性化推荐。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cxp_001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值