Skip to content

Support Multiple Big-M reformulation.#120

Merged
pulsipher merged 38 commits intoinfiniteopt:masterfrom
dnguyen227:mbm-wip
Sep 30, 2025
Merged

Support Multiple Big-M reformulation.#120
pulsipher merged 38 commits intoinfiniteopt:masterfrom
dnguyen227:mbm-wip

Conversation

@dnguyen227
Copy link
Contributor

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.jl are extensions for reformulate_disjunction, _reformulate_disjunct, and reformulate_disjunct_constraint functions that dispatch over the new MBM datatype.

Documentation to follow in another PR.

@dnguyen227 dnguyen227 marked this pull request as ready for review June 25, 2025 16:12
Copy link
Collaborator

@pulsipher pulsipher left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall pretty good, please generalize to work with the InfiniteOpt extension and add this to the docs.

VariableRef changed to AbstractVariableRef.
@dnguyen227 dnguyen227 closed this Sep 3, 2025
@dnguyen227 dnguyen227 deleted the mbm-wip branch September 3, 2025 17:32
@dnguyen227 dnguyen227 restored the mbm-wip branch September 3, 2025 17:33
@dnguyen227 dnguyen227 reopened this Sep 3, 2025
@pulsipher
Copy link
Collaborator

Let's wait for #123 to be merged before finalizing this.

@codecov-commenter
Copy link

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 ☂️

Copy link
Collaborator

@pulsipher pulsipher left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Almost there. Also, please verify over some example problems that this returns the correct answer (e.g., the same as big-M).

@dnguyen227
Copy link
Contributor Author

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).
Copy link
Collaborator

@pulsipher pulsipher left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good, let's address the todo in the tests and we are good.

@pulsipher pulsipher merged commit 05ee10a into infiniteopt:master Sep 30, 2025
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants