Decision Optimization

Decision Optimization

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


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  parameter defination with decision variable

    Posted 06/16/20 12:42 PM
    Hi all,

    I'd like to introduce a penalty into my objective, but the pennalty is a piecewise function, whose value depends on a decision variable. How to deal with it?

    tuple Order{   
    key int no;
    int SupDem[nodes];
    int volume;
    int schedule_release_time; }

    {Order} orders =...;

    float penalty_slope;

    dvar int+ release_time[orders];

    execute INIT_penalty_slope
    {for (var k in orders)
          {if (k.schedule_release_time - release_time[k]>=0)
                penalty_slope = -1000;
          else
                 penalty_slope = 500;}


    dexpr float penalty = sum(k in orders,j in nodes:k.SupDem[j]<0) k.volume*penalty_slope*(release_time[k] - k.schedule_release_time);



    ------------------------------
    Ying Qi
    ------------------------------

    #DecisionOptimization


  • 2.  RE: parameter defination with decision variable

    Posted 06/17/20 02:28 AM
    hi

    you could mix arrays of piecewise and logical constraints.

    let me give you an example out of making decision optimization simple:

        int nbKids=300;
        float costBus40=500;
        float costBus30=400;
    
        // If we take more than 4 buses for a given size, 20% cheaper for additional buses
         
        dvar int+ nbBus40;
        dvar int+ nbBus30;
        
        range pricingRule=1..2;
    
        pwlFunction pricePerQuantity[i in pricingRule]=
        piecewise{1->4;(i==1)?0.8:0.9};
        
    
        assert forall(r in pricingRule,k in 1..4 ) pricePerQuantity[r](k)==k;
        assert forall(k in 5..10) as:abs(pricePerQuantity[1](k)-4-(k-4)*0.8)<=0.00001;
        assert forall(k in 5..10) as2:abs(pricePerQuantity[2](k)-4-(k-4)*0.9)<=0.00001;
        
       
        
        dvar int ourPricingRule in pricingRule;
        
        dvar float objective;
         
        minimize objective;
         
        subject to
        {
         40*nbBus40+nbBus30*30>=nbKids;
         
         forall(pr in pricingRule)
           (pr==ourPricingRule) => 
           (objective==costBus40*pricePerQuantity[pr](nbBus40)  +pricePerQuantity[pr](nbBus30)*costBus30);
         
           
       }     ​


    ------------------------------
    ALEX FLEISCHER
    ------------------------------



  • 3.  RE: parameter defination with decision variable

    Posted 06/20/20 10:20 AM
    Hi Alex,

    Thanks for your help. I have another question. Why you use assert to make sure we get correct price?  Do it make some error sometimes?

    ------------------------------
    Ying Qi
    ------------------------------



  • 4.  RE: parameter defination with decision variable

    Posted 06/21/20 06:06 AM
    Hi

    always good to write assert to make the code even better and easier to read 

    regards

    ------------------------------
    ALEX FLEISCHER
    ------------------------------



  • 5.  RE: parameter defination with decision variable

    Posted 06/21/20 07:58 AM
    Hi Alex,
         Thanks for your help.

    ------------------------------
    Ying Qi
    ------------------------------