Ohh, my bad, sorry. Wrong Version. That's the right one:
from gurobipy import *
import win32com.client
import math
import mysql.connector
import mysql
from collections import defaultdict
def solve(JT, fp, mdk, f , v , n , tp , tc , tcyca , oee , pm , r , t , tm, a, fr, u, cbmin, wol, b, d,c, lok):
model.setParam(GRB.Param.PoolSearchMode, 2)
model.setParam(GRB.Param.PoolSolutions, 5)
w = {}
for j in JT:
for k in mdk:
for l in wol
for h in lok:
w[j,k,h,l] = model.addVar(vtype = GRB.BINARY)
x = {}
for i in fp:
for j in JT:
for l in wol:
for h in lok:
x[i,j,l,h] = model.addVar(vtype = GRB.BINARY)
y = {}
for j in JT:
y[j] = model.addVar(vtype = GRB.INTEGER, lb=0, ub=99999)
alpha = {}
for j in JT:
for l in wol:
alpha[j,l] = model.addVar(vtype = GRB.INTEGER, lb=0, ub=99999)
beta = {}
for j in JT:
for l in wol:
for h in lok:
beta[j,l,h] = model.addVar(vtype = GRB.INTEGER, lb=0, ub=99999)
z = {}
for j in JT:
z[j] = model.addVar(vtype = GRB.INTEGER, lb=0, ub=99999)
nmin={}
result = defaultdict(list)
for (i,j),m in n.items():
result[i].append(m)
for i in fp:
nmin[i] = min(result[i])
obj = pm*((quicksum((z[j] * f[j] + (y[j]-z[j])*fr[j]) for j in JT) + \
quicksum(quicksum(v[j] * x[i,j,l,h] for i in fp for j in JT for l in wol for h in lok) *a/((1+r)**s) for s in t))/cbmin) + \
((1-pm)/len(fp))*(quicksum((n[i,j]*x[i,j,l,h]/nmin[i])for i in fp for j in JT for l in wol for h in lok))
model.setObjective(obj, GRB.MINIMIZE)
model.update()
for j in JT:
for l in wol:
for h in lok:
model.addConstr(beta[j,l,h] * tcyca[j,l,h] * oee[j] >= quicksum((x[i,j,l,h]*tp[j]) for i in fp) +\
((quicksum(x[i,j,l,h] for i in fp)-1)*tm[j]) + quicksum(w[j,k,l,h] * tc[j] for k in mdk))
for j in JT:
model.addConstr(y[j]>= quicksum(alpha[j,l] for l in wol))
for i in fp:
for j in JT:
for k in mdk:
for l in wol:
for h in lok:
model.addConstr(x[i,j,l,h]*u[i,k]<= w[j,k,l,h])
for i in fp:
for l in wol:
for h in lok:
model.addConstr(quicksum(x[i,j,l,h] for j in JT) == b[i,l]*c[i,h])
for j in JT:
model.addConstr(z[j] >= ((y[j]-1)/6)+0.001)
for i in fp:
for j in JT:
for l in wol:
model.addConstr(x[i,j,l,h] <= d[i,j])
for j in JT:
for l in wol:
for h in lok:
model.addConstr(alpha[j,l]>=beta[j,l,h])
model.optimize()
nSolutions = model.SolCount
if model.Status == GRB.OPTIMAL:
print('Objective: %f' % (model.PoolObjVal))
print nSolutions
for xyz in range(0, nSolutions):