Decision Optimization

Decision Optimization

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


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  Objective function per week - help writing the code - CPLEX

    Posted 11/04/19 11:11 PM

    Originally posted by: ml130@humboldt.edu


    I have cross ask this question https://stackoverflow.com/questions/58691563/objective-function-per-week-help-writing-the-code-cplex

     

    ( The OPL model and the Lindo model are in the code box )

    I need some help with this problem. My goal is to organize which trucks will be shipped from origin to destination each week (week 1, 2, 3 and 4). In this example, there are a total of 6 trucks, and at least one must be shipped per week. Each shipment has an associated cost, and the goal is to minimize the cost in the first week, then the second, third and fourth. It's a lexicographic goal programming problem. I made the extended model in other software (Lindo) and it worked, but I am having difficulty writing in OPL. Could someone help me please?

    Xijt, i= pickup point (1,2,3,4,5) , j= destination (1,2), t = weeks (1,2,3,4)

     

    
    ! My code in Lindo:
    MIN p4
    subject to
    p1 = 10
    p2 = 10
    p3 = 100
    
    ! Cost 
    
    0 X111 + 0 X211 + 90 X311+  0 X411 + 10 X511 + 0 X121 + 100 X221 + 0 X321 + 50 X421 + 10 X521 -p1 + n1 = 0 ! Week 1 
    0 X112 + 0 X212 + 90 X312+  0 X412 + 10 X512 + 0 X122 + 100 X222 + 0 X322 + 50 X422 + 10 X522 -p2 + n2 = 0 ! Week 2 
    0 X113 + 0 X213 + 90 X313+  0 X413 + 10 X513 + 0 X123 + 100 X223 + 0 X323 + 50 X423 + 10 X523 -p3 + n3 = 0 ! Week 3 
    0 X114 + 0 X214 + 90 X314+  0 X414 + 10 X514 + 0 X124 + 100 X224 + 0 X324 + 50 X424 + 10 X524 -p4 + n4 = 0 ! Week 4 
    
    
    ! Number of trucks
    
    X311 + X312 + X313 + X314  = 1 !In 4 weeks, there is 1 truck from pickup point 3 to destination 1
    X511 + X512 + X513 + X514  = 1
    X221 + X222 + X223 + X224  = 2
    X421 + X422 + X423 + X424  = 1
    X521 + X522 + X523 + X524  = 1 
    
    
    ! Week restriction
    !At least one truck must be used per week
    X311 + X511 + X221 + X421 + X521 >=1
    X312 + X512 + X222 + X422 + X522 >=1
    X313 + X513 + X223 + X423 + X523 >=1
    X314 + X514 + X224 + X424 + X524 >=1
    
    
    END
    
    INT X311 
    INT X312 
    INT X313 
    INT X314 
    
    INT X511
    INT X512 
    INT X513 
    INT X514
    
    INT X221 
    INT X222
    INT X223 
    INT X224 
    
    INT X421 
    INT X422 
    INT X423 
    INT X424
    
    INT X521
    INT X522
    INT X523
    INT X524 
    ---------------------------------------------------
    // CPLEX
    using CP;
    // decision variables
    
    {string} Pickup = {"A","B","C","D","E"};
    {string} Destination = {"D1" , "D2"};
    {string} Weeks = {"W1", "W2", "W3", "W4"};
    
    int Trucks [Pickup][Destination]= [[0,0],[0,2],[1,0],[0,1],[1,1]]; 
    int Cost [Pickup]=[140,100,90,50,10]; 
    
    //Decision Variables
    dvar int  Delivered [Forest][Destination][Weeks]; //not sure if it is right
    
    //Expressions
    dexpr int Week1 = sum (u in Pickup, c in Destination, W1 in Weeks) Trucks[u][c] * Freshness [u] * Delivered[u][c][W1];
    dexpr int Week2 = sum (u in Pickup, c in Destination, W2 in Weeks) Trucks[u][c] * Freshness [u] * Delivered[u][c][W2];
    dexpr int Week3 = sum (u in Pickup, c in Destination, W3 in Weeks) Trucks[u][c] * Freshness [u] * Delivered[u][c][W3];
    dexpr int Week4 = sum (u in Pickup, c in Destination, W4 in Weeks) Trucks[u][c] * Freshness [u] * Delivered[u][c][W4];
    
    
    
    //Objective Function
    minimize staticLex (Week1,Week2,Week3,Week4);
    
    //Constraint
    subject to {
    forall (u in Pickup)
        forall (c in Destination)
            sum (W1 in Weeks)
                Trucks [u][c] >= 1;
    
    forall (u in Forest)
        forall (c in Destination)
            sum (W2 in Weeks)
                Trucks [u][c] >= 1;
    
    forall (u in Pickup)
        forall (c in Destination)
            sum (W3 in Weeks)
                Trucks [u][c] >= 1;
    
    forall (u in Pickup)
        forall (c in Destination)
            sum (W4 in Weeks)
                Trucks [u][c] >= 1;
    
    }
    
    
    execute Output {
        writeln ("Delivered Plan")
            for (var t in Trucks)
                for (var u in Pickup)
                    for (var c in Destination)
                        for (var w in Weeks)
                            if (Delivered [t][u][c][w]>0) {
                            writeln (Delivered [t][u][c][w] + '' + " number of trucks " + '' + t + '' + "  delivered from pickup poit " + '' + u +" to destination " +''+ c + " in the week "+''+ w);
    

     


    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: Objective function per week - help writing the code - CPLEX

    Posted 11/05/19 02:48 AM

    I answered on stack overflow. Please come back in case the answer there is not sufficient.


    #CPLEXOptimizers
    #DecisionOptimization


  • 3.  Re: Objective function per week - help writing the code - CPLEX

    Posted 11/05/19 04:24 AM

    Originally posted by: ml130@humboldt.edu


    Thank you Daniel.   But I am still getting "no value" for the Decision variable (Delivered) and also "no value" for the Decision Expressions (Week 1, Week 2, Week 3 and Week 4 ) . I wonder why.  


    #CPLEXOptimizers
    #DecisionOptimization


  • 4.  Re: Objective function per week - help writing the code - CPLEX

    Posted 11/06/19 04:03 AM

    I updated my answer in stackoverflow. We should continue the discussion there.


    #CPLEXOptimizers
    #DecisionOptimization