Decision Optimization

Decision Optimization

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


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
Expand all | Collapse all

How to insert multiple conditions in the model

  • 1.  How to insert multiple conditions in the model

    Posted 01/24/18 09:32 AM

    Originally posted by: Rym


    Hi

     

    In model,

     

    the objective function need a lot of computation and I can't find a way to include that in my model

    dvar boolean lumda[V][P];
    dexpr int tabvmperpm[l in indexes]=sum( i in V:vms[i]==l.nvm) lumda[i][l.npm];
    dexpr int CPUR[j in P]=  ((tabvmperpm[VS[j]]*3)+(tabvmperpm[VM[j]]*4)+(tabvmperpm[VL[j]]*5)+(tabvmperpm[VXL[j]]*6));
    dexpr float CPURS[j in P]=CPUR[j]/cput[j];

    dexpr float powercpu[j in P];

    dexpr float  OP = sum( j in P) powercpu[j];

     

    minimize OP;

     

     

    To compute the powercpu[j], we should comoute the following code which i can't include it in the model

     

     

    for (i=1;i<=p;i++)
      {
    if( CPUR[i]==0)
    {
    powercpu[i]=0;      
    }
      //writeln("cpui=",cput[i]);  

           else
           { CPUR[i]=CPUR[i]/cput[i];
            
           //writeln("execute=",CPUR[i]);
         if(cput[i]==32)  
           {
            if(0<CPUR[i]<=0.1)
            {
            OUTC=715.2;
            writeln("OUTC=",OUTC);
            }                
            else if(0.1<CPUR[i]<=0.2)
            {
            OUTC=740.8;
            writeln("OUTC=",OUTC);
            } 
            else 
              if(0.2<CPUR[i]<=0.3)
            {
            OUTC=768;
             writeln("OUTC=",OUTC);
            } 
            else
              if(0.3<CPUR[i]<=0.4)
            {
            OUTC=796;
             writeln("OUTC=",OUTC);
            }
            else
              if(0.4<CPUR[i]<=0.5)
            {
            OUTC=816;
             writeln("OUTC=",OUTC);
            } 
            else
              if(0.5<CPUR[i]<=0.6)
            {
            OUTC=848;
             writeln("OUTC=",OUTC);
            }  
            else
              if(0.6<CPUR[i]<=0.7)
            {
            OUTC=864;
             writeln("OUTC=",OUTC);
            } 
            else
              if(0.7<CPUR[i]<=0.8)
            {
            OUTC=896;
             writeln("OUTC=",OUTC);
            } 
            else
              if(0.8<CPUR[i]<=0.9)
            {
            OUTC=912;
             writeln("OUTC=",OUTC);
            }
            else
              if(0.9<CPUR[i]<=1)
            {
            OUTC=936;
             writeln("OUTC=",OUTC);
            }  
          
        }
        
        else
              
           if(cput[i]==64)  
           {
            if(0<CPUR[i]<=0.1)
            {
            OUTC=1430.4;
             writeln("OUTC=",OUTC);
            }                
            else   if(0.1<CPUR[i]<=0.2)
            {
            OUTC=1481.6;
             writeln("OUTC=",OUTC);
            } 
            else
              if(0.2<CPUR[i]<=0.3)
            {
            OUTC=1536;
             writeln("OUTC=",OUTC);
            } 
            else
              if(0.3<CPUR[i]<=0.4)
            {
            OUTC=1592;
             writeln("OUTC=",OUTC);
            }
            else
              if(0.4<CPUR[i]<=0.5)
            {
            OUTC=1632;
             writeln("OUTC=",OUTC);
            } 
            else
              if(0.5<CPUR[i]<=0.6)
            {
            OUTC=1696;
             writeln("OUTC=",OUTC);
            }  
            else
              if(0.6<CPUR[i]<=0.7)
            {
            OUTC=1728;
             writeln("OUTC=",OUTC);
            } 
            else
              if(0.7<CPUR[i]<=0.8)
            {
            OUTC=1792;
             writeln("OUTC=",OUTC);
            } 
            else
              if(0.8<CPUR[i]<=0.9)
            {
            OUTC=1824;
             writeln("OUTC=",OUTC);
            }
            else
              if(0.9<CPUR[i]<=1)
            {
            OUTC=1872;
            writeln("OUTC=",OUTC);
            }  
          
        } 
          else if(cput[i]==96)  
           {
            if(0<CPUR[i]<=0.1)
            {
            OUTC=2145.6;
             writeln("OUTC=",OUTC);
            }                
            else   if(0.1<CPUR[i]<=0.2)
            {
            OUTC=2222.4;
             writeln("OUTC=",OUTC);
            } 
            else
              if(0.2<CPUR[i]<=0.3)
            {
            OUTC=2304;
             writeln("OUTC=",OUTC);
            } 
            else
              if(0.3<CPUR[i]<=0.4)
            {
            OUTC=2388;
             writeln("OUTC=",OUTC);
            }
            else
              if(0.4<CPUR[i]<=0.5)
            {
            OUTC=2448;
             writeln("OUTC=",OUTC);
            } 
            else
              if(0.5<CPUR[i]<=0.6)
            {
            OUTC=2544;
           writeln("OUTC=",OUTC);
            }  
            else
              if(0.6<CPUR[i]<=0.7)
            {
            OUTC=2592;
            writeln("OUTC=",OUTC);
            } 
            else
              if(0.7<CPUR[i]<=0.8)
            {
            OUTC=2688;
            writeln("OUTC=",OUTC);
            } 
            else
              if(0.8<CPUR[i]<=0.9)
            {
            OUTC=2736;
            writeln("OUTC=",OUTC);
            }
            else
              if(0.9<CPUR[i]<=1)
            {
            OUTC=2808;
            writeln("OUTC=",OUTC);
            }  
            
           
        }
      
              powercpu[i] =  (IDLEPC[i] + (OUTC *CPUR[i]));         }          
     

          } 

     

     

     


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 2.  Re: How to insert multiple conditions in the model

    Posted 01/24/18 09:42 AM

    Hi,

    why don t you use a stepwise function ?

    regards


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 3.  Re: How to insert multiple conditions in the model

    Posted 01/24/18 09:46 AM

    Originally posted by: Rym


    Hi,

     

     

    Yes i thought about that, but I didn't know how to write it  Could you help me on that.

     

     


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 4.  Re: How to insert multiple conditions in the model

    Posted 01/24/18 09:48 AM

    Hi

    stepFunction f=stepwise {0.2->1.5; 2.3};

     

    execute
    {
    writeln(f(0));
    writeln(f(1.4));
    writeln(f(2));
    }

     

    gives

     

    0.2
    0.2
    2.3

     

    regards


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 5.  Re: How to insert multiple conditions in the model

    Posted 01/24/18 09:56 AM

    Originally posted by: Rym


    Thanks ALex,

     

    But where can i write the function ?

     

    I would like to ask about  the following expression if it ca be run with my request

     

    (i==1)?(f=2):(f=1).


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 6.  Re: How to insert multiple conditions in the model

    Posted 01/24/18 10:04 AM

    Hi,

    stepFunction f1=stepwise {0.2->1.5; 2.3};
    stepFunction f2=stepwise {5.2->2.5; 8.3};

    float cput=1;
    float cpur=4;

    float result=(cput<=2)?f1(cpur):f2(cpur);

    execute
    {
    writeln(result);

    }

    regards


    #DecisionOptimization
    #OPLusingCPLEXOptimizer