Python 基于Gekko的最优控制问题&x201C;未找到解决方案”;
我需要用目标函数最小化解来解决一个最优控制问题。我的参考是APM示例,可在以下位置获得: 我的目标函数是Z=>integrationexp(-r*t)*C(t).dt,其中C(t)=Ii.ai+Ij.aj。Ii和Ij是操纵变量,ai、aj和r是常数。目标是min Z 该问题受到以下约束:dKi/dt=Ii–deltai.Ki;dKj/dt=Ij–deltaj.Kj;Ki=(D-B.Kj-E)/A.Ki和Kj是变量,初始值Ki0和Kj0是已知的。D、 A、B、deltai、deltaj和E是常数系数 我开发了一个Gekko/python脚本,如下所示。但是,优化脚本没有实现一个解决方案(“异常:@error:solution not Found”)。我试图更改初始条件和初始猜测,但没有实现解决方案Python 基于Gekko的最优控制问题&x201C;未找到解决方案”;,python,gekko,Python,Gekko,我需要用目标函数最小化解来解决一个最优控制问题。我的参考是APM示例,可在以下位置获得: 我的目标函数是Z=>integrationexp(-r*t)*C(t).dt,其中C(t)=Ii.ai+Ij.aj。Ii和Ij是操纵变量,ai、aj和r是常数。目标是min Z 该问题受到以下约束:dKi/dt=Ii–deltai.Ki;dKj/dt=Ij–deltaj.Kj;Ki=(D-B.Kj-E)/A.Ki和Kj是变量,初始值Ki0和Kj0是已知的。D、 A、B、deltai、deltaj和E是常数系
从gekko导入gekko
将numpy作为np导入
将matplotlib.pyplot作为plt导入
输入数学
#创建Gekko模型
m=GEKKO()
#时点
nt=101
m、 时间=np.linspace(0,10,nt)
t=m.Param(值=m.time)
#常数
A=-0.0000159
B=-0.0000506
E=0.614
德尔泰=0.031
deltaj=0.1
ai=10
aj=27632
r=0.085
Ii=m.MV(值=100)
Ij=m.MV(值=100)
二、地位=1
二、成本=0
Ij.状态=1
Ij.成本=0
Ki=m.Var(值=15.548)
Kj=m.Var(值=0.932)
m、 方程(Ki.dt()==Ii deltai*Ki)
m、 方程(Kj.dt()==Ij deltaj*Kj)
m、 方程(Ki==(0.577-B*Kj-E)/A)
#客观的
Z=m.Var()
#最终目标
Zf=m.FV()
Zf.状态=1
m、 连接(Zf,Z,pos2='end')
m、 方程(Z.dt()==(m.exp(-r*t))*(Ii*ai+Ij*aj))
m、 Obj(Zf)
#选择权
m、 选项。IMODE=6
m、 options.NODES=3
m、 选项。解算器=3
m、 解决()
解算器表明您的问题是无限的
EXIT: Iterates diverging; problem might be unbounded.
An error occured.
The error code is 4
---------------------------------------------------
Solver : IPOPT (v3.12)
Solution time : 1.44470000000729 sec
Objective : -4.152133137209157E+021
Unsuccessful with error code 0
---------------------------------------------------
Creating file: infeasibilities.txt
Use command apm_get(server,app,'infeasibilities.txt') to retrieve file
@error: Solution Not Found
Traceback (most recent call last):
File "C:\Users\johnh\Desktop\test.py", line 53, in <module>
m.solve()
File "C:\Python37\lib\site-packages\gekko\gekko.py", line 2174, in solve
raise Exception(response)
Exception: @error: Solution Not Found
此外,根据这些边界,APOPT解算器报告问题不可行。似乎有3个方程可用于解决2个变量:Ki
和Kj
m.方程(Ki.dt()==Ii deltai*Ki)
m、 方程(Kj.dt()==Ij deltaj*Kj)
m、 方程(Ki*A==(0.577-B*Kj-E))
如果删除最后一个等式,则可以获得成功的解决方案。简而言之,问题可能是无界的、过度指定的,或者两者都有。以下是成功解决问题的版本:
从gekko导入gekko
将numpy作为np导入
将matplotlib.pyplot作为plt导入
输入数学
m=GEKKO()#创建GEKKO模型
nt=101#时间点
m、 时间=np.linspace(0,10,nt)
t=m.Param(值=m.time)
final=np.零(nt);final[-1]=1
f=m.Param(最终)
#常数
A=-0.0000159;B=-0.0000506;E=0.614
deltai=0.031;deltaj=0.1
ai=10;aj=27632;r=0.085
Ii=毫伏(值=100,磅=0,磅=100)
Ij=m.MV(值=100,磅=0,磅=100)
二、状态=1;二、成本=0
Ij.状态=1;Ij.成本=0
Ki=m.Var(值=15.548)
Kj=m.Var(值=0.932)
e=m.Intermediate(m.exp(-r*t))
m、 方程(Ki.dt()==Ii deltai*Ki)
m、 方程(Kj.dt()==Ij deltaj*Kj)
#m、 方程(Ki*A==(0.577-B*Kj-E))
#在终点最小化目标
m、 最小化(f*m积分(e*(Ii*ai+Ij*aj)))
#选择权
m、 options.IMODE=6;m.options.NODES=2
m、 选项。解算器=1
m、 解决()
我还使用了新的m.integral()
函数。您可能需要验证您的方程,也可以尝试不同的解算器,看看是否有一个解算器提供了更有意义的信息
Each time step contains
Objects : 0
Constants : 0
Variables : 7
Intermediates: 1
Connections : 0
Equations : 5
Residuals : 4
Number of state variables: 1600
Number of total equations: - 1400
Number of slack variables: - 0
---------------------------------------
Degrees of freedom : 200
----------------------------------------------
Dynamic Control with APOPT Solver
----------------------------------------------
Iter Objective Convergence
0 2.55775E+01 2.61383E+00
1 1.99997E-03 9.61349E-09
2 2.00000E-03 1.82031E-10
3 2.00000E-03 2.22045E-16
4 2.00000E-03 2.22045E-16
Successful solution
---------------------------------------------------
Solver : APOPT (v1.0)
Solution time : 0.498800000001211 sec
Objective : 1.999999949475750E-003
Successful solution
---------------------------------------------------
谢谢你,约翰。我会按照你所说的核实和调整剧本和措辞。问候你