Python 基于Gekko的最优控制问题&x201C;未找到解决方案”;

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是常数系

我需要用目标函数最小化解来解决一个最优控制问题。我的参考是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”)。我试图更改初始条件和初始猜测,但没有实现解决方案

从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
 ---------------------------------------------------

谢谢你,约翰。我会按照你所说的核实和调整剧本和措辞。问候你