gpt4 book ai didi

python - 在 GEKKO 中解决后退地平线控制

转载 作者:行者123 更新时间:2023-12-05 05:38:55 34 4
gpt4 key购买 nike

我正在尝试在 Python 中使用 GEKKO 实现后退地平线控制 (RHC) 方案,我想检查一下我的公式。目标是解决从 t=tk 到 t=tk+H-1 的某个时间范围内的 OCP,在 tk 处应用控制解决方案,并丢弃剩余值(u_k+1 到 u_k+H-1)。下面的代码似乎给出了正确的解决方案,但我想验证我在 GEKKO 中使用了正确的函数,即在“重置”下一个地平线的状态时。我在尝试使用 .VALUE 函数重置 x1x2 时遇到了一些问题,例如TypeError:'float' 对象不可订阅

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

if __name__ == '__main__':

# Instantiate GEKKO
m = GEKKO()

# Constants
nRHC = 21
tRHC = 2
m.time = np.linspace(0, tRHC, nRHC)

# Control
u = m.MV(value=0.0,fixed_initial=False)
u.STATUS = 1
u.DCOST = 0

# Vars
t = m.SV(value=0)
x1 = m.SV(value=1)
x2 = m.SV(value=0)

# Equations
m.Equation(t.dt() == 1)
m.Equation(x1.dt() == x2)
m.Equation(x2.dt() == (1 - x2*x2)*x1 - x2 + u)

# Objective Function
m.Minimize(10*x1**2 + 10*x2**2 + u**2)

# Solve RHC
m.options.IMODE = 6
m.options.NODES = 11
m.options.MV_TYPE = 2
m.options.SOLVER = 3
nTotal = 101
tTotal = np.linspace(0, 10, nTotal)
uStore = np.zeros((1,nTotal))
xStore = np.zeros((2,nTotal))
xStore[:,0] = [1, 0]
for i in range(nTotal):
print('Solving Step: ', i+1, ' of ', nTotal-1)
if i == nTotal-1:
break

# Solve MPC over horizon
m.solve(disp=False)

# Update States
t.VALUE = t[1]
x1.MEAS = x1[1]
x2.MEAS = x2[1]

# Store
uStore[:,i] = u.NEWVAL
xStore[:,i+1] = np.array([x1[1], x2[1]])

# Plot States
f1, axs = plt.subplots(2)
axs[0].plot(tTotal, xStore[0,:])
axs[0].set_ylabel('x')
axs[0].grid()
axs[1].plot(tTotal, xStore[1,:])
axs[1].set_ylabel('x_dot')
axs[1].set_xlabel('time')
axs[1].grid()

# Show Plots
plt.show()

谢谢!

最佳答案

不需要更新状态,因为 Gekko 会自动执行此操作。

# Update States
t.VALUE = t[1]
x1.MEAS = x1[1]
x2.MEAS = x2[1]

状态值存储在运行目录文件中(参见m.path 或使用m.open_folder() 打开)。该文件是 ctl.t0。在下一个命令 m.solve() 中,该文件被导入并时移以使下一个时间步长的值成为初始条件。使用 m.options.TIME_SHIFT=1 调整时移(默认值为 1)。如果您确实想要覆盖初始条件,请使用 x1.MEAS=x1.value[1]x1.value=x1.value[1]

关于python - 在 GEKKO 中解决后退地平线控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72819943/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com