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.
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;
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
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.
Find more tutorials on the SAS Users YouTube channel.