0

I'm solving a MIP for which SCIP prints the following after solving:

violation: right hand side is violated by 4.00681341261588e-06
best solution is not feasible in original problem

optimal solution found

Indeed there are some constraints that are violated in the output solution. I played with the following tolerances, as I read somewhere that this controls the violations:

numerics/feastol = 1e-9
numerics/lpfeastol = 1e-9
numerics/sumepsilon = 1e-9

However, it seems the constraint is always violated by about 1e-6, no matter what the above parameters are.

I would like to know more on how does this parameter is used for a constraint of the type A*x <= B. Is this used for precision, or accuracy? That is,

A* |x-tol| - B <= 0

or

A*x - B <= tol

or something else?

Thanks!

mvc
  • 653
  • 1
  • 5
  • 9

1 Answers1

1

for linear constraints, the relative difference between the activity of the constraint (A*x) and the right hand side (B) is computed as

reldiff

Changing numerics/feastol would require this difference to be closer to zero in order for a solution to be accepted.

However, in your case, the issue is that a solution is found that is feasible in the transformed problem (changed through presolving and various other fixings) but not in the original problem. This could either be a bug in SCIP (if you are able to share a file of your problem instance, I could look into this) or it could be due to aggregation of small numerical errors. What SCIP version are you using? (switching to a more recent one might also solve your problem)

If your problem is not very challenging you can try to solve it without presolving by setting

set presolving emphasis off

in the SCIP interactive shell.

Happy SCIPing, Leon

Leon
  • 1,588
  • 1
  • 7
  • 16
  • Thanks. Turning presolving off seems to solve the issue. It would be great if you could have a look at the problem, since I'm not sure how turning presolving off will impact the performance of the solver on other instances. Please let me know where should I send it to - I just realized there is no way I can send you a private message here. – mvc Jan 14 '20 at 07:57
  • you can file a bug report here: https://scip.zib.de/bugs.php and attach the instance in question (which will give me some additional useful information through the questions in the bug report form) – Leon Jan 14 '20 at 11:19
  • We looked at your instance. The issue is that in presolving, the linear constraint handler fixes a variable and thus changes the right hand size. This changes the violation to exceed the threshold in the original problem. There is no easy fix for this except to disable presolving. We are working on a feature that might improve this problem in the long term. – Leon Jan 15 '20 at 16:14