Python—使用Python在Gurobi中实现。关键错误

Python—使用Python在Gurobi中实现。关键错误,python,gurobi,Python,Gurobi,procTime=[40,28,18,38] 截止日期=[38,23,17,25] nJobs=len(procTime) T=总和(procTime) x={} 对于范围内的j(nJobs): 对于范围内的t(nJobs): x[j,t]=m.addVar(obj=1,vtype=GRB.BINARY,name='x%d%d'(j,t)) c={} 对于范围内的j(nJobs): c[j,t]=m.addVar(obj=1,vtype=GRB.INTEGER,name='c%d%d'(j,t)

procTime=[40,28,18,38]
截止日期=[38,23,17,25]
nJobs=len(procTime)
T=总和(procTime)
x={}
对于范围内的j(nJobs):
对于范围内的t(nJobs):
x[j,t]=m.addVar(obj=1,vtype=GRB.BINARY,name='x%d%d'(j,t))
c={}
对于范围内的j(nJobs):
c[j,t]=m.addVar(obj=1,vtype=GRB.INTEGER,name='c%d%d'(j,t))
m、 更新()
对于范围内的j(nJobs):
m、 addConstr(范围(t-procTime[j]+1)]内的t的quicksum([x[j,t])==1,'序列%d'(j))
对于范围内的t(t+1):

m、 addConstr(quicksum([quicksum([x[j,s]表示范围内的j(nJobs))表示范围内的s(max(t-procTime[j]+1),min(t-procTime[j]+2)))您对quicksum([x[j,t]表示范围内的t(t-procTime[j]+1])的范围有问题。因为对于x[j,t],j在[0,3],t也在[0,3]或t=124中,那么t-procTime[j]+1在[124-1124-3+1]中.

此代码中有多个错误。如果使用7.0版中的语法
Model.addVars()
Model.addConstrs()
重写此代码,将更容易纠正错误。
procTime = [40,28,18,38]
dueDate = [38,23,17,25]
nJobs = len(procTime)
T = sum(procTime)

x = {}
for j in range(nJobs):
    for t in range(nJobs):
        x[j,t] = m.addVar(obj=1,vtype=GRB.BINARY,name='x%d%d' % (j,t))

c = {}
for j in range(nJobs):
    c[j,t] = m.addVar(obj=1,vtype=GRB.INTEGER,name='c%d%d' % (j,t)) 

m.update()  

for j in range(nJobs):
    m.addConstr(quicksum([x[j,t] for t in range(T-procTime[j]+1)]) == 1, 'seq%d' % (j))

for t in range(T+1):
    m.addConstr(quicksum([quicksum([x[j,s] for j in range(nJobs) for s in range(max(t-procTime[j]+1),min(T-procTime[j]+2))])]) <= 1, 'time%d' % t)

for j in range(nJobs):
    for t in range(T+1):
        m.addConstr(t+procTime[j]-1-dueDate[j] <= c[j,t], 'c%d' % (j,t))

m.optimize()