Operations Research topics: SAS/OR,
SAS Optimization, and SAS Simulation Studio

Changing a nonlinear constraint to a linear one

Reply
Occasional Contributor
Posts: 9

Changing a nonlinear constraint to a linear one

Hi.  I have a binary variable and a nonlinear constraint in my model. Since I dont want to use MINLP I would like to change my non-linear constraint to a linear one and use MILP.(If it is possible). I could not convert the constraint yet so I thought maybe you have an idea.

 

I have two variables as "D" and "Ad" and the condition is:

 

if D<0 then Ad=D

if D>=0 then 0<=Ad<=D

 

I model the constraint as 

 

(D-|D|)/2<= Ad <=D

 

so the left side takes "D" if "D" is negative and "Ad" will be equal to "D" and it takes 0 if "D" is positive. I could not change this problem to linear. I know we can use binary variable to change absolute value to the linear form but since I already have a binary variable, by adding a new one the size will be huge and it is not solvable with the memory we have. I appreciate any idea you have.

SAS Employee
Posts: 448

Re: Changing a nonlinear constraint to a linear one

[ Edited ]

Assuming D is bounded both above and below, you can linearize this as follows:

 

 

   var X binary;

   con C1:
      Ad <= D;

   /* if X = 1 then D <= 0 else redundant */
   con C2:
      D <= D.ub * (1 - X);

   /* if X = 1 then D <= Ad else redundant */
   con C3:
      D - Ad <= (D.ub - D.lb) * (1 - X);

   /* if X = 0 then D >= 0 else redundant */
   con C4:
      D >= D.lb * X;

   /* if X = 0 then Ad >= 0 else redundant */
   con C5:
      Ad >= D.lb * X;

 

 

 

 

Occasional Contributor
Posts: 9

Re: Changing a nonlinear constraint to a linear one

Thank you so much! Binary variables make my problem huge and I am trying to avoide them. But I think it is a good idea and I will give it another try. Thank you

Ask a Question
Discussion stats
  • 2 replies
  • 223 views
  • 0 likes
  • 2 in conversation