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

Python Gekko优化模型报错求助:等式定义异常问题排查

Gekko优化模型「Equation without an equality (=) or inequality (<,>)」错误排查求助

我正在使用Python的Gekko库构建包含ESS(储能系统)、EV(电动汽车)的优化模型,运行时触发「Equation without an equality (=) or inequality (<,>)」错误。以下为模型代码、报错信息,同时明确目标函数与约束条件的定义,请求协助排查问题:

模型代码

from gekko import GEKKO
import numpy as np              
import matplotlib.pyplot as plt 

m = GEKKO()         
m.options.SOLVER = 1 
m.options.IMODE = 3

Num_ESS = 1
Num_EV  = 1
TOU     = [76.3,76.3,76.3,76.3,76.3,76.3,76.3,76.3,164.0,251.2,251.2,164.0,251.2,251.2,251.2,251.2,164.0,164.0,164.0,164.0,164.0,164.0,164.0,76.3]
t       = len(TOU)


#setting 
load     = [510,530,516,510,515,544,646,686,741,734,748,760,754,700,686,720,714,761,727,714,618,584,578,544]

c     = m.Array(m.Var, (t,Num_EV))      
EV_s  = m.Array(m.Var, (t,Num_EV))      

for tt in range(t,Num_EV):
    c[tt,0].lower = 0; EV_s[tt,0].lower = 20
    c[tt,0].upper = 7; EV_s[tt,0].upper = 80


g     = m.Array(m.Var, (t,Num_ESS))     
ESS_s = m.Array(m.Var, (t,Num_ESS))    
ESS_c = m.Array(m.Var, (t,Num_ESS))     
ESS_d = m.Array(m.Var, (t,Num_ESS))    

for tt in range(t,Num_ESS):
    ESS_s[tt,0].lower =   0; ESS_c[tt,0].lower =  0; ESS_d[tt,0].lower =  0
    ESS_s[tt,0].upper = 300; ESS_c[tt,0].upper = 50; ESS_d[tt,0].upper = 50


#constraints
ESS_s[0,0] = 300

eq_ESS = np.zeros((t,1))
eq_ESS = list(eq_ESS)

for tt in range(1, t):
    for e in range(1,Num_ESS):
        eq_ESS[tt] = ESS_s[tt-1,0] + (ESS_c[tt,0]*0.98 - ESS_d[tt,0]/0.95) == eq_ESS[tt,0]

m.Equation(eq_ESS)

eq_total = np.zeros((t,1))
eq_total = list(eq_total)

for tt in range(1, t):
    for e in range(1,Num_ESS):
        eq_total[tt] = (g[tt,0] + ESS_d[tt,0]) >= (load[tt] + ESS_c[tt,0])

m.Equation(eq_total)


#Object Function
F = np.zeros((t*Num_ESS))
F = F.tolist()

for tt in range(1,t):
    for v in range(1,Num_ESS):
        F = m.Obj((load[tt]-g[tt])*TOU[tt])

m.solve(disp=True)

报错信息

apm 211.220.231.231_gk_model3 <br><pre> ----------------------------------------------------------------
 APMonitor, Version 1.0.1
 APMonitor Optimization Suite
 ----------------------------------------------------------------


 Warning: there is insufficient data in CSV file 211.220.231.231_gk_model3.csv
 @error: Equation Definition
 Equation without an equality (=) or inequality (<,>)
 [0.]
 STOPPING...
---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
Cell In[16], line 66
     63     for v in range(1,Num_ESS):
     64         F = m.Obj((load[tt]-g[tt])*TOU[tt])
---&gt; 66 m.solve(disp=True)

File c:\Users\6408-01\AppData\Local\Programs\Python\Python310\lib\site-packages\gekko\gekko.py:2185, in GEKKO.solve(self, disp, debug, GUI, **kwargs)
   2183 #print APM error message and die
   2184 if (debug >= 1) and ('@error' in response):
-&gt; 2185     raise Exception(response)
   2187 #load results
   2188 def byte2str(byte):

Exception:  @error: Equation Definition
 Equation without an equality (=) or inequality (<,>)
 [0.]
 STOPPING...

目标函数与约束条件说明

  • 目标函数:$\min(\sum_{tt} TOU[tt] \times (load[tt]-g[tt,v]))$,即最小化(负荷量-ESS发电量)与分时电价的乘积之和
  • 约束条件1:$ESS_s[tt,0] = ESS_s[tt-1,0] + (ESS_c[tt,0] \times 0.98 - ESS_d[tt,0]/0.90)$,即ESS荷电状态(SOC)的更新规则
  • 约束条件2:$c[tt,0] + ESS_d[tt,0] \geq load[tt] + ESS_c[tt,0]$,即EV供电量与ESS放电量之和需大于等于负荷量与ESS充电量之和

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:50:25