我需要在Gekko中优化这个函数,但出现了一些问题.黑色函数(X2)是它应该是什么样的理论.

enter image description here

m = GEKKO()

m.options.IMODE = 6
m.time = np.linspace(0, 1, 100)

x = m.Var(lb=1, ub=3)
x2 = m.Var(lb=1, ub=3)
J = m.Var(0)
t = m.Param(value=m.time)
m.Equation(J.dt() == 24*x*t + 2*x.dt()**2 -4*t)

m.Equation(x2==t**3 + t + 1)

Jf = m.FV()
Jf.STATUS = 1
m.Connection(Jf, J, pos2 = 'end')
m.Obj(Jf)

m.solve()

plt.plot(m.time, x.value)
plt.plot(m.time, x2.value, color='black')
plt.show()

推荐答案

以下是与已知解决方案一致的问题解决方案:

Gekko solution

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

m = GEKKO(remote=True)
n = 101
m.time = np.linspace(0,1,n)
x = m.Var(1,lb=1,ub=3)
t = m.Param(value=m.time)
p = np.zeros(n); p[-1]=1
final = m.Param(p)
m.Equation(final*(x-3)==0)
m.Minimize(final*m.integral(24*x*t + 2*x.dt()**2 -4*t))
m.options.IMODE = 6
m.options.SOLVER = 3
m.options.NODES = 2
m.solve()

plt.plot(m.time, x.value,'b-',label='x gekko')
tm = m.time
plt.plot(tm,tm**3+t+1,'r--',label='x solution') 
plt.legend(); plt.xlabel('time'); plt.ylabel('x')
plt.grid(); plt.show()

变量x的初始值为1,边界在1和3之间.参数final是一个numpy数组,除了最后一个元素设置为1之外,其余都是零.此设置用于在模型中定义仅适用于最终时间点的约束,确保最终时间点的x等于3.不要使用m.fix_final(x,3),因为它也会在最后一点将x的导数设置为零.目标函数m.Minimize()包含表达式m.integral(),表达式m.integral()取决于xtx对时间的导数.它还乘以final,以便仅使用最终积分值来定义目标函数.

Python相关问答推荐

通过优化空间在Python中的饼图中添加标签

Pandas 第二小值有条件

抓取rotowire MLB球员新闻并使用Python形成表格

如何访问所有文件,例如环境变量

为什么这个带有List输入的简单numba函数这么慢

C#使用程序从Python中执行Exec文件

当独立的网络调用不应该互相阻塞时,'

有没有一种方法可以从python的pussompy比较结果中提取文本?

如何并行化/加速并行numba代码?

如何启动下载并在不击中磁盘的情况下呈现响应?

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

使用BeautifulSoup抓取所有链接

AES—256—CBC加密在Python和PHP中返回不同的结果,HELPPP

手动设置seborn/matplotlib散点图连续变量图例中显示的值

PYTHON、VLC、RTSP.屏幕截图不起作用

从嵌套极轴列的列表中删除元素

简单 torch 模型测试:ModuleNotFoundError:没有名为';Ultralytics.yolo';

Python:在cmd中添加参数时的语法

将时间序列附加到数据帧

Python键盘模块不会立即检测到按键