微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用Gekko解决带有固定端点的最优控制

如何解决用Gekko解决带有固定端点的最优控制

我想用Gekko中状态变量的定点条件解决最优控制问题。我想知道如何在Gekko中用固定端点定义最佳控制问题:

$\min \int_{0}^{1} u^2+(u-x)^2 $

$\dot{x}=x+u$

$x(0)=1$

$x(1)=4$

此外,我该如何检索目标函数值?

解决方法

您可以使用m.options.OBJFCNVAL检索目标函数值。这是与某些Benchmark problems(特别是参见1b)相似的脚本。

Optimization solution

import numpy as np
from gekko import GEKKO
m = GEKKO()
nt = 101; m.time = np.linspace(0,1,nt)
x = m.Var(1)
u = m.Var()
p = np.zeros(nt); p[-1] = 1.0; final = m.Param(value=p)
m.Equation(x.dt()==x+u)
m.Equation(final*(x-4)==0)
m.Minimize(m.integral(u**2+(u-x)**2)*final)

m.options.IMODE = 6; m.solve()
print('Objective: ' + str(m.options.OBJFCNVAL))

import matplotlib.pyplot as plt
plt.plot(m.time,x.value,'k:',LineWidth=2,label=r'$x$')
plt.plot(m.time,u.value,'b--',label=r'$u$')
plt.legend(loc='best'); plt.xlabel('Time')
plt.show()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。