[Symphony] Problem with a piecewise linear function

Aiko Vogelsang aikovogelsang at gmx.de
Fri Dec 10 10:09:57 EST 2010


Hello everybody,

 

I have a problem with a piecewise linear function in Symphony (release
5.3.1). 

In my C++-Code I'm using the following lines to build up a model of a
piecewise linear function (only the part with the problem is shown here):

 

      //add the bounds of the variables

      // continuous variable [0..1]

      variable_lb[0]=0.0;

      variable_ub[0]=1.0;

      

      // continuous variable [0..1]

      variable_lb[1]=0.0;

      variable_ub[1]=1.0;

      

      // continuous variable [0..1]

      variable_lb[2]=0.0;

      variable_ub[2]=1.0;

            

      // continuous variable [0..1]

      variable_lb[3]=0.0;

      variable_ub[3]=1.0;

            

      // continuous variable [0..1]

      variable_lb[4]=0.0;

      variable_ub[4]=1.0;

            

      // continuous variable [0..1]

      variable_lb[5]=0.0;

      variable_ub[5]=1.0;

      

      //binary variable

      variable_lb[6]=0.0;

      variable_ub[6]=1.0;

            

      //binary variable

      variable_lb[7]=0.0;

      variable_ub[7]=1.0;

            

      //binary variable

      variable_lb[8]=0.0;

      variable_ub[8]=1.0;

      

      //binary variable

      variable_lb[9]=0.0;

      variable_ub[9]=1.0;

            

     //binary variable

      variable_lb[10]=0.0;

      variable_ub[10]=1.0;

            

      // continuous variable

      variable_lb[11]=9.0;

      variable_ub[11]=9.0;

 

 

 

      //add the bounds of the constraints

      constraint_lb[0]=-COIN_DBL_MAX;

      constraint_ub[0]=0.0;

 

      constraint_lb[1]=-COIN_DBL_MAX;

      constraint_ub[1]=0.0;

 

      constraint_lb[2]=-COIN_DBL_MAX;

      constraint_ub[2]=0.0;

 

      constraint_lb[3]=-COIN_DBL_MAX;

      constraint_ub[3]=0.0;

      

      constraint_lb[4]=-COIN_DBL_MAX;

      constraint_ub[4]=0.0;

 

      constraint_lb[5]=-COIN_DBL_MAX;

      constraint_ub[5]=0.0;

      

      constraint_lb[6]=1.0;

      constraint_ub[6]=1.0;

      

      constraint_lb[7]=1.0;

      constraint_ub[7]=1.0;

      

      constraint_lb[8]=0.0;

      constraint_ub[8]=0.0;

 

            

      //add the values of the constraints

      constraint_value[0][0]=1.0;

      constraint_value[6][0]=-1.0; //binary variable, the two dimensions
describe the following: column 6; row 0

 

      constraint_value[1][1]=1.0;

      constraint_value[6][1]=-1.0; //binary variable

      constraint_value[7][1]=-1.0; //binary variable

 

      constraint_value[2][2]=1.0;

      constraint_value[7][2]=-1.0; //binary variable

      constraint_value[8][2]=-1.0; //binary variable

            

      constraint_value[3][3]=1.0;

      constraint_value[8][3]=-1.0; //binary variable

      constraint_value[9][3]=-1.0; //binary variable

 

      constraint_value[4][4]=1.0;

      constraint_value[9][4]=-1.0; //binary variable

      constraint_value[10][4]=-1.0; //binary variable

 

      constraint_value[5][5]=1.0;

      constraint_value[10][5]=-1.0; //binary variable

            

      constraint_value[0][6]=1.0;

      constraint_value[1][6]=1.0;

      constraint_value[2][6]=1.0;

      constraint_value[3][6]=1.0;

      constraint_value[4][6]=1.0;

      constraint_value[5][6]=1.0;

 

      //only one binary variable can be chosen       

      constraint_value[6][7]=1.0;

      constraint_value[7][7]=1.0;

      constraint_value[8][7]=1.0;

      constraint_value[9][7]=1.0;

      constraint_value[10][7]=1.0;

 

      constraint_value[11][8]=-1.0;

      constraint_value[0][8]=0.0;

      constraint_value[1][8]=10.0;

      constraint_value[2][8]=14.0;

      constraint_value[3][8]=18.0;

      constraint_value[4][8]=22.0;

      constraint_value[5][8]=50.0;

 

      

 

In this part a piecewise linear function is described and built.

Normally, this code should work like this:

1.) Set the variable 11 to a value of [0..50]

2.) By using constraint 8 the variables 0 to 5 should describe the variable
11

 

The constraints 0-5 make sure that two neighbor continuous variables are
selected because only one binary variable can have the value of 1.

 

The building works very well except for some values. If I enter the value
9.4 for the variable 11, the optimization is infeasible. But, if you take
other values like 9.9 or 9.0 that lie in the same interval everything works.

 

I really don't understand this failure. Can you please help me to find my
mistake or to understand why Symphony has a problem with the value mentioned
before?

This would be really great! Many thanks in advance!

 

Kind regards

Aiko Vogelsang

 

 

 

 

   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/symphony/attachments/20101210/2545bb29/attachment.html>


More information about the Symphony mailing list