GEKKO错误:@Error:模型不足模型必须至少包含1个变量和1个方程STOPPING



我目前正在为一个大学项目研究一个模型混合整数非线性规划(Bin-Backing问题(,我正试图使用GEKKO来解决它。

任何建议都将不胜感激。

# ___Initialize model___
m = GEKKO()
# ___Global options_____
m.options.SOLVER = 1  
ni = 4550
nj =6
nk= 35
# variables:
x = m.Array(m.Var, (ni,nk,nj), lb=0, integer=True) #integer variable                                            
y = m.Array(m.Var, (nj,nk), lb=0, ub=1, integer=True) #binary variable 
# Parameters:
w1=m.Const(w)
h1=m.Const(h)
Psum_total=m.Const(value=sum_total) 
P = m.Array(m.Param,ni)
for i in range(ni):
P[i].value = PPP[i]
V = m.Array(m.Param,ni)
for i in range(ni):
V[i].value=VV[i]
d= m.Array(m.Param,ni)
for i in range(ni):
d[i] = 50
Psum_vetor=m.Array(m.Param,nj)
for j in range(nj):
Psum_vetor[j].value=sumP[j]
#Intermediate
Lkj = [[m.Intermediate(m.sum([P[i]*x[i][k][j] for i in range(ni)])) for j in range(nj)] for k in range(nk)]
xyi = [m.Intermediate(m.sum([ x[i][k][j]*y[j][k] for k in range(nk) for j in range(nj)])) for i in range(ni)]
z= m.Intermediate(m.sum([xyi[i]*V[i] for i in range(ni)]))  
s = Psum_total
for k in range(nk):
for j in range(nj):
s += Lkj[k][j]
#  Equations
m.Equation([xyi[i] <= d[i] for i in range(ni)])          
m.Equation([sum([ Lkj[k][j]*y[j][k]   for j in range(nj)])  <= h1*w1 for k in range(nk)])
m.Equation([sum([Lkj[k][j]*y[j][k] for k in range(nk)]) ==  s/7 - P[j] for j in range(nj)]) 
m.Obj(-z)
m.options.IMODE = 3
m.solve()
print(x)

输出:

apm 35.186.172.229_gk_model1 <br><pre> ----------------------------------------------------------------
APMonitor, Version 1.0.1
APMonitor Optimization Suite
----------------------------------------------------------------


--------- APM Model Size ------------
Each time step contains
Objects      :            0
Constants    :            0
Variables    :            0
Intermediates:            0
Connections  :            0
Equations    :            0
Residuals    :            0


@error: Insufficient Model
Model must contain at least 1 variable and 1 equation
STOPPING...
---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-17-9adce22534dc> in <module>
101 
102 # Solve minimization
--> 103 m.solve()
104 
105 print(x)
/usr/local/lib/python3.7/dist-packages/gekko/gekko.py in 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)
2186 
2187             #load results
Exception:  @error: Insufficient Model
Model must contain at least 1 variable and 1 equation
STOPPING...

根据输出,它似乎没有识别变量或方程。

提前感谢您的帮助。

这里有一个成功解决问题的版本:

# ___Initialize model___
from gekko import GEKKO
m = GEKKO()
# ___Global options_____
m.options.SOLVER = 1  
ni = 4
nj =6
nk= 3
# variables:
x = m.Array(m.Var, (ni,nk,nj), lb=0, integer=True) #integer variable                                            
y = m.Array(m.Var, (nj,nk), lb=0, ub=1, integer=True) #binary variable 
# Parameters:
w=1; h=1; sum_total=1
PPP=[1]*nj; VV = [1]*ni; sumP = [1]*nj
w1=m.Const(w)
h1=m.Const(h)
Psum_total=m.Const(value=sum_total) 
P = m.Array(m.Param,nj)
for i in range(nj):
P[i].value = PPP[i]
V = m.Array(m.Param,ni)
for i in range(ni):
V[i].value=VV[i]
d= m.Array(m.Param,ni)
for i in range(ni):
d[i] = 50
Psum_vetor=m.Array(m.Param,nj)
for j in range(nj):
Psum_vetor[j].value=sumP[j]
#Intermediate
Lkj = [[m.Intermediate(m.sum([P[i]*x[i][k][j] for i in range(ni)])) for j in range(nj)] for k in range(nk)]
xyi = [m.Intermediate(m.sum([ x[i][k][j]*y[j][k] for k in range(nk) for j in range(nj)])) for i in range(ni)]
z= m.Intermediate(m.sum([xyi[i]*V[i] for i in range(ni)]))  
s = Psum_total
for k in range(nk):
for j in range(nj):
s += Lkj[k][j]
#  Equations
m.Equation([xyi[i] <= d[i] for i in range(ni)])          
m.Equation([sum([ Lkj[k][j]*y[j][k]   for j in range(nj)])  <= h1*w1 for k in range(nk)])
m.Equation([sum([Lkj[k][j]*y[j][k] for k in range(nk)]) ==  s/7 - P[j] for j in range(nj)]) 
m.Maximize(z)
m.options.IMODE = 3
m.solve()
print(x)

带解决方案:

Successful solution

---------------------------------------------------
Solver         :  APOPT (v1.0)
Solution time  :    10.8742999999959      sec
Objective      :  -1.338429367332205E-014
Successful solution
---------------------------------------------------

[[[[0.0] [0.0] [0.0] [0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0] [0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0] [0.0] [0.0] [0.0]]]
[[[0.0] [0.0] [0.0] [0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0] [0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0] [0.0] [0.0] [0.0]]]
[[[0.0] [0.0] [0.0] [0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0] [0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0] [0.0] [0.0] [0.0]]]
[[[0.0] [0.0] [0.0] [0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0] [6.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0] [0.0] [0.0] [0.0]]]]

4550x6x35+6x35=955710二进制变量的原始问题大小可能需要一段时间才能解决。可以调整APOPT解算器选项以提高解算速度。

如果示例代码有错误,请尝试:

pip install gekko --upgrade

将gekko版本升级到最新发行版。

我只是发现这是一个索引错误。谢谢@Hedengren

最新更新