一组微分方程中的条件分段函数
Conditional Piecewise function in a set of differential equations
我正在尝试实现一个模型,并且我有这个条件分段函数,作为模型的一部分。
其中 T_zone(=293) 和 T_in(=348) 是先前定义的常量,x2 和 x5 是依赖于其他方程的变量,这些方程依赖于 T_in 和 T_out.
它们都有定义的初始值。
temperature_zone=293.0
T_in = m.Var(value=temperature_zone)
T_zone = m.Var(value=temperature_zone)
x2 = m.Var(value=temperature_zone)
x5 = m.Var(value=temperature_zone)
Tout = m.Var(value=temperature_zone)
Tp1out=m.Var(value=temperature_zone)
m1out=m.if3(((2.0*(x2))-T_in-T_zone), 0, ((2.0*(x2))-T_in-T_zone))
m.Equation(T_p1out== T_zone+m1out)
m2out=m.if3(((2.0*(x5))-T_p1out-T_zone), 0, ((2.0*(x5))-T_p1out-T_zone))
m.Equation(T_out == T_zone+m2out)
在上面的代码中,我尝试将等式分成两部分,并将 if 条件的结果作为附加变量添加到 base/minimum 值中,结果无解。
以下是一些需要考虑的事项:
- 如果
T_in
和 T_zone
是常量,则使用 m.Const
或 m.Param
而不是 m.Var
。否则,它们可以通过求解器进行调整。
- 一个
m.if3
函数就足以解决这个问题。您可以定义两个 m.if3
语句,然后添加输出,但随后您创建了额外的二进制变量,这将使您的问题更难解决。
condition
判断是T_out=T_zone (condition<0)
还是T_out=2*x5-2*x2+T_in (condition>=0)
.
T_in
的值为348.0,不是temperature_zone (293.0)
。
这是针对您提出的问题的完整脚本。
from gekko import GEKKO
m = GEKKO()
temperature_zone=293.0
T_in = m.Const(value=348.0)
T_zone = m.Const(value=temperature_zone)
x2 = m.Var(value=temperature_zone)
x5 = m.Var(value=temperature_zone)
condition = 2*x5-2*x2+T_in-T_zone
Tout=m.if3(condition, T_zone, 2*x5-2*x2+T_in)
m.solve()
APOPT solver 在两次迭代中找到解决方案。请注意,x2
和 x5
是此示例中的附加自由度,仍然需要方程式来指定它们的值。
Number of state variables: 6
Number of total equations: - 3
Number of slack variables: - 2
---------------------------------------
Degrees of freedom : 1
----------------------------------------------
Steady State Optimization with APOPT Solver
----------------------------------------------
Iter: 1 I: 0 Tm: 0.00 NLPi: 2 Dpth: 0 Lvs: 2 Obj: 0.00E+00 Gap: NaN
--Integer Solution: 0.00E+00 Lowest Leaf: 0.00E+00 Gap: 0.00E+00
Iter: 2 I: 0 Tm: 0.00 NLPi: 1 Dpth: 1 Lvs: 2 Obj: 0.00E+00 Gap: 0.00E+00
Successful solution
---------------------------------------------------
Solver : APOPT (v1.0)
Solution time : 1.390000000537839E-002 sec
Objective : 0.000000000000000E+000
Successful solution
---------------------------------------------------
我正在尝试实现一个模型,并且我有这个条件分段函数,作为模型的一部分。
其中 T_zone(=293) 和 T_in(=348) 是先前定义的常量,x2 和 x5 是依赖于其他方程的变量,这些方程依赖于 T_in 和 T_out.
它们都有定义的初始值。
temperature_zone=293.0
T_in = m.Var(value=temperature_zone)
T_zone = m.Var(value=temperature_zone)
x2 = m.Var(value=temperature_zone)
x5 = m.Var(value=temperature_zone)
Tout = m.Var(value=temperature_zone)
Tp1out=m.Var(value=temperature_zone)
m1out=m.if3(((2.0*(x2))-T_in-T_zone), 0, ((2.0*(x2))-T_in-T_zone))
m.Equation(T_p1out== T_zone+m1out)
m2out=m.if3(((2.0*(x5))-T_p1out-T_zone), 0, ((2.0*(x5))-T_p1out-T_zone))
m.Equation(T_out == T_zone+m2out)
在上面的代码中,我尝试将等式分成两部分,并将 if 条件的结果作为附加变量添加到 base/minimum 值中,结果无解。
以下是一些需要考虑的事项:
- 如果
T_in
和T_zone
是常量,则使用m.Const
或m.Param
而不是m.Var
。否则,它们可以通过求解器进行调整。 - 一个
m.if3
函数就足以解决这个问题。您可以定义两个m.if3
语句,然后添加输出,但随后您创建了额外的二进制变量,这将使您的问题更难解决。 condition
判断是T_out=T_zone (condition<0)
还是T_out=2*x5-2*x2+T_in (condition>=0)
.T_in
的值为348.0,不是temperature_zone (293.0)
。
这是针对您提出的问题的完整脚本。
from gekko import GEKKO
m = GEKKO()
temperature_zone=293.0
T_in = m.Const(value=348.0)
T_zone = m.Const(value=temperature_zone)
x2 = m.Var(value=temperature_zone)
x5 = m.Var(value=temperature_zone)
condition = 2*x5-2*x2+T_in-T_zone
Tout=m.if3(condition, T_zone, 2*x5-2*x2+T_in)
m.solve()
APOPT solver 在两次迭代中找到解决方案。请注意,x2
和 x5
是此示例中的附加自由度,仍然需要方程式来指定它们的值。
Number of state variables: 6
Number of total equations: - 3
Number of slack variables: - 2
---------------------------------------
Degrees of freedom : 1
----------------------------------------------
Steady State Optimization with APOPT Solver
----------------------------------------------
Iter: 1 I: 0 Tm: 0.00 NLPi: 2 Dpth: 0 Lvs: 2 Obj: 0.00E+00 Gap: NaN
--Integer Solution: 0.00E+00 Lowest Leaf: 0.00E+00 Gap: 0.00E+00
Iter: 2 I: 0 Tm: 0.00 NLPi: 1 Dpth: 1 Lvs: 2 Obj: 0.00E+00 Gap: 0.00E+00
Successful solution
---------------------------------------------------
Solver : APOPT (v1.0)
Solution time : 1.390000000537839E-002 sec
Objective : 0.000000000000000E+000
Successful solution
---------------------------------------------------