[英]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()
类型的DMAXHI
和DMAXLO
选项。
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.