Originally posted by: obumin
Hi there, I wrote a periodic vrp model on cplex however;
My code is almost done but as I look at the optimal solution every truck visits the same nodes although their capacities are different, another way to express is cplex multiplies the optimal solution( distance) with the vehicle number regardless of truck capacity. Why would it be? May I kindly ask someone to take a look at my code and tell me what I am doing wrong?
Thank you,
//nodes
int n= ...;
range cities= 0..n;
//suppliers
range suppliers= 1..n;
//set of days
int D= ...;
range periods= 1..D;
//set of vehicles
int K =...;
range vehicle = 1..K;
//Capacity vehicle
float Q[vehicle] =...;
tuple edge
{
int i;
int j;
}
setof(edge) edges = {<i,j> | i,j in cities : i!=j};
float c[edges] =...;
// Weekly demand
float q[suppliers][periods] =...;
//Weekly maximum demand
float qk[suppliers]=...;
// Decision Variables
dvar boolean x[edges][vehicle][1..D];
dvar boolean y[cities][vehicle][1..D];
dvar float+ f[suppliers][vehicle][1..D];
dvar float+ u[1..n];
//dvar boolean z[edges];
//Expression
dexpr float TotalDistance = sum (e in edges,k in vehicle,d in 1..D) c[e]* x[e][k][d];
//Objective Function
minimize TotalDistance;
//Constraints
subject to
{
//Constraint 1
forall (i in cities,k in vehicle,d in 1..D )
sum (j in cities: j!=i) x[<i,j>][k][d]== y[i][k][d];
//Constraint 2
//forall (j in cities, k in vehicle, d in 1..D)
// flow_in:
// sum (i in cities : i!=j)x[<i,j>][k][d]==1;
//forall (i in cities, k in vehicle, d in 1..D)
//flow_out:
// sum (j in cities : j!=i)x[<i,j>][k][d]==1;
//Constraint 2
forall (j in cities : j!=0,k in vehicle, d in 1..D)
flow_in:
sum (i in cities : i!=j)x[<i,j>][k][d]==1;
forall (i in cities : i!=0, k in vehicle, d in 1..D)
flow_out:
sum (j in cities : j!=i)x[<i,j>][k][d]==1;
// Constraint 2
//forall (i in cities: i!=0,j in cities,k in vehicle, d in 1..D)
//sum (i in cities: <i,j> in edges ) x[<i,j>][k][d] - sum(j in cities:<j,i> in edges) x[<j,i>][k][d] == 0;
// Constraint 3 subtour
forall (i in cities : i>1, j in cities : j>1 && j!=i ,k in vehicle, d in 1..D)
u[i]-u[j]+(n-1)* x[<i,j>] [k] [d]<= n-2;
//Constraint 4
forall (k in vehicle, d in 1..D)
sum(i in cities : i!=0)f[i][k][d] <= Q[k] ;
//Constraint 5
forall (i in cities:i!=0, k in vehicle, d in 1..D)
f[i][k][d]<= q[i] [d]*y [i][k][d];
// Constraint 6
forall (i in cities: i!=0,d in 2..D)
{
sum (k in vehicle)f[i][k][1]<= q[i][1];
sum (k in vehicle)f[i][k][d]<= q[i][d]- sum(k in vehicle, a in 1..d-1)f[i][k][a];
}
// Constraint 7
forall (i in cities: i!=0)
sum (k in vehicle,d in 1..D)f[i][k][d] >= qk[i]
;
// addition cons demand
//forall (k in vehicle)
// sum ( d in 1..D, m in suppliers) q[m][d] == qk[n];
//aditional trial
//forall(d in 1..D, k in vehicle)
//sum (i in cities : i!=0) x[<i,0>] [k] [d] == 1 ;
//forall(d in 1..D, k in vehicle)
//sum (j in cities : j!=0) x[<0,j>] [k] [d] == 1 ;
//model subtour
forall (k in vehicle, d in 1..D)
x[<1,3>][k][d]+ x[<3,1>][k][d]+ x[<3,5>][k][d]+ x[<5,3>][k][d]+ x[<1,5>][k][d]+ x[<5,1>][k][d]<= 2 ;
}
#DecisionOptimization#OPLusingCPLEXOptimizer