GEKKO:避免预测中第一个 MV 值的影响

我在 MPC 模式下使用 GEKKO (Solver APOPT)。我定义我的操纵变量如下:


u = m.MV(lb=0, ub=1, integer=True)

u.STATUS = 1 

我故意不使用:


u = m.MV(value=1 ,lb=0, ub=1, integer=True)

u.STATUS = 1 

或者:


u = m.MV(value=0 ,lb=0, ub=1, integer=True)

u.STATUS = 1 

因为我不知道下一个决定是什么,我希望优化器来定义它。显然,当您未定义 的值时u,GEKKO 会为其指定默认值 0。


问题是这个值u用于我的模型预测以及其他计算中,这是不希望的(见图)。正如您所看到的, 的新值u是 1 ,在我的例子中意味着冰箱处于打开状态。但是,温度预测从默认值u0 开始。因此,冰箱中的温度在下一个时间步长中上升,并且仅在下一个时间步长中开始下降。我可以将 value 定义为之前的结果,u但这也不是 100% 正确。


我怎样才能避免这种情况?还有其他选择可以让我的预测正确开始吗?


我很感激你的帮助:)

https://img1.mukewang.com/651f78d5000153d122611241.jpg

胡说叔叔
浏览 86回答 1
1回答

四季花海

有一个选项可以计算任何参数或变量(包括 MV)的初始条件:m.free_initial(u)这是一个简单的应用程序,显示了此函数对解决方案的影响。和free_initial(mv)import numpy as npfrom gekko import GEKKOm = GEKKO(remote=False)m.time = np.linspace(0,10,11)mv = m.MV(value=0,lb=0,ub=1,integer=True);    mv.STATUS=1cv = m.CV(value=1); cv.SPHI=0.6; cv.SPLO=0.4; cv.STATUS=1m.Equation(3*cv.dt()+(cv-1)==-0.8*mv)m.free_initial(mv)m.options.IMODE=6; m.options.CV_TYPE=1m.options.NODES=3; m.options.MV_TYPE=0m.options.SOLVER =1m.solve(disp=False)import matplotlib.pyplot as pltplt.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,10],[0.4,0.4],'k:')plt.legend(); plt.xlabel('Time')plt.show()没有free_initial(mv)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python