Fixed route delivery inventory calculation
回答済みHi all,
For a group project we are trying to model a tram line, however we come across an infeasible model when adding constraints.
The problem arises when we try to add constraint 8 and 9, but we think the problem is in constraint 6 and 7. It is basicly a inventory counter which adds up the fixed value from a table and inventory that was not used in a previous 'time step'.
I have added the code we have used, hopefully someone can help us and thanks in advance!
import numpy as np
import math
from gurobipy import *
import pandas as pd
import gurobipy as gp
import matplotlib.pyplot as plt
#%%
Q = [700,700,700]
c_x = 10
c_y = [100,100,100]
c_t = [150,275,375]
d = [
(5, 8, 14, 20, 25),
(10, 12, 15, 18, 20),
(15, 18, 12, 10, 13),
(20, 14, 20, 15, 10),
(22, 25, 16, 12, 18),
(12, 10, 8, 14, 15),
(10, 5, 10, 8, 12),
(8, 15, 18, 22, 16),
(18, 20, 25, 16, 14),
(5, 3, 8, 12, 10)
]
summed_values = [sum(i) for i in zip(*d)]
sum2 = [sum(j) for j in zip(*d)]
print(sum2)
print(summed_values)
M = 100000
#%%
model = gp.Model(name = 'Tram_parcel')
#%%
I = [0,1,2,3,4,5,6,7,8,9] #Stops
I_min = [0,1,2,3,4,5,6,7,8]
J = [0,1,2,3,4] #Tours
J_min = [1,2,3,4]
T = [0,1,2]
x = {}
for i in I:
for j in J:
x[i,j] = model.addVar(lb=0, vtype= GRB.BINARY, name='X[' + str(i) + str(j) + ']')
y = {}
for j in J:
for t in T:
y[j,t] = model.addVar(lb=0, vtype= GRB.BINARY, name='Y[' + str(j) + ']')
v = {}
for i in I:
for j in J:
for t in T:
v[i, j, t] = model.addVar(lb=0, vtype=GRB.INTEGER, name='X[' + str(i) + str(j) + ']')
l = {}
for i in I:
for j in J:
for t in T:
l[i,j,t] = model.addVar(lb=0, vtype = GRB.CONTINUOUS, name ='L[' + str(i) + str(j) + ']')
e = {}
for i in I:
for j in J:
e[i,j] = model.addVar(lb=0, vtype = GRB.CONTINUOUS, name = 'L[' + str(i) + str(j) + ']')
u = {}
for t in T:
u[t] = model.addVar(lb=0, vtype = GRB.CONTINUOUS, name = 'U[' + str(i) + str(j) + ']')
model.update()
#%%
obj_expr = (
quicksum(x[i, j] * c_x for i in I for j in J) +
quicksum(y[j, t]*c_y[t] for j in J for t in T) +
quicksum(y[j,t] * c_t[t] for t in T))
model.setObjective(obj_expr, sense=GRB.MINIMIZE)
model.update()
#%%
con0 = {}
for i in I:
con0[i,t] = model.addConstr(
quicksum(v[i, j,t] * x[i, j] for j in J for t in T) == quicksum(d[i][j] for j in J))
con1 = {}
for j in J:
for t in T:
con1[j] = model.addConstr(
quicksum(v[i, j,t] * x[i, j] for i in I) <= Q[t] * y[j, t] )
con2 = {}
for i in I_min:
for j in J:
for t in T:
con2[i,j,t] = model.addConstr(l[i+1,j,t] == l[i,j,t] - v[i,j,t]*x[i,j])
con3 = {}
for i in I:
con3 = model.addConstr(quicksum(x[i,j] for j in J) <= 1)
con4 = {}
for j in J:
con4 = model.addConstr(quicksum(y[j,t] for t in T) <= 1)
con5 ={}
for i in I:
for j in J:
for t in T:
con5 = model.addConstr(v[i,j,t] <= M*x[i,j])
con6 = {}
for i in I:
con6 = model.addConstr(e[i,0] == d[i][0] - quicksum(v[i,0,t] for t in T))
con7 = {}
for i in I:
for j in J_min:
con7 = model.addConstr(e[i,j] == d[i][j] + e[i,j-1]- quicksum(v[i,j-1,t] for t in T))
con8 = {}
for i in I:
for j in J_min:
con8[i, j] = model.addConstr(quicksum(v[i, j, t] for t in T) <= e[i, j-1] + d[i][j])
con9 = {}
for i in I:
con9[i, 0] = model.addConstr(quicksum(v[i, 0, t] for t in T) <= d[i][0])
-
Hi Pim,
Please see this comment from my colleague on how to troubleshoot.
A minor remark to your model. I think you accidentally used the same names for some variables, for example, for x and v. A bit easier is it to rewrite
x = {} for i in I: for j in J: x[i,j] = model.addVar(lb=0, vtype= GRB.BINARY, name='X[' + str(i) + str(j) + ']')as
x = model.addVars(I,J,lb=0, vtype= GRB.BINARY, name='x')
which gives you the appropriate names and you can use x[i,j] as you did when defining constraints.
Something similar can be done for the constraints as well.Best regards,
Marika0
サインインしてコメントを残してください。
コメント
1件のコメント