BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
MikeCarter
Calcite | Level 5

Hi There,

Am trying to solve an MILP using proc opt, which I know is infeasible. To know the source of this structural infeasibility, am calling out IIS=ON option and then print "constraint.status". However, this lists one IIS at a time. I fix it and run IIS again; it comes up with another IIS. My problem has multiple IIS and I want to list all of them at one go, so I can make changes accordingly How can I list all the IIS at once? Any idea / experience anyone?

-Thanks,

-Mike

1 ACCEPTED SOLUTION

Accepted Solutions
LeoLopes
SAS Employee

There are two things you can try:

First, if the constraints all come from the same declaration, i.e.

con DontDoIt{i in SETI}: ...

then you can try relaxing all of the DontDoIt constraints.

Second, a little bit more work, but probably closer to what you want, you could put the solve statement in a loop and keep track of the constraints removed at each step until the problem is feasible.

Combining this IIS example with the information about problem symbols:

proc optmodel presolver=none;

   /* declare variables */

   var x{1..3} >=0;

  

   /* upper bound on variable x[3] */

   x[3].ub = 3;

  

   /* objective function */

   min obj = x[1] + x[2] + x[3];

  

   /* constraints */

   con c1: x[1] + x[2] >= 10;

   con c2: x[1] + x[3] <= 4;

   con c3: 4 <= x[2] + x[3] <= 5;

  

   num iteration init 1;

   set IIS{1 .. iteration} init {};

   do while (1);

     solve with lp / iis = on;

     IIS[iteration] = {ci in 1 .. _NCON_: _CON_[ci].status ~= ''};

     if card(IIS[iteration]) = 0 then leave;

     for {ci in IIS[iteration]: _CON_[ci].status = 'I_L'}

        _CON_[ci].lb = -constant('big');

     for {ci in IIS[iteration]: _CON_[ci].status = 'I_U'}

        _CON_[ci].ub = constant('big');

     iteration = iteration + 1;

   end;

   iteration = iteration - 1;

   for {ii in 1 .. iteration}

     put IIS[ii]=;

quit;

View solution in original post

3 REPLIES 3
LeoLopes
SAS Employee

There are two things you can try:

First, if the constraints all come from the same declaration, i.e.

con DontDoIt{i in SETI}: ...

then you can try relaxing all of the DontDoIt constraints.

Second, a little bit more work, but probably closer to what you want, you could put the solve statement in a loop and keep track of the constraints removed at each step until the problem is feasible.

Combining this IIS example with the information about problem symbols:

proc optmodel presolver=none;

   /* declare variables */

   var x{1..3} >=0;

  

   /* upper bound on variable x[3] */

   x[3].ub = 3;

  

   /* objective function */

   min obj = x[1] + x[2] + x[3];

  

   /* constraints */

   con c1: x[1] + x[2] >= 10;

   con c2: x[1] + x[3] <= 4;

   con c3: 4 <= x[2] + x[3] <= 5;

  

   num iteration init 1;

   set IIS{1 .. iteration} init {};

   do while (1);

     solve with lp / iis = on;

     IIS[iteration] = {ci in 1 .. _NCON_: _CON_[ci].status ~= ''};

     if card(IIS[iteration]) = 0 then leave;

     for {ci in IIS[iteration]: _CON_[ci].status = 'I_L'}

        _CON_[ci].lb = -constant('big');

     for {ci in IIS[iteration]: _CON_[ci].status = 'I_U'}

        _CON_[ci].ub = constant('big');

     iteration = iteration + 1;

   end;

   iteration = iteration - 1;

   for {ii in 1 .. iteration}

     put IIS[ii]=;

quit;

MikeCarter
Calcite | Level 5

Thanks Leo. This gives me some direction to think.

Thank you very much. Shall try the second approach.

LeoLopes
SAS Employee

You're welcome!

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

Multiple Linear Regression in SAS

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.

Discussion stats
  • 3 replies
  • 1610 views
  • 0 likes
  • 2 in conversation