繁体   English   中英

带控制变量的 GEKKO 最优控制

[英]GEKKO optimal control with control variables

大家好,我写了下面的代码,通常变量“y”应该收敛到“z_obj”,但事实并非如此。 这是我得到的代码和 plot

在此处输入图像描述

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

m = GEKKO()

m.time = np.linspace(0,10,11)
z=np.repeat(20,11)
z_obj=m.Param(value=z)
y = m.Var(14)
u=m.CV(lb=0)
u.STATUS=1
u.FSTATUS=1
t = m.Param(value=m.time)
m.Equation(y.dt()==u)
m.Equation(u.dt()<=1)
m.Equation(u.dt()>=-5)
m.Obj((y-z_obj)**2)
m.options.IMODE=6
m.solve(disp=False)
plt.plot(m.time,y.value)
plt.xlabel('time')
plt.ylabel('y')
plt.show()

要对操纵变量实施变化率约束,请使用m.MV()类型的DMAXHIDMAXLO选项。

MV 变化率限制

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

m = GEKKO()

m.time = np.linspace(0,10,11)
z=20
y = m.Var(14)
u=m.MV(lb=0)
u.STATUS=1; u.DMAXHI=1; u.DMAXLO=-5
t = m.Param(value=m.time)
m.Equation(y.dt()==u)
m.Obj((y-z)**2)
m.options.IMODE=6
m.solve(disp=False)
plt.subplot(2,1,1)
plt.plot(m.time,y.value,'r--',label='y')
plt.ylabel('y'); plt.legend()
plt.subplot(2,1,2)
plt.plot(m.time,u.value,'b-',label='u')
plt.ylabel('u'); plt.legend()
plt.xlabel('time')
plt.show()

您当前的方法是创建另一个m.CV()以便您可以使用衍生工具。 这也有效,但会为m.CV()创建额外的方程。 有关m.MV()m.CV()类型的附加信息,请参见文档快速入门指南Gekko 示例中的 #17 of 18

我设法解决它.. 我必须摆脱 u.STATUS =1 并保持 u.FSTATUS = 1。 但我不知道为什么! 请解释一下!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM