我读了大部分问题都出现了同样的错误,但大多数问题的回答都是一样的,这与我的问题不同。我正在解决一个非常简单的模型,唯一的问题是我正确管理的条件语句。但是我得到了这个错误,现在我不知道如何解决它! “APM 模型错误:字符串 > 15000 个字符 考虑将直线分解为多个方程
也可能是因为只使用了换行符 CR 而不是 CR LF(对于 Windows)或 LF(对于 MacOS/Linux) 要解决此问题,请使用适当的换行符保存 APM 文件
正在停止... “ 如果你能帮助我,那就太好了。
最佳答案
IMODE=2
不需要求和。使用 m.Minimize()
或 m.Obj()
将每个数据行和相关计算添加到目标函数。
尝试使用 m.if3()
函数代替 if
语句。这是为基于梯度的求解器提供连续的一阶和二阶导数所必需的。如果 m.if3()
花费的时间太长,也可以使用 m.if2()
。有关优化问题中的逻辑条件的更多信息。
from gekko import GEKKO
import random
m = GEKKO()
# random numbers between -0.5 and 0.5
r = [30*(random.random()+1.0) for i in range(744)]
# power
Pw = m.Param(value=r)
eta = m.Const(0.6)
Pre = m.Var(value=25,lb=20,ub=30)
def f(Pw,Pre):
D = m.if3(Pw-Pre,Pw-Pre,eta*(Pw-Pre))
return D
# constraint
#m.Equation(f(Pw,Pre)>=0)
# objective
m.Minimize(f(Pw,Pre))
# set global option and solve
m.options.IMODE = 2
m.solve()
不需要约束 m.Equation(f(Pw,Pre)>=0)
因为绝对值为正。这个脚本给出了解决方案:
APMonitor Optimization Suite
----------------------------------------------------------------
--------- APM Model Size ------------
Each time step contains
Objects : 0
Constants : 1
Variables : 6
Intermediates: 0
Connections : 0
Equations : 4
Residuals : 4
Number of state variables: 3720
Number of total equations: - 2232
Number of slack variables: - 1488
---------------------------------------
Degrees of freedom : 0
----------------------------------------------
Model Parameter Estimation with APOPT Solver
----------------------------------------------
Iter: 1 I: 0 Tm: 1.95 NLPi: 4 Dpth: 0 Lvs: 0 Obj: 7.00E+03 Gap: 0.00E+00
Successful solution
---------------------------------------------------
Solver : APOPT (v1.0)
Solution time : 1.99689999999828 sec
Objective : 7001.86498359946
Successful solution
---------------------------------------------------
下次提问时不要忘记发布代码,而不是代码图片。这样可以更轻松地提供更具体的建议。
关于python - 最大方程长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72291208/