如何解决GEKKO:避免将第一个MV值包含在预测中
我在MPC模式(Solver APOPT)中使用GEKKO。我定义的操纵变量如下:
u = m.MV(lb=0,ub=1,integer=True)
u.STATUS = 1
我故意不使用:
u = m.MV(value=1,lb=0,integer=True)
u.STATUS = 1
或者:
u = m.MV(value=0,integer=True)
u.STATUS = 1
因为我不知道下一个决定是什么,我希望我的优化器对其进行定义。显然,当您未定义u
的值时,GEKKO会将其默认值设置为0。
问题在于u
的值在我的模型预测以及其他不期望的计算中都使用了(见图)。如您所见,u
的新值是一个值,这意味着在我的情况下是打开冰箱的。但是,温度预测从u
的默认值为0开始。因此,冰箱中的温度在下一个时间步中上升,而在下一个时间步中才开始下降。我可以将value定义为u
的先前结果,但这也不是100%正确。
如何避免这种情况?还有其他选择可以使我的预测正确开始吗?
我非常感谢您的帮助:)
解决方法
任何参数或变量(包括MV)都有一个option to calculate the initial condition:
while
这是一个简单的应用程序,显示了此功能对解决方案的影响。
使用m.free_initial(u)
free_initial(mv)
没有import numpy as np
from gekko import GEKKO
m = GEKKO(remote=False)
m.time = np.linspace(0,10,11)
mv = m.MV(value=0,lb=0,ub=1,integer=True); mv.STATUS=1
cv = m.CV(value=1); cv.SPHI=0.6; cv.SPLO=0.4; cv.STATUS=1
m.Equation(3*cv.dt()+(cv-1)==-0.8*mv)
m.free_initial(mv)
m.options.IMODE=6; m.options.CV_TYPE=1
m.options.NODES=3; m.options.MV_TYPE=0
m.options.SOLVER =1
m.solve(disp=False)
import matplotlib.pyplot as plt
plt.step(m.time,mv,'r.',markersize=5,where='post',label='MV')
plt.plot(m.time,cv,'b:',label='CV')
plt.plot([0,10],[0.6,0.6],'k:',label='SP Range')
plt.plot([0,[0.4,0.4],'k:')
plt.legend(); plt.xlabel('Time')
plt.show()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。