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

GEKKO:避免将第一个MV值包含在预测中

如何解决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%正确。

如何避免这种情况?还有其他选择可以使我的预测正确开始吗?

我非常感谢您的帮助:)

refrigerator temperature control

解决方法

任何参数或变量(包括MV)都有一个option to calculate the initial condition

while

这是一个简单的应用程序,显示了此功能对解决方案的影响。

使用m.free_initial(u)

Free initial condition

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()

With fixed initial condition

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