我需要用目标函数最小化解来解决一个最优控制问题。我的参考是APM示例,可在以下位置获得:https://www.youtube.com/watch?v=y26X-BSf8KU&list=PLLBUgWXdTBDjxcpH9hRuq-bsm_ti2UvoB&index=12
我的目标函数是Z=>;积分exp(-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”)。我试图更改初始条件和初始猜测,但没有实现解决方案
from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt
import math
#Create Gekko model
m=GEKKO()
#Time points
nt=101
m.time=np.linspace(0,10,nt)
t = m.Param(value=m.time)
#Constants
A=-0.0000159
B=-0.0000506
E=0.614
deltai=0.031
deltaj=0.1
ai=10
aj=27632
r=0.085
Ii=m.MV(value=100)
Ij=m.MV(value=100)
Ii.STATUS=1
Ii.COST=0
Ij.STATUS=1
Ij.COST=0
Ki=m.Var(value=15.548)
Kj=m.Var(value=0.932)
m.Equation(Ki.dt()==Ii-deltai*Ki)
m.Equation(Kj.dt()==Ij-deltaj*Kj)
m.Equation(Ki==(0.577-B*Kj-E)/A)
#Objective
Z=m.Var()
#Final objective
Zf=m.FV()
Zf.STATUS=1
m.Connection(Zf, Z, pos2='end')
m.Equation(Z.dt() == ((m.exp(-r*t)))*(Ii*ai+Ij*aj))
m.Obj(Zf)
#Options
m.options.IMODE=6
m.options.NODES=3
m.options.SOLVER=3
m.solve()
解算器表明您的问题是无限的
MV
应该有边界吗此外,有了这些边界,APOPT解算器报告问题不可行。似乎有3个方程可以解2个变量:
Ki
和Kj
如果你去掉最后一个等式,你就得到了一个成功的解。简言之,问题可能是无界的、过度指定的,或者两者兼而有之。以下是一个成功解决问题的版本:
我还使用了新的
m.integral()
函数。您可能需要验证您的方程式,也可以尝试不同的解算器,看看是否有一个解算器提供了更有意义的信息相关问题 更多 >
编程相关推荐