def seq_pr_constraint_rule(model,i,j,k):
if (k < model.m):
if (i == 1.0):
return model.c[i,j,(k+1.0)] - model.p[j,(k+1.0)]*model.s[i,j] >= model.c[i,j,k] + model.t[j,(k+1.0)] + model.FT[j] + model.VT[j]*model.s[i,j]
else:
return model.c[i,j,(k+1.0)] - model.p[j,(k+1.0)]*model.s[i,j] >= model.c[i,j,k] + model.FT[j] + model.VT[j]*model.s[i,j]
model.seq_ol_rule = Constraint(model.I,model.J,model.K,rule=seq_pr_constraint_rule)
def station_capacity_rule(model,i,j,k):
if (k == 1):
if (i == 1):
return model.c[i,j,k] - model.p[j,k]*model.s[i,j] >= model.t[j,k]
else:
return model.c[i,j,k] - model.p[j,k]*model.s[i,j] == model.c[(i-1.0),j,k]
else:
return model.c[i,j,k] - model.p[j,k]*model.s[i,j] >= model.c[(i-1.0),j,k]
model.capacity = Constraint(model.I,model.J,model.K,rule=station_capacity_rule)
def nointerm_rule1(model,i,j,m,n,k):
if (j<>n):
return model.c[m,n,k] - model.p[n,k]*model.s[m,n] - (model.c[i,j,k] - model.p[j,k]*model.s[i,j]) + model.G*(1.0-model.y[j,n]) >= (model.U[j] - sum(model.s[u,j] for u in model.I if u <= (i-1.0)))*model.p[j,k] + model.r[j,k] + model.t[n,k] + model.p[m,k]*sum(model.s[u,n] for u in model.I if u <= (m-1.0))
model.intermingling1 = Constraint(model.I,model.J,model.I,model.J,model.K,rule=nointerm_rule1)
def nointerm_rule2(model,i,j,m,n,k):
if (j<>n):
return model.c[m,n,k] - model.p[n,k]*model.s[m,n] - (model.c[i,j,k] - model.p[j,k]*model.s[i,j]) + model.G*model.y[j,n] >= (model.U[j] - sum(model.s[u,j] for u in model.I and u <= (i-1.0)))*model.p[j,k] + model.r[j,k] + model.t[n,k] + model.p[m,k]*sum(model.s[u,n] for u in model.I and u <= (m-1.0))
model.intermingling2 = Constraint(model.I,model.J,model.I,model.J,model.K,rule=nointerm_rule2)