输入信号时变的Pyomo参数估计

2024-04-26 21:34:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想尝试Pyomo来解决参数估计问题,这就是我目前所拥有的。首先创建参数和变量。参数估计问题的未知数是p1到{}。时变输入是TVLmdot和{}。在

model = pyo.ConcreteModel()
model.t = dae.ContinuousSet(initialize=time)

model.p1 = pyo.Var(domain=pyo.NonNegativeReals, initialize=5.993867814123688)
model.p2 = pyo.Var(domain=pyo.NonNegativeReals, initialize=0.5254928953213035)
model.p3 = pyo.Var(domain=pyo.NonNegativeReals, initialize=50.507139006670045)
model.p4 = pyo.Var(domain=pyo.NonNegativeReals, initialize=50.349545087852945)
model.p5 = pyo.Var(domain=pyo.NonNegativeReals, initialize=0.03248392142362977)
model.p6 = pyo.Var(domain=pyo.NonNegativeReals, initialize=0.10106006227941483)

model.TU = pyo.Param(model.t, default=273.15)
model.TVL = pyo.Param(model.t, default=333.15)
model.mdot = pyo.Param(model.t, default=0.01)

model.TR = pyo.Var(model.t)
model.TRL = pyo.Var(model.t)
model.TW = pyo.Var(model.t)

model.dTRdt = dae.DerivativeVar(model.TR, wrt=model.t)
model.dTRLdt = dae.DerivativeVar(model.TRL, wrt=model.t)
model.dTWdt = dae.DerivativeVar(model.TW, wrt=model.t)

model.t_meas = pyo.Set(within=model.t, initialize=time)
model.TR_meas = pyo.Param(model.t_meas, initialize=TR_dict)

该系统由三个ode组成。在

^{pr2}$

这是目标函数。在

^{3}$

根据文档,模拟工作正常

model.var_input = pyo.Suffix(direction=pyo.Suffix.LOCAL)
model.var_input[model.TU] = TU_dict
model.var_input[model.TVL] = TVL_dict
model.var_input[model.mdot] = mdot_dict

sim = dae.Simulator(model, package="casadi")
tsim, profiles = sim.simulate(numpoints=3600, integrator="cvodes", varying_inputs=model.var_input)

但我很难让它和优化一起工作。有没有推荐的方法来执行时变输入的优化?在

编辑:

这是我用来优化的代码。在

discretizer = pyo.TransformationFactory("dae.finite_difference")
discretizer.apply_to(model, wrt=model.t, nfe=200, scheme="BACKWARD")
solver = pyo.SolverFactory("ipopt")
results = solver.solve(model, tee=True)

我将上面的代码从model.TU = pyo.Var(model.t)改为model.TU = pyo.Param(model.t, default=273.15)(也适用于TVL和{})。否则,ipopt还试图为TUTVL和{}找到最佳轨迹。在这个新实现中,只有默认值用于优化。我添加了下面显示TU的图来说明我的观点。在

problem


Tags: defaultinputmodelparamvardomaintrpyo