An ability to get relative MIP GAP and expose linear solver callbacks API to the .Net #2608
+147
−6
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hi!
I added an ability to get relative MIP GAP in the linear solver callback. It is nice to show (1 - relative MIP GAP)*100 to the user as "percentage". He sees that something is happening. So I added MPCallbackContext::GetRelativeMipGap method.
It is also a good opportunity to offer user to select a feasible solution if calculation takes a lot of time. When I played with SCIP solver I noticed, that RunCallback method is invoked several times with the same kMip event, but on some calls the solution either didn't have any variables or the variable values where obviously incorrect. So I introduced MPCallbackContext::HasValidMipSolution method. One another thing was that RunCallback method was invoked several times with the same solution, so I wanted to check if this solution has already been exposed to the caller code. MPCallbackContext::IsNewSolution does this trick.
I also partially expose callbacks API to the .Net world. Now it is read-only and doesn't support adding cuts, constraints or suggesting a solution.
These changes solve my issue #2603
These changes are only for SCIP solver, sorry, my C++ skills are not so good (I took a look at gurobi solver interface and it looks as magic for me :-)) and I don't have Gurobi license to perform tests.