Decision Optimization

Decision Optimization

Delivers prescriptive analytics capabilities and decision intelligence to improve decision-making.

 View Only

Vehicle Routing Problem capacity problem

  • 1.  Vehicle Routing Problem capacity problem

    Posted Tue April 03, 2018 08:04 PM

    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