python - 最大方程长度

标签 python optimization equation gekko

我读了大部分问题都出现了同样的错误,但大多数问题的回答都是一样的,这与我的问题不同。我正在解决一个非常简单的模型,唯一的问题是我正确管理的条件语句。但是我得到了这个错误,现在我不知道如何解决它! “APM 模型错误:字符串 > 15000 个字符 考虑将直线分解为多个方程

Code

也可能是因为只使用了换行符 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/

相关文章:

python - BeautifulSoup 已安装但在 dev_appserver 运行时无法识别

python - 如何在 Python 中的图像上打印印地语句子(unicode)?

java消除垃圾产生

python - 智能重写 sympy 中的表达式

python - 以编程方式从 jira 和 Fisheye 创建融合内容

python - 防止 print() 语句覆盖 input() 语句中的文本

mysql - 优化 MySQL 表索引/查询

使用 LIMIT、ORDER BY、bool 子句和 IN 子句优化 MySQL 查询

javascript - 使用 HTML 和 javascript 制作在线计算器

java - 用模数求解Java中的方程