我正在尝试使用GEKKO解决一个混合整数问题。
p : continuous variable
I : binary indicator
我可以找到一个解决这个问题的例子:
mdl.Equation(p[0][0][0] == 4)
但是,我正在寻找一种基于二进制指标的解决方案:
mdl.Equation(p[0][0][0]* I[0][0][0] == 4)
def testGEKKO():
import numpy as np
from gekko import GEKKO
t = np.linspace(1,6,6)
m = np.linspace(1,3,3)
j = np.linspace(1,2,2)
c = np.array([0.0485, 0.0593, 0.0692, 0.0790, 0.085, 0.0883])
mdl = GEKKO()
p = mdl.Array(mdl.Var, (len(t), len(m), len(j)), lb = 0, ub = 5, integer = False)
I = mdl.Array(mdl.Var, (len(t), len(m), len(j)), lb = 0, ub = 1, integer = True)
mdl.options.SOLVER = 1
for tt in range(len(t)):
for mm in range(len(m)):
for jj in range(len(j)):
mdl.Minimize(c[tt] * p[tt][mm][jj] * I[tt][mm][jj])
mdl.Equation(p[0][0][0]* I[0][0][0] == 4)
mdl.options.SOLVER = 1
mdl.solve(disp=True)
return p, I
试着用不同的方式写这个方程,这样当二进制指示器为1时,p[0][0][0]=4
mdl.Equation((p[0][0][0]-4)* I[0][0][0] == 0)
对于原始表达式,如果二进制指示符为零,0==4
是不可行的。
mdl.Equation(p[0][0][0]* I[0][0][0] == 4)