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

