使用 Pyomo 或 cvxpy 预测建筑物的功率(模型预测控制)

2023-11-29

我有室外温度的数据 [8,2,10,13 ..] 并且我有我的建筑物的热惯性 (8h)。限制之一是将我的建筑物的内部温度保持在 20 度以内。

我们从平衡状态开始,T_in = 20,T_o = 20,但一小时内的 T_o = 18,因此 Delta_T_o = 18,度数损失 = 2 / 惯量 = 0.22K / h

因此,我们的 T_in = 20-19.78,因此电源必须通过应用以下函数做出反应,将 T_in 保持在 20: 功率=Delta_T(进-出)*U(W/m2.K)*建筑面积(m2) U 是热传递。 假设 U = 3 且建筑面积 = 1900 功率 = 10146 瓦。

我的函数的目的是根据变化的 T_o 最小化锅炉的功率,并将 T_in 保持在 20。

查看图表以更好地形象化目标。

我想使用 Pyomo 或 cvxpy 但我不知道如何制作这个 MPC(模型预测控制)

enter image description here


洛根·比尔开发了GEKKO包使用 Python 进行 MPC(以及机器学习、优化)渴望 NSF 拨款这可能对您的问题有用。

pip install gekko

Model Predictive Control

这里有一个温度控制实验室教授如何进行建模、估计和控制。您的应用程序的第一步可能是执行系统识别,以获得以下动态关系的时间序列模型:

  1. 外部温度和内部温度(干扰模型)
  2. 输入功率和内部温度(控制模型)

下面是一个包含两个加热器和两个温度的 Python 脚本示例:

System Identification

from gekko import GEKKO
import pandas as pd
import matplotlib.pyplot as plt

# load data and parse into columns
url = 'http://apmonitor.com/do/uploads/Main/tclab_dyn_data2.txt'
data = pd.read_csv(url)
t = data['Time']
u = data[['H1','H2']]
y = data[['T1','T2']]

# generate time-series model
m = GEKKO(remote=False) # remote=True for MacOS

# system identification
na = 2 # output coefficients
nb = 2 # input coefficients
yp,p,K = m.sysid(t,u,y,na,nb,diaglevel=1)

plt.figure()
plt.subplot(2,1,1)
plt.plot(t,u)
plt.legend([r'$u_0$',r'$u_1$'])
plt.ylabel('MVs')
plt.subplot(2,1,2)
plt.plot(t,y)
plt.plot(t,yp)
plt.legend([r'$y_0$',r'$y_1$',r'$z_0$',r'$z_1$'])
plt.ylabel('CVs')
plt.xlabel('Time')
plt.savefig('sysid.png')
plt.show()

您可以替换输入数据u和输出数据y确定适合您的应用程序的模型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Pyomo 或 cvxpy 预测建筑物的功率(模型预测控制) 的相关文章

