Conversation
…inadmissible cuts in multiple ways, also fix tests
Also remove nondeterministic iteration of python sets
…ty (2). Unclear if this is faster or not. Also change some comments and variable names.
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.
Fixes # (n/a)
Summary/Motivation:
Add a transformation that uses Connor's method to generate cutting planes on "simple disjunctions." Simple disjunctions are disjunctions on variables bounded in the nonnegative orthant, where each disjunct contains exactly one linear constraint, which is outwards facing in the sense that it cuts off the origin. For now we only support the standard setting in the nonnegative orthant cone (so the disjunction must look like \cup_{t \in T} {x | c^t . x >= 1, x >= 0}), however, this should be extensible later if necessary to a transformed setting like \cup_{t \in T} {x | c^(t) . (Ax + b) >= 1, Ax + b >= 0} or similar, without breaking the interface.
This PR is connected with Connor Johnston's work with John, Emma and me this summer implementing and investigating this family of cuts (see also #3982). It may be used later as a subroutine in a multi-part transformation that also does things like aggregating non-simple disjunctions into a simple relaxation or calling gdp.bigm or hull.
Changes proposed in this PR:
gdp.reverse_polar_enumeration_cutscut generator for simple disjunctions. Name not necessarily final, if something else is more descriptive.AI-Use Disclosure
or
AI tools contributed to the development of this PR
Review process (select ONE):
Notes for reviewers (optional):
Legal Acknowledgement
By contributing to this software project, I have read the contribution guide and agree to the following terms and conditions for my contribution: