微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

控制范围和预测范围

如何解决控制范围和预测范围

我已经审查了用于模型预测控制的书目和Gekko编程结构。尽管我了解它的编程方式及其目的。例如,我想了解Gekko如何根据Seborg中的相关信息来管理控制范围和预测范围之间的差异。我看不到代码的差异。以下是用于说明的MPC应用程序示例。

Model Predictive Control

from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt  

m = GEKKO()

# Time Horizon [0,1,2,...,39,40]
m.time = np.linspace(0,40,41)

# MV = Manipulated Variable
u = m.MV(value=0,lb=0,ub=100)
u.STATUS=1; u.dcosT=0.1; u.DMAX=20

# CV = Controlled Variable
x = m.CV(value=0,name='x')
x.STATUS=1; x.SP=45

# Define model
K = m.Param(value=0.8); tau = 15.0
m.Equation(tau*x.dt() == -x + K*u)

# Options and solve
m.options.CV_TYPE = 2
m.options.MV_TYPE = 0
m.options.NODES   = 3
m.options.IMODE   = 6

# Define Control and Prediction Horizon
m.options.CTRL_HOR = 10
m.options.CTRL_TIME = 1
m.options.PRED_HOR = 40
m.options.PRED_TIME = 2

m.solve(disp=False)

# Plot results
plt.figure()
plt.subplot(2,1)
plt.step(m.time,u.value,'b-',label='MV Move Plan')
plt.legend()
plt.ylabel('MV')
plt.subplot(2,2)
plt.plot([0,40],[45,45],'k-',label='Target Setpoint')
plt.plot(m.time,x.value,'r--',label='CV Response')
plt.ylabel('CV')
plt.xlabel('Time')
plt.legend(loc='best')
plt.show()

对于您应该如何考虑代码中使用的np.linspace()指令的反馈,我们将不胜感激。

谢谢。

SandraRodríguez

解决方法

控制范围是允许MV移动的时间范围的一部分。预测范围超出控制范围以预测最终的CV结果,但没有MV移动。这是工业模型预测性控制器的一个遗留概念,它需要计算短期移动计划,但还需要预测控制器的MV和CV最终将在哪里沉降。

选项1:使用Gekko选项定义时间范围(不推荐)

参数CTRL_HORCTRL_TIMEPRED_HORPRED_TIME是APMonitor的选项,但是除非您设置m.options.CSV_READ=0,否则不要更改Gekko解决方案。不建议关闭CSV文件读取功能,因为Gekko使用CSV数据文件来传达更改。

m.options.CSV_READ = 0

# Define Control and Prediction Horizon
m.options.CTRL_HOR = 10
m.options.CTRL_TIME = 1
m.options.PRED_HOR = 40
m.options.PRED_TIME = 1

Control horizon

选项2:使用m.time()定义时间范围

使用m.time是定义MPC时间范围的首选方法。它可能是不均匀的,不仅仅是控制和预测间隔。

m.time = [0,1,2,3,4,6,8,10,15,25,35,50,80]

Non-uniform time horizon

降低预测自由度

预测范围的目的是计算到稳态,并保持控制范围中最后允许的MV移动不变。如果您需要禁止在某个点之后移动MV,那么m.Connection()可以将MV值链接在一起,以在某个时间范围内禁止移动。

# Create prediction horizon
for i in range(9,len(m.time)):
    m.Connection(u,u,i)     # connect end point node
    m.Connection(u,i,2) # connect internal node

Prediction Horizon

这是此示例问题的完整代码。

from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt  

m = GEKKO()

# Time Horizon
m.time = [0,80]

# MV = Manipulated Variable
u = m.MV(value=0,lb=0,ub=100)
u.STATUS=1; u.DCOST=0.1; u.DMAX=20

# CV = Controlled Variable
x = m.CV(value=0,name='x')
x.STATUS=1; x.SP=45

# Define model
K = m.Param(value=0.8); tau = 15.0
m.Equation(tau*x.dt() == -x + K*u)

# Options and solve
m.options.CV_TYPE = 2
m.options.MV_TYPE = 0
m.options.NODES   = 3
m.options.IMODE   = 6

# Create prediction horizon
for i in range(9,2) # connect internal node

m.solve(disp=True)

# Plot results
plt.figure()
plt.subplot(2,1)
plt.step(m.time,u.value,'b-',label='MV Move Plan')
plt.plot(m.time[0:8],u.value[0:8],'o',color='orange',label='Control Horizon')
plt.plot(m.time[8:],u.value[8:],'x',color='purple',label='Prediction Horizon')
plt.legend()
plt.ylabel('MV')
plt.subplot(2,2)
plt.plot([0,80],[45,45],'k-',label='Target Setpoint')
plt.plot(m.time,x.value,'r.-',label='CV Response')
plt.ylabel('CV')
plt.xlabel('Time')
plt.legend(loc='best')
plt.show()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。