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

时间:2019-07-31 10:03:20

标签: python pyomo cvxpy

我有室外温度[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 W。

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

查看图表以更好地可视化目标。

我想使用Pyomo或cvxpy,但我看不出如何制作此MPC(模型预测控制)

enter image description here

1 个答案:

答案 0 :(得分:0)

Logan Beal使用GEKKO package用Python开发了EAGER NSF grant用于MPC(以及机器学习,优化),可能对您的问题有用。

pip install gekko

Model Predictive Control

这里是temperature control lab,它教如何进行建模,估计和控制。您的应用程序的第一步可能是执行系统识别,以获取以下各项之间的动态关系的时间序列模型:

  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来为您的应用程序确定模型。