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

GEKKO添加等式约束时出现Solution Not Found错误的原因咨询

GEKKO求解优化问题出现Solution Not Found错误的原因分析

问题场景

使用GEKKO求解优化问题时抛出Exception: @error: Solution Not Found错误,原始代码如下:

from gekko import GEKKO
import pandas as pd
import numpy as np

m = GEKKO(remote=True)


alpha=[6.97, 4.97, 6.55]
beta = [-0.04, -0.11, -0.1]
MP = [2707.2, 2213.3, 1904.1]
Plower = [1700, 1400, 1100]
Pupper = [5000, 5000, 5000]

h= 250 ; b= 150 ; c= 100
T= len(alpha)

D = m.Array(m.Var, T ,lb=-0, integer=False)
P = m.Array(m.Var, T ,lb=-0,  integer=False)


m.Maximize( sum(D[t]*(P[t]-MP[t]) for t in range (T)))


m.Equations(D[t]==alpha[t]+beta[t]*P[t] for t in range (T))


#bound
m.Equations(P[t]>=  Plower[t]for t in range (T))
m.Equations(P[t]<= Pupper[t] for t in range (T))
m.options.SOLVER=1
m.solve(disp=True) # solve on public server

将目标函数改写为m.Maximize( sum((alpha[t]+beta[t]*P[t])*(P[t]-MP[t]) for t in range (T)))并移除等式约束后,求解成功。

错误原因分析

  • 等式约束D[t]==alpha[t]+beta[t]*P[t]本身无逻辑错误,它只是建立了决策变量D和P之间的线性关联。
  • 求解失败的核心是模型的数值求解特性差异:
    1. 原始模型中,目标函数通过D间接引入P的非线性,结合等式约束后,数学上和改写后的模型等价,但GEKKO使用的APOPT求解器(SOLVER=1)在处理这种隐式非线性时,可能因变量初始化、梯度计算的数值精度问题,导致迭代过程中无法找到可行解或出现数值发散。
    2. 改写后的模型直接将目标函数展开为P的显式二次函数,减少了决策变量数量(移除了D),求解器可以更高效地计算梯度和Hessian矩阵,收敛难度大幅降低,因此能成功求解。
  • 补充说明:原始代码中D和P的下界设为lb=-0(等价于lb=0),结合beta为负的情况,alpha[t]+beta[t]*P[t] >=0在P的上下界范围内是有解的(改写后求解成功可验证),因此这不是导致求解失败的原因。

内容的提问来源于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.20 20:57:09