Numerical floating-point precision problem
AnsweredHello there! I have been experiencing the following problem with the Gurobi solver in Python. I am basically setting up my model such that the objective of the optimization problem is to minimize the sum of nonnegative real variables. I set up the model using optlang, and I set the objective with the following line of code:
model.objective = optlang.Objective(expression=sympy.Add(*(sympy.symbols(variables_names))), direction='min')
I also enforce the nonnegativity-constraints using the following Python code:
var = optlang.Variable(var_name, lb=0, type='continuous', problem=model)
model.add(var)
I also add a lot of other constraints.
Eventually, when I run `model.optimize()`, which uses the Gurobi license, I get a solution in which one of the variables has the primal value of 8.881784197001252e-15, which is almost a 0. In theory according to my own use case, if that variable was a 0, the solution would still be valid. I am not sure why Gurobi is finding this as a solution and not the same solution but with that variable set to 0 (since we minimize the sum of the variables in the objective). I have tried setting the tolerances to small values:
tol = 1e-4
# optlang.interface.GUROBI_PARAM_FEASIBILITYTOL = tol
self.optModel.configuration._set_feasibility(tol)
self.optModel.configuration._set_optimality(tol)
self.optModel.configuration._set_integrality(tol)
but it still did not work. How could I resolve this issue? Is that possible even? Thank you so much in advance.
0
-
Official comment
This post is more than two years old. Some information may not be up to date. For current information, please check the Gurobi Documentation or Knowledge Base. If you need more help, please create a new post in the community forum, or try Gurobot, our chatbot interface offering instant, expert-level support. -
Hi Elie,
The default FeasibilityTol value is 1e-5. You can tighten this up to 1e-9. Similarly for OptimalityTol
Unless you have binary/integer variables, IntegralityTol will not make a difference.
If making these smaller doesn't help I think 1e-15 values can be safely rounded down to 0.Cheers,
David0
Post is closed for comments.
Comments
2 comments