I am working on pure LP problem and using Multi-Objective to solve it. When I am using objective with weights:
solver1.minimize( A* 1000
+ B* 10000
+ C* 100
+ D* 1
)
Solver is able to get the optimal result successfully
But when I am using ObjectiveSense package with objective:
solver1.set_multi_objective(ObjectiveSense.Minimize, [A, B, C,D]
, priorities=[1, 2, 0, 1], weights=[1000,1,1,1])
Solver is getting infeasible after first hierarchy of solve and give: "Non-optimal status: infeasibleCPLEX Error 1300: Failure to solve multi-objective subproblem."
I am trying to figure out how to use parameters reltol and abstol to get a feasible solution. Any ideas or examples?
Also trying to understand why Multi-Objective is going infeasible though we have solution through weighted objective? Any input about same will help.
Thanks!
This page https://www.ibm.com/docs/en/icos/12.10.0?topic=optimization-solving-multiple-objective-problems explains in detail how tolerances are used to solve multi objective problems. To summarize, two different algorithms are used for LP and MIP. The LP algorithm uses LP bases, for which absolute tolerance is interpreted as a limit for reduced costs, and relative costs are not used. The MIP algorithm uses an iterative solve approach, for which tolerances are interpreted as tolerances on each intermediate sub-objective.
We have seen cases where the LP algorithm may fail, when the model has difficult numerical properties. To check this case, run the following line on your model: The range of coefficients should not exceed 1e+6.
print(mdl.cplex_matrix_stats)
As a workaround, you can try the Model.solve_with_goals
method in Docplex, which runs the iterative multi objective algorithm for any kind of model.