You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GEKKO优化模型报错无效不等式,请求排查代码运行问题

GEKKO优化模型「无效不等式」错误解决方案

核心错误原因

  • 代码中m.Equation(D[i]==beta[i]*P[i]+alpha[i] for i in range (t))传入了生成器表达式,但GEKKO的m.Equation()仅支持单个等式/不等式,无法解析生成器对象,这是触发报错的直接原因。
  • AX是长度为1的GEKKO变量数组,直接用AX参与运算会导致对象类型不匹配,需通过索引AX[0]访问变量。
  • 变量定义里的lb=-0可简化为lb=0,逻辑更清晰。

修正步骤

  • 将生成器形式的等式约束,改为循环逐个添加,或使用GEKKO提供的m.Equations()(复数形式)方法直接接收生成器。
  • 所有涉及AX的运算替换为AX[0],确保访问单个GEKKO变量而非数组对象。

修正后代码

from gekko import GEKKO
m = GEKKO(remote=True)

alpha = [20, 20, 20]
beta = [-0.2, -0.2, -0.2]
h = 0 ; b = 0 ; c = 0
# planning horizon 
t = len(alpha)
D = m.Array(m.Var, t, lb=0, integer=False)
P = m.Array(m.Var, t, lb=0, integer=False)
AX = m.Array(m.Var, 1, lb=0, integer=False)

# 修正AX的引用为AX[0]
m.Maximize(sum(D[i]*P[i] for i in range(t)) - AX[0])

m.Equation(h*(c - sum(D[i] for i in range(t))) <= AX[0])
m.Equation(b*(sum(D[i] for i in range(t)) - c) <= AX[0])

# 方法1:循环添加每个等式约束(二选一即可)
for i in range(t):
    m.Equation(D[i] == beta[i]*P[i] + alpha[i])

# 方法2:使用m.Equations()接收生成器
# m.Equations(D[i] == beta[i]*P[i] + alpha[i] for i in range(t))

m.solve(disp=True) # solve on public server

额外说明

当前h、b、c均为0,前两个约束会简化为0 <= AX[0],而AX[0]的下限已设为0,这两个约束实际冗余,可根据需求调整参数值。

内容的提问来源于stack exchange,提问作者Berk Karasu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:54:55