在 Gekko 中获取解的伴随状态

问题描述 投票:0回答:1

在解决 Gekko 中的最优控制问题(IMODE = 6)后,有没有办法访问或重建伴随状态 p ?由于文档没有为此提供任何资源,我希望有一种方法可以检索一些可能导致伴随状态重建的信息。

一个额外的问题,是否有任何最优控制求解器(使用 python API)返回伴随状态?

optimization mathematical-optimization numerical-methods differential-equations gekko
1个回答
0
投票

m.options.SENSITIVITY = 1
中有
gekko
选项可以在运行目录
sensitivity.txt
中生成
m.path
。然而,这只适用于模拟零自由度或 MV 状态关闭时具有零自由度的优化问题。

另一种选择是将伴随方程添加到问题中。这是一个动态优化问题的示例。

import numpy as np
from gekko import GEKKO
m = GEKKO()
nt = 101
m.time = np.linspace(0,1,nt)
x = m.Var(value=1)
u = m.Var(value=0,lb=-1,ub=1)
m.Equation(x.dt()==-x + u)
m.Minimize(x**2)
m.options.IMODE = 6
m.solve()

添加伴随方程得出

lamdbda
的值,作为目标函数对
x
变化的敏感度。

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

m = GEKKO()
nt = 101
m.time = np.linspace(0, 1, nt)
x = m.Var(value=1)
u = m.Var(value=0, lb=-1, ub=1)
lam = m.Var(value=0)  # Adjoint variable
m.Equation(x.dt() == -x + u)
m.Equation(lam.dt() == 2*x + lam)  # Adjoint state equation
m.Minimize(x**2)
m.options.IMODE = 6
m.solve(disp=False)

# Plotting
plt.figure(figsize=(7,4))
plt.plot(m.time, x.value, 'b-', lw=2, label=r'$x$')
plt.plot(m.time, u.value, 'r--', lw=2, label=r'$u$')
plt.plot(m.time, lam.value, 'g-.', lw=2, label=r'$\lambda$')
plt.xlabel('Time')
plt.grid(); plt.tight_layout()
plt.show()
© www.soinside.com 2019 - 2024. All rights reserved.