Initial package implementation - #5
Open
dnguyen227 wants to merge 18 commits into
Open
dnguyen227 wants to merge 18 commits into
dnguyen227 wants to merge 18 commits into
Conversation
dnguyen227
force-pushed
the
package_updates
branch
from
August 23, 2026 18:46
4877613 to
890b547
Compare
Collaborator
Author
|
@pulsipher ready for review. |
pulsipher
requested changes
Sep 4, 2026
pulsipher
left a comment
Contributor
There was a problem hiding this comment.
A few comments/questions:
- I believe this requires that we first at support for MOI disjunctions in DisjunctiveProgramming, right?
- It doesn't appear that this optimizer supports the full MOI API for queries (i.e., not requiring the user to call the inner solver directly)
- Are the methods in the main src folder truly general and not specific to LOA? (especially master.jl and nlp.jl)
- It would be good to have a test for the natural user interface via DisjunctiveProgramming
Collaborator
Author
All these items are covered one way or another. Pls see points below.
|
Contributor
|
This is looking better, let's get the new set in DP merged so we can cut a release to so we can use it here. |
dnguyen227
force-pushed
the
package_updates
branch
from
September 15, 2026 16:37
f0d128f to
998b0ef
Compare
MOI's own `convert` is rough-and-ready: it reads a two-argument `*` as coefficient times variable and rejects `-`, so promoted rows such as `x * y` or `x * y - 3` threw there. `_polynomial` walks the tree instead, and `_to_affine` gains a constant method.
`MultiGenerationSize` evaluates several indicator combinations per master solve. They come from the `mip_solver`'s solution pool where it exposes one, and otherwise from re-solving the master behind a no-good cut per combination already taken. `BatchedSubproblems` stacks them into one NLP, with the sequential subproblem as the fallback for a failed batch. Adds `MasterSolveCount` and `NLPSolveCount`.
`combination_sources.jl` holds the default pool-then-re-solve source alongside the experimental `Neighborhood`, `LPRounding`, `RandomCombinations` and `CutoffResolve`, none of which need anything from the solver. A source extends `_candidate_combinations`.
The README install note pinned a patch version, when what the branch requirement is really about is `DisjunctionSet` and `Direct()` not being in a registered release yet. Say that instead.
`MasterSolveTime` and `NLPSolveTime` report where a run spent its time. The default combination source now takes as many pool entries as the solver holds, and re-solves the master only when there is no pool at all.
The covering pass was solving the full OA master, cuts and continuous variables included, so initialization was already MILP/NLP instead of the NLP-only pass Turkay and Grossmann describe. `_SetCoverModel` is the disjunct binaries under the exactly-one and propositional rows only, with its own no-good cuts, and stops once a solve covers nothing new. The master MILP now first solves in the main loop. Also adds `NLPInfeasibleCount`, and drops indicator rows from the LP copy in `_relaxed_activations`, where a gated row has no relaxation without its binary.
master.jl, nlp.jl and cuts.jl are specific to logic-based outer approximation rather than general, so they belong beside LOA.jl; `_instantiate` moves to optimizer.jl.
dnguyen227
force-pushed
the
package_updates
branch
from
September 17, 2026 18:24
998b0ef to
2f1a415
Compare
Contributor
|
DisjunctiveProgramming v0.7 has ben released. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Sample how we'd use this: