An optimizer suite for generalized disjunctive programming (GDP).
DisjunctiveAlgorithms.jl is an MOI-layer solver for models that contain
disjunctions encoded as vector constraints in
DisjunctiveProgramming.DisjunctionSet. Disjunction-aware algorithms
(currently logic-based outer approximation) solve the model by
dispatching subproblems to user-provided MIP and NLP solvers.
The design follows
MultiObjectiveAlgorithms.jl:
one Optimizer that wraps inner solvers, with the algorithm and its
options selected through optimizer attributes.
using DisjunctiveProgramming, DisjunctiveAlgorithms, HiGHS, Ipopt
import DisjunctiveAlgorithms as DA
model = GDPModel(() -> DA.Optimizer(nlp_solver = Ipopt.Optimizer,
mip_solver = HiGHS.Optimizer))
@variable(model, 0 <= x <= 10)
@variable(model, Y[1:2], Logical)
@constraint(model, x <= 3, Disjunct(Y[1]))
@constraint(model, x^2 == 64, Disjunct(Y[2]))
@disjunction(model, Y)
@objective(model, Max, x)
optimize!(model, gdp_method = MOIDisjunction())MOIDisjunction() lowers each disjunction to a single
DisjunctionSet constraint that this package consumes directly; no
Big-M or Hull reformulation is performed on the modeling side.