Как математическая формулировка CVRP в GUROBI с использованием Python с возможными решениями

#python #optimization #modeling #gurobi

#питон #оптимизация #моделирование #гуроби

Вопрос:

Я пытаюсь решить проблему CVRP, используя приведенную ниже формулировку.

Состав CVRP, который я использовал

Я написал математическую модель, как показано ниже, но я получаю невыполнимые решения. Я не могу найти, где я ошибся. Я был бы очень рад, если бы вы могли помочь.

 m=2
Q=1500
V = [i for i in range(1, n 1)]
N = [0]   V
K = [k for k in range(1,m 1)]
A = [(i, j) for i in N for j in N if i != j]
c = {(i, j): np.hypot(x_c[i]-x_c[j], y_c[i]-y_c[j]) for i, j in A}
d = {i: rnd.randint(1,5) for i in N}

from gurobipy import Model, GRB, quicksum

mdl = Model('CVRP')

x = mdl.addVars(A,K, vtype=GRB.BINARY)
Y = mdl.addVars(N,K, vtype=GRB.CONTINUOUS)
L = mdl.addVar()

mdl.modelSense = GRB.MINIMIZE
mdl.setObjective(L)

mdl.addConstrs(quicksum(x[i, j,k] for j in N if i!=j ) <= 1 for i in N if i == 0  for k in K )

mdl.addConstrs(quicksum(x[i, j,k] for j in N for k in K if j!=i ) == 1 for i in V  )

mdl.addConstrs(quicksum(x[i, j,k] for j in N if j!=i) == quicksum(x[j, i,k] for j in N if j!=i ) for i in V for k in K )

mdl.addConstrs(quicksum(x[i, j,k]*d[i] for i,j in A) == Y[0,k] for k in K)

mdl.addConstrs( Y[j,k] <= Y[i,k]- d[j]   Q*(1 - x[i,j,k]) for i in N for j in N for k in K if j!=i)

mdl.addConstrs(Y[0,k]<= Q for k in K)

mdl.addConstrs(quicksum(x[i, j,k]*c[i,j] for i,j in A) == L for k in K)

mdl.Params.MIPGap = 0.05
mdl.Params.TimeLimit = 300000
mdl.optimize()
 

Комментарии:

1. Это лучше подходит для or.stackexchange.com .