数据数组必须具有相同的长度,并匹配动态问题中的时间离散化

Data arrays must have the same length, and match time discretization in dynamic problems

我正在研究 Luss 问题的变体。我写了这段代码,它看起来是对的,我希望最小化积分并将端点设置为它们的最终条件。不幸的是,变量 p 导致了这个错误,我需要它来帮助我的解决方案收敛。 p 和 m.time 大小相同,但我仍然收到错误。任何帮助将不胜感激,提前致谢

import numpy as np

from gekko import GEKKO
import matplotlib.pyplot as plt

m = GEKKO()
#n = 1000
m.time = np.linspace(0,1.5)

x1 = m.Var(value=0.5)
x2 = m.Var(value=0.0)

u = m.MV(lb=-1,ub=1)
u.STATUS = 1

p = np.zeros_like(m.time)
p[-1] = 1
final = m.Param(p)

m.Equation(x1.dt() == u + x2)
m.Equation(x2.dt() == -u)
m.Equation(final*x1 == 0)
m.Equation(final*x2 == 0)


m.Minimize(0.5*m.integral(x1**2) * final)
m.IMODE = 6
m.solve(disp=False)

plt.plot(m.time,x1.value,label = "x1")
plt.plot(m.time,x2.value,label = "x2")
plt.plot(m.time,u.value,label = "u")
plt.legend()
plt.show()

所以问题出在IMODE声明中,命令应该是m.options.IMODE = 6,然后问题正常