用Gekko求解定点最优控制

2024-04-28 19:46:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Gekko中解决一个状态变量具有固定端点条件的最优控制问题。我想知道如何在Gekko中定义一个具有固定终点的最优控制问题,如下所示:

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

$\dot{x}=x+u$

$x(0)=1$

$x(1)=4$

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


Tags: 函数目标定义min条件端点dotint
1条回答
网友
1楼 · 发布于 2024-04-28 19:46:20

您可以使用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 ',LineWidth=2,label=r'$u$')
plt.legend(loc='best'); plt.xlabel('Time')
plt.show()

相关问题 更多 >