随机推荐

  • Objective-C 错误“'XYZPerson' 没有可见的 @interface 声明选择器 'saySomething'

    我对 Objective C 确实很陌生 当我练习书本上的练习时 我真的被困在这里了 请帮助我解决这个问题 我已经思考了三个多小时可能导致此错误的原因 我还是没明白 此致 拉杰 提前致谢 main m import
  • Python 动态帮助和自动完成生成

    我想要的几乎都有了 这个动态对象封装了一个带有动态文档字符串生成的通用函数调用 def add docs tool def desc func func doc Showing help for s tool return func ret
  • 检测用户空闲(每个应用程序实例)

    我只需要在我的应用程序中进行用户空闲检测 每个 我的应用程序实例 我不能使用获取最后输入信息因为是特定于会话的用户输入 获取最后输入信息does not跨所有正在运行的会话提供系统范围的用户输入信息 相反 GetLastInputInfo
  • Convert Vuejs Typescript Options to Composition Api 中的奇怪问题

    问题已经解决 通读问题以了解如何逐步解决问题 我读到了有关组合 API 的内容 https vue composition api rfc netlify com api introduction 并尝试转换我现有的基于 vuejs 中 O
  • 当 Sphero 同步并且我使用多个 Activity 时如何保持蓝牙连接

    当我与 Sphero 同步并且想要从一个活动传递到另一个活动时 我的同步丢失了 我必须在新活动中执行 onCreate 中的此方法才能再次获得同步 RobotProvider provider RobotProvider getDefaul
  • 如何在 Java SE 环境上部署 JAX-RS 应用程序?

    我想使用 JAX RS 编写 RESTful Web 服务 并且想将其发布到本地主机上 例如http localhost port 我在这篇文章中读到了以下内容answer Java SE 7 JSR 336 和 Java SE 8 JSR
  • Python:检查异常引发的位置

    采取这个代码 def A try B except Exception pass def B C def C print exception handling pointer A 功能exception handling pointer应该
  • javascript确认函数确定和取消返回相同的结果

    在这里 我打电话confirm param1 param2 显示警报的方法Do you want to continue 在这种情况下 如果用户单击OK 它返回true 如果用户点击Cancel 它返回false 但是 当单击取消按钮时 它
  • Keras:使用 flow_from_directory 的 fit_generator 的多个输入

    fit generator 中是否可以有两个 flow from directory 例如 train generator 1 train datagen flow from directory train data dir 1 targe
  • 布尔运算符 ++ 和 --

    今天 在编写一些 Visual C 代码时 我遇到了一些令我惊讶的事情 看来 C 支持 bool 的 增量 但不支持 减量 这只是一个随机决定 还是背后有某种原因 这编译 static HMODULE hMod NULL static bo
  • Windows 批处理文件中的字符串处理:如何用前导零填充值?

    在 Windows cmd 批处理文件 bat 中 如何填充数值 以便将 0 99 范围内的给定值转换为 00 到 99 范围内的字符串 IE 我希望小于 10 的值有前导零 您可以使用一个两阶段的过程 REM initial setup
  • 日期时间到纪元的转换

    我有一个 bash 问题 使用 awk 时 我正在提取文本文件中第一列和第五列的每个实例 并使用以下代码将其通过管道传输到新文件 cut f4 test170201 rawtxt awk stream 0 print 1 5 gt test
  • bash 中的转义引号(嵌入式 awk)

    我有一个复杂的命令通过 ssh 传递到远程服务器 我正在尝试解压缩一个文件 然后在第二个 ssh 命令中更改其命名结构和扩展名 我的命令是 ssh root server1 gzip d tmp file out 20171119 gz e
  • 使用 PHP 通过 SSL 连接到 MySQL

    我正在编写第一个脚本 它将通过 SSL 连接到 MySQL 数据库 我已经阅读了大量有关该主题的文章 并且遇到了许多关于如何设置它的选项 有些适用于我的情况 有些则不适用 这是我的情况 MySQL 服务器与脚本位于同一台计算机上 我的 SS
  • d3.js 中的转换队列;逐个

    我尝试在 d3 js 中进行链式转换 为此 我在数组中定义了一组转换 并 尝试 创建一个函数来递归调用它们 each end function 在前一个完成时开始转换 但我还没有结果 行动清单 animations function con
  • 如何调试MEF异常?

    我们目前正在使用 MEF 托管扩展性框架 http mef codeplex com 并且它会抛出异常 而可供继续处理的信息有限 有没有办法调试 MEF 异常 我的例外是这样的 System Reflection ReflectionTyp
  • 绑定动态加载的fxml的宽度和高度

    目前 我在运行时动态加载 FXML 文件时遇到问题 一旦将它们添加到窗格中 它们就不会调整大小以使用该窗格的完整宽度和高度 我使用此方法在窗格中加载 FXML public void showContentPane String sURL
  • Facebook 连接对话框弹出窗口

    当使用 连接 facebook 连接按钮时 当我单击它时 它会在当前窗口之外打开一个新的弹出窗口 这很烦人 我如何才能使用大多数网站上的内联模式对话框 我附上了一个示例网站 看看您是否可以利用它来制作任何东西 http www gigloc
  • 在 C 中从布尔值设置位掩码的快速方法

    执行检查并设置 清除标志是很常见的 例如 if some test flag SOME FLAG else flag SOME FLAG 到目前为止我发现的一个方便的方法是 flag some test flag SOME FLAG fla
  • 使用 Pyomo 或 cvxpy 预测建筑物的功率(模型预测控制)

    我有室外温度的数据 8 2 10 13 并且我有我的建筑物的热惯性 8h 限制之一是将我的建筑物的内部温度保持在 20 度以内 我们从平衡状态开始 T in 20 T o 20 但一小时内的 T o 18 因此 Delta T o 18 度