SAS Optimization, and SAS Simulation Studio

turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

Find a Community

Topic Options

- RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

11-29-2016 12:08 PM

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.

- Mark as New
- Bookmark
- Subscribe
- RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to Afdoone

11-29-2016 02:39 PM - edited 11-29-2016 02:40 PM

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;
```

- Mark as New
- Bookmark
- Subscribe
- RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to RobPratt

11-29-2016 03:02 PM

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