Support Multiple Big-M reformulation.#120
Conversation
…eplace_variables_in_constraint() testcase hack.
deleting prior to merge to main branch
pulsipher
left a comment
There was a problem hiding this comment.
Overall pretty good, please generalize to work with the InfiniteOpt extension and add this to the docs.
VariableRef changed to AbstractVariableRef.
|
Let's wait for #123 to be merged before finalizing this. |
Welcome to Codecov 🎉Once you merge this PR into your default branch, you're all set! Codecov will compare coverage reports and display results in all future pull requests. Thanks for integrating Codecov - We've got you covered ☂️ |
pulsipher
left a comment
There was a problem hiding this comment.
Almost there. Also, please verify over some example problems that this returns the correct answer (e.g., the same as big-M).
…ue with nested disjunctions.
… to be internal functions (added _)
|
Fixed indentation, tested some more on examples from lit, and modified the rest of the types to be general. Let me know if I missed anything. |
added default_M value for user defined fallbacks when, MBM runs into infeasible problems, generalized 0 into zero(T).
pulsipher
left a comment
There was a problem hiding this comment.
This looks good, let's address the todo in the tests and we are good.
This PR adds the Multiple Big-M reformation technique. The technique can be called similar to BigM and Hull:
optimize!(model, gdp_method = MBM(Gurobi.Optimizer))In
src/mbm.jlare extensions forreformulate_disjunction,_reformulate_disjunct, andreformulate_disjunct_constraintfunctions that dispatch over the new MBM datatype.Documentation to follow in another PR.