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
相关产品推荐
相关产品推荐

