-
Notifications
You must be signed in to change notification settings - Fork 97
Closed
Labels
Submodule: BridgesAbout the Bridges submoduleAbout the Bridges submodule
Milestone
Description
Bridges are self-contained objects; they take a variable/constraint/objective as input, and produce a collection of variables/constraints/objective as output.
This works for most use-cases, but there are a few edge-cases that we haven't solved:
Epigraph bounds
We can bridge [z, x, y] in SecondOrderCone() to x^2 + y^2 <= z^2 and z >= 0.
- What happens if we try adding a different constraint to
z? LikeEqualTo? The inner MOI model can't have two lower bounds, but it's fine for the outer model. - One solution is to add a linear constraint
1z >= 0, but some solvers might need an explicit bound onzto infer convexity.
Variable transforms
We can bridge x in Semicontinuous(l, u) to z in {0, 1}, x >= l * z, x <= u * z.
- Now the inner
xis a free variable. What happens if we add a second constraint toxlike a lower bound? At the moment everything works because the bridge forwards the bound and the inner model happily accepts it. The bridge needs a way to "seeing" this in order to throw a BoundAlreadySet error.
This is issue #1431.
Here's another example from Hypatia: jump-dev/Hypatia.jl#784
Solution
@blegat started a solution here:
- Add variable constraint watcher bridges #1097
- Throw error when bounds are set from Semi... bridges #1095
At some point in the MOI 1.x timeframe, we should come up with a comprehensive solution to this problem.
Metadata
Metadata
Assignees
Labels
Submodule: BridgesAbout the Bridges submoduleAbout the Bridges submodule