Python 基于GEKKO的动态参数估计

Python 基于GEKKO的动态参数估计,python,optimization,gekko,Python,Optimization,Gekko,我是GEKKO的新手,所以我的问题可能很愚蠢。我想估计我的模型的一些参数,这是一个SIR模型。我已经阅读了很多次有关约翰·赫登伦教授的文档和视频,但盖科对我来说仍然很难理解。这是我的代码: from gekko import GEKKO tab_data = [275.5,317,457.34,646,888.67,1236.67,1619.34,2077.34] total_active_data=[59999725.,59999684.33333334,59999558.66666666,\

我是GEKKO的新手,所以我的问题可能很愚蠢。我想估计我的模型的一些参数,这是一个SIR模型。我已经阅读了很多次有关约翰·赫登伦教授的文档和视频,但盖科对我来说仍然很难理解。这是我的代码:

from gekko import GEKKO
tab_data = [275.5,317,457.34,646,888.67,1236.67,1619.34,2077.34]
total_active_data=[59999725.,59999684.33333334,59999558.66666666,\
                   59999385.33333334,59999158.33333333,59998823.,\
                   59998474.66666666,59998053.33333333]
population = 60e6
m = GEKKO()
v = m.MV(0.97,0,9.7)
v.STATUS = 1
v.FSTATUS = 0
tau = m.MV(0.066,0.0594,0.099)
tau.STATUS=0
tau.FSTATUS = 0
I0 = m.Var(100)
S0 = m.Var(population-I0.value-275)
R0 = m.CV(value=tab_data)
R0.FSTATUS=1
m.time = [i for i in range(len(tab_data))]
m.Equation(S0.dt() == -v*S0*I0/total_active_data)
m.Equation(I0.dt() == v*S0*I0/total_active_data - 0.07*I0-tau*I0)
m.Equation(R0.dt() == tau*I0)
m.options.IMODE = 5  # MHE
m.options.EV_TYPE = 2  # Objective type
m.options.NODES = 3  # Collocation nodes
m.options.SOLVER = 3  # IPOPT
m.solve()
如果我运行它,会出现以下错误


没有等式(=)或不等式(>,的方程需要定义一个新的Gekko参数,以将参数值作为向量插入方程中

tad=m.Param(总活动数据)
m、 方程(S0.dt()==-v*S0*I0/tad)
m、 方程(I0.dt()==v*S0*I0/tad-0.07*I0 tau*I0)
修改后的脚本现在已成功运行

从gekko导入gekko
tab_数据=[275.5317457.34646888.671236.671619.342077.34]
总活动数据=[59999725.059999684.33333334\
59999558.66666666,59999385.33333334,\
59999158.33333333,59998823.0,\
59998474.66666666,59998053.33333333]
人口=60e6
m=GEKKO(远程=False)
v=m.MV(0.97,0,9.7)
v、 状态=1
v、 FSTATUS=0
tau=m.MV(0.066,0.0594,0.099)
tau.状态=0
tau.FSTATUS=0
I0=m.Var(100)
S0=m.Var(总体-I0.值-275)
R0=m.CV(值=tab_数据)
R0.FSTATUS=1
m、 时间=[i代表范围内的i(len(tab_数据))]
tad=m.Param(总有效数据)
m、 方程(S0.dt()==-v*S0*I0/tad)
m、 方程(I0.dt()==v*S0*I0/tad-0.07*I0 tau*I0)
m、 方程(R0.dt()==tau*I0)
m、 options.IMODE=5#MHE
m、 options.EV_TYPE=2#目标类型
m、 options.NODES=3个#配置节点
m、 options.SOLVER=3#IPOPT
m、 解决()
这是解算器输出

Number of Iterations....: 48

                                   (scaled)                 (unscaled)
Objective...............:  4.8513730486940313e+005   4.8513730486940313e+005
Dual infeasibility......:  8.9731011182818626e-008   8.9731011182818626e-008
Constraint violation....:  6.2281364666837996e-009   9.2077243607491255e-009
Complementarity.........:  3.0323778515541553e-007   3.0323778515541553e-007
Overall NLP error.......:  1.9345602538908201e-008   3.0323778515541553e-007


Number of objective function evaluations             = 53
Number of objective gradient evaluations             = 49
Number of equality constraint evaluations            = 53
Number of inequality constraint evaluations          = 0
Number of equality constraint Jacobian evaluations   = 49
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations             = 48
Total CPU secs in IPOPT (w/o function evaluations)   =      0.174
Total CPU secs in NLP function evaluations           =      0.052

EXIT: Optimal Solution Found.

 The solution was found.

 The final value of the objective function is  485137.30486940313
 
 ---------------------------------------------------
 Solver         :  IPOPT (v3.12)
 Solution time  :  0.2999 sec
 Objective      :  485137.30486940313
 Successful solution
 ---------------------------------------------------