API
DisjunctiveProgramming.@disjunction — Macro
@disjunction(model, expr, kw_args...)Add a disjunction described by the expression expr, which must be a Vector of LogicalVariableRefs.
@disjunction(model, ref[i=..., j=..., ...], expr, kw_args...)Add a group of disjunction described by the expression expr parameterized by i, j, ..., which must be a Vector of LogicalVariableRefs.
In both of the above calls, a Disjunct tag can be added to create nested disjunctions.
The recognized keyword arguments in kw_args are the following:
base_name: Sets the name prefix used to generate constraint names. It corresponds to the constraint name for scalar constraints, otherwise, the constraint names are set tobase_name[...]for each index...of the axesaxes.container: Specify the container type.exactly1: Specify aBoolwhether a constraint should be added to only allow selecting one disjunct in the disjunction.
To create disjunctions without macros, see disjunction.
DisjunctiveProgramming.@disjunctions — Macro
@disjunctions(model, args...)Adds groups of disjunctions at once, in the same fashion as the @disjunction macro.
The model must be the first argument, and multiple disjunctions can be added on multiple lines wrapped in a begin ... end block.
The macro returns a tuple containing the disjunctions that were defined.
Example
julia model = GDPModel(); @variable(model, w); @variable(model, x); @variable(model, Y[1:4], LogicalVariable); @constraint(model, [i=1:2], w == i, Disjunct(Y[i])); @constraint(model, [i=3:4], x == i, Disjunct(Y[i])); @disjunctions(model, begin [Y[1], Y[2]] [Y[3], Y[4]] end);`
DisjunctiveProgramming._make_variable_object — Method
_make_variable_object(props::VariableProperties)::AnyConstructs a JuMP variable object from the given VariableProperties. If the variable_type field is nothing, dispatches to JuMP.build_variable with only the variable info; otherwise, passes variable_type as a tag/type.
Returns a JuMP variable object that can be added to a model.
DisjunctiveProgramming.binary_variable — Method
binary_variable(
vref::LogicalVariableRef
)::Union{JuMP.AbstractVariableRef, JuMP.GenericAffExpr}Returns the underlying binary variable for the logical variable vref which is used in the reformulated model. This is helpful to embed logical variables in algebraic constraints. If vref has a logical complement then an expression of the form 1 - bvref is returned where bvref is the binary variable of the logical complement variable.
DisjunctiveProgramming.copy_gdp_data — Method
copy_gdp_data(
model::JuMP.AbstractModel,
new_model::JuMP.AbstractModel,
ref_map::JuMP.GenericReferenceMap
)::Dict{LogicalVariableRef, LogicalVariableRef}Copy all GDP-specific data from model to new_model, including logical variables, logical constraints, disjunct constraints, and disjunctions. This function is called automatically by copy_gdp_model after JuMP.copy_model has copied the base model structure.
Arguments
model::JuMP.AbstractModel: The source model containing GDP data to copy.new_model::JuMP.AbstractModel: The destination model that will receive the copied GDP data.ref_map::JuMP.GenericReferenceMap: The reference map fromJuMP.copy_modelthat maps old variable references to new ones.
Returns
Dict{LogicalVariableRef, LogicalVariableRef}: A mapping from old logical variable references to new logical variable references.
DisjunctiveProgramming.copy_gdp_model — Method
copy_gdp_model(model::JuMP.AbstractModel)Create a copy of a GDPModel, including all variables, constraints, and GDP-specific data (logical variables, disjunctions, etc.).
Arguments
model::JuMP.AbstractModel: The GDP model to copy.
Returns A tuple (new_model, ref_map, lv_map) where:
new_model: The copied model.ref_map::JuMP.GenericReferenceMap: Maps old variable and constraint references to new ones.lv_map::Dict{LogicalVariableRef, LogicalVariableRef}: Maps old logical variable references to new ones.
Example
using DisjunctiveProgramming, HiGHS
model = GDPModel(HiGHS.Optimizer)
@variable(model, x)
@variable(model, Y[1:2], LogicalVariable)
@constraint(model, x <= 10, Disjunct(Y[1]))
@constraint(model, x >= 20, Disjunct(Y[2]))
@disjunction(model, Y)
new_model, ref_map, lv_map = copy_gdp_model(model)DisjunctiveProgramming.create_variable — Method
create_variable(model::JuMP.AbstractModel, props::VariableProperties)::JuMP.AbstractVariableRefCreates and adds a JuMP variable to model using the properties specified in props. This function applies all variable attributes from the VariableProperties object including binary/integer constraints, bounds, fixed values, start values, and constraint sets.
The function first creates a variable object using _make_variable_object, optionally applies any constraint sets if props.set is not nothing, and then adds the variable to the model with the specified name.
DisjunctiveProgramming.disjunction — Function
disjunction(
model::JuMP.AbstractModel,
disjunct_indicators::Vector{LogicalVariableRef},
[nested_tag::Disjunct],
[name::String = ""];
[exactly1::Bool = true]
)Create a disjunction comprised of disjuncts with indicator variables disjunct_indicators and add it to model. For nested disjunctions, the nested_tag is required to indicate which disjunct it will be part of in the parent disjunction. By default, exactly1 adds a constraint of the form @constraint(model, disjunct_indicators in Exactly(1)) only allowing one of the disjuncts to be selected; this is required for certain reformulations like Hull. For nested disjunctions, exactly1 creates a constraint of the form @constraint(model, disjunct_indicators in Exactly(nested_tag.indicator)). To conveniently generate many disjunctions at once, see @disjunction and @disjunctions.
DisjunctiveProgramming.gdp_data — Method
gdp_data(model::JuMP.AbstractModel)::GDPDataExtract the GDPData from a GDPModel.
DisjunctiveProgramming.has_logical_complement — Method
has_logical_complement(vref::LogicalVariableRef)::BoolReturn a Bool whether a vref is a logical complement of another logical variable.
DisjunctiveProgramming.is_gdp_model — Method
is_gdp_model(model::JuMP.AbstractModel)::BoolReturn if model was created via the GDPModel constructor.
DisjunctiveProgramming.reformulate_disjunct_constraint — Method
reformulate_disjunct_constraint(
model::JuMP.AbstractModel,
con::JuMP.AbstractConstraint,
bvref::Union{JuMP.AbstractVariableRef, JuMP.GenericAffExpr},
method::AbstractReformulationMethod
)Extension point for reformulation method method to reformulate disjunction constraint con over each constraint. If method needs to specify how to reformulate the entire disjunction, see reformulate_disjunction.
DisjunctiveProgramming.reformulate_disjunction — Method
reformulate_disjunction(
model::JuMP.AbstractModel,
disj::Disjunction,
method::AbstractReformulationMethod
) where {T<:Disjunction}Reformulate a disjunction using the specified method. Current reformulation methods include BigM, Hull, and Indicator. This method can be extended for other reformulation techniques.
The disj field is the ConstraintData object for the disjunction, stored in the disjunctions field of the GDPData object.
DisjunctiveProgramming.reformulate_model — Function
reformulate_model(model::JuMP.AbstractModel, method::AbstractSolutionMethod = BigM())Reformulate a GDPModel using the specified method. Prior to reformulation, all previous reformulation variables and constraints are deleted.
DisjunctiveProgramming.requires_exactly1 — Method
requires_exactly1(method::AbstractReformulationMethod)Return a Bool whether method requires that Exactly 1 disjunct be selected as true for each disjunction. For new reformulation method types, this should be extended to return true if such a constraint is required (defaults to false otherwise).
DisjunctiveProgramming.requires_variable_bound_info — Method
requires_variable_bound_info(method::AbstractReformulationMethod)::BoolReturn a Bool whether method requires variable bound information accessed via variable_bound_info. This should be extended for new AbstractReformulationMethod methods if needed (defaults to false). If a new method does require variable bound information, then set_variable_bound_info should also be extended.
DisjunctiveProgramming.set_variable_bound_info — Function
set_variable_bound_info(vref, method::AbstractReformulationMethod)::Tuple{<:Number, <:Number}Returns a tuple of the form (lower_bound, upper_bound) which are the bound information needed by method to reformulate disjunctions. This only needs to be implemented for methods where requires_variable_bound_info(method) = true. These bounds can later be accessed via variable_bound_info.
DisjunctiveProgramming.variable_bound_info — Method
variable_bound_info(vref::JuMP.AbstractVariableRef)::Tuple{<:Number, <:Number}Returns a tuple of the form (lower_bound, upper_bound) needed to implement reformulation methods. Only works if requires_variable_bound_info is implemented.
DisjunctiveProgramming.variable_copy — Method
variable_copy(model::JuMP.AbstractModel, vref::JuMP.AbstractVariableRef)::JuMP.AbstractVariableRefCreates a copy of the variable vref in the given model. The new variable will have the same properties (bounds, fixed value, start value, name, and type) as vref but will be added to model as a distinct variable. This is useful for transferring variables between models or duplicating variable definitions in reformulations.
JuMP.add_constraint — Function
JuMP.add_constraint(
model::JuMP.AbstractModel,
con::_DisjunctConstraint,
name::String = ""
)::DisjunctConstraintRefExtend JuMP.add_constraint to add a Disjunct to a GDPModel. The constraint is added to the GDPData in the .ext dictionary of the GDPModel.
JuMP.add_constraint — Method
function JuMP.add_constraint(
model::JuMP.GenericModel,
c::JuMP.ScalarConstraint{_LogicalExpr, MOI.EqualTo{Bool}},
name::String = ""
)Extend JuMP.add_constraint to allow creating logical proposition constraints for a GDPModel with the @constraint macro. Users should define logical constraints via the syntax @constraint(model, logical_expr := true).
JuMP.add_constraint — Method
function JuMP.add_constraint(
model::JuMP.GenericModel,
c::VectorConstraint{<:F, S},
name::String = ""
) where {F <: Vector{<:LogicalVariableRef}, S <: AbstractCardinalitySet}Extend JuMP.add_constraint to allow creating logical cardinality constraints for a GDPModel with the @constraint macro.
JuMP.add_variable — Function
JuMP.add_variable(
model::JuMP.Model,
v::LogicalVariable,
name::String = ""
)::LogicalVariableRefExtend JuMP.add_variable for LogicalVariables. This helps enable @variable(model, [var_expr], Logical).
JuMP.build_constraint — Method
JuMP.build_constraint(
_error::Function,
func,
set::_MOI.AbstractScalarSet,
tag::Disjunct
)::_DisjunctConstraintExtend JuMP.build_constraint to add constraints to disjuncts. This in combination with JuMP.add_constraint enables the use of @constraint(model, [name], constr_expr, tag), where tag is a Disjunct(::Type{LogicalVariableRef}). The user must specify the LogicalVariable to use as the indicator for the _DisjunctConstraint being created.
JuMP.build_constraint — Method
JuMP.build_constraint(
_error::Function,
func,
set::MathOptInterface.Nonnegatives,
tag::Disjunct
)::_DisjunctConstraintExtend JuMP.build_constraint to add VectorConstraints to disjuncts.
JuMP.build_constraint — Method
JuMP.build_constraint(
_error::Function,
func,
set::MathOptInterface.Nonpositives,
tag::Disjunct
)::_DisjunctConstraintExtend JuMP.build_constraint to add VectorConstraints to disjuncts.
JuMP.build_constraint — Method
JuMP.build_constraint(
_error::Function,
func,
set::MathOptInterface.Zeros,
tag::Disjunct
)::_DisjunctConstraintExtend JuMP.build_constraint to add VectorConstraints to disjuncts.
JuMP.build_constraint — Method
JuMP.build_constraint(
_error::Function,
func,
set::Nonnegatives,
tag::Disjunct
)::_DisjunctConstraintExtend JuMP.build_constraint to add VectorConstraints to disjuncts.
JuMP.build_constraint — Method
JuMP.build_constraint(
_error::Function,
func,
set::Nonpositives,
tag::Disjunct
)::_DisjunctConstraintExtend JuMP.build_constraint to add VectorConstraints to disjuncts.
JuMP.build_constraint — Method
JuMP.build_constraint(
_error::Function,
func,
set::Zeros,
tag::Disjunct
)::_DisjunctConstraintExtend JuMP.build_constraint to add VectorConstraints to disjuncts.
JuMP.build_constraint — Method
function JuMP.build_constraint(
_error::Function,
func::AbstractVector{T},
set::S
) where {T <: LogicalVariableRef, S <: Union{Exactly, AtLeast, AtMost}}Extend JuMP.build_constraint to add logical cardinality constraints to a GDPModel. This in combination with JuMP.add_constraint enables the use of @constraint(model, [name], logical_expr in set), where set can be either of the following cardinality sets: AtLeast(n), AtMost(n), or Exactly(n).
Example
To select exactly 1 logical variable Y to be true, do (the same can be done with AtLeast(n) and AtMost(n)):
using DisjunctiveProgramming
model = GDPModel();
@variable(model, Y[i = 1:2], LogicalVariable);
@constraint(model, [Y[1], Y[2]] in Exactly(1));JuMP.build_variable — Method
JuMP.build_variable(
_error::Function,
info::JuMP.VariableInfo,
::Union{Type{Logical}, Logical};
[logical_complement::Union{Nothing, LogicalVariableRef} = nothing]
)::LogicalVariableExtend JuMP.build_variable to work with logical variables. This in combination with JuMP.add_variable enables the use of @variable(model, [var_expr], Logical). Optionally, a logical_complement can be given which provides a logical variable that is the complement of this one (common for disjunctions with two disjuncts).
JuMP.constraint_object — Method
JuMP.constraint_object(cref::DisjunctConstraintRef)Return the underlying constraint data for the constraint referenced by cref.
JuMP.constraint_object — Method
JuMP.constraint_object(cref::DisjunctionRef)Return the underlying constraint data for the constraint referenced by cref.
JuMP.constraint_object — Method
JuMP.constraint_object(cref::LogicalConstraintRef)Return the underlying constraint data for the constraint referenced by cref.
JuMP.copy_extension_data — Method
JuMP.copy_extension_data(
data::GDPData,
new_model::JuMP.AbstractModel,
old_model::JuMP.AbstractModel
)::GDPDataExtend JuMP.copy_extension_data to initialize an empty GDPData object for the copied model. This is the first step in the model copying process and is automatically called by JuMP.copy_model. The actual GDP data (logical variables, disjunctions, etc.) is copied separately via copy_gdp_data.
JuMP.delete — Method
JuMP.delete(model::JuMP.AbstractModel, cref::DisjunctConstraintRef)Delete a disjunct constraint from the GDP model.
JuMP.delete — Method
JuMP.delete(model::JuMP.AbstractModel, cref::DisjunctionRef)Delete a disjunction constraint from the GDP model.
JuMP.delete — Method
JuMP.delete(model::JuMP.AbstractModel, cref::LogicalConstraintRef)Delete a logical constraint from the GDP model.
JuMP.delete — Method
JuMP.delete(model::JuMP.AbstractModel, vref::LogicalVariableRef)::NothingDelete the logical variable associated with vref from the GDP model.
JuMP.fix_value — Method
JuMP.fix_value(vref::LogicalVariableRef)::BoolReturn the value to which a logical variable is fixed.
JuMP.index — Method
JuMP.index(cref::DisjunctConstraintRef)Return the index constraint associated with cref.
JuMP.index — Method
JuMP.index(cref::DisjunctionRef)Return the index constraint associated with cref.
JuMP.index — Method
JuMP.index(cref::LogicalConstraintRef)Return the index constraint associated with cref.
JuMP.index — Method
JuMP.index(vref::LogicalVariableRef)::LogicalVariableIndexReturn the index of logical variable that associated with vref.
JuMP.is_fixed — Method
JuMP.is_fixed(vref::LogicalVariableRef)::BoolReturn true if vref is a fixed variable. If true, the fixed value can be queried with fix_value.
JuMP.is_valid — Method
JuMP.is_valid(model::JuMP.AbstractModel, cref::DisjunctConstraintRef)Return true if cref refers to a valid constraint in the GDP model.
JuMP.is_valid — Method
JuMP.is_valid(model::JuMP.AbstractModel, cref::DisjunctionRef)Return true if cref refers to a valid constraint in the GDP model.
JuMP.is_valid — Method
JuMP.is_valid(model::JuMP.AbstractModel, cref::LogicalConstraintRef)Return true if cref refers to a valid constraint in the GDP model.
JuMP.is_valid — Method
JuMP.is_valid(model::JuMP.AbstractModel, vref::LogicalVariableRef)::BoolReturn true if vref refers to a valid logical variable in GDP model.
JuMP.isequal_canonical — Method
JuMP.isequal_canonical(v::LogicalVariableRef, w::LogicalVariableRef)::BoolReturn true if v and w refer to the same logical variable in the same GDP model.
JuMP.owner_model — Method
JuMP.owner_model(cref::DisjunctConstraintRef)Return the model to which cref belongs.
JuMP.owner_model — Method
JuMP.owner_model(cref::DisjunctionRef)Return the model to which cref belongs.
JuMP.owner_model — Method
JuMP.owner_model(cref::LogicalConstraintRef)Return the model to which cref belongs.
JuMP.owner_model — Method
JuMP.owner_model(vref::LogicalVariableRef)::JuMP.AbstractModelReturn the GDP model to which vref belongs.
JuMP.set_name — Method
JuMP.set_name(cref::DisjunctConstraintRef, name::String)Set a constraint's name attribute.
JuMP.set_name — Method
JuMP.set_name(cref::DisjunctionRef, name::String)Set a constraint's name attribute.
JuMP.set_name — Method
JuMP.set_name(cref::LogicalConstraintRef, name::String)Set a constraint's name attribute.
JuMP.set_name — Method
JuMP.set_name(vref::LogicalVariableRef, name::String)::NothingSet a logical variable's name attribute.
JuMP.set_start_value — Method
JuMP.set_start_value(vref::LogicalVariableRef, value::Union{Nothing, Bool})::NothingSet the start value of the logical variable vref.
Pass nothing to unset the start value.
JuMP.start_value — Method
JuMP.start_value(vref::LogicalVariableRef)::BoolReturn the start value of the logical variable vref.
JuMP.unfix — Method
JuMP.unfix(vref::LogicalVariableRef)::NothingDelete the fixed value of a logical variable.
JuMP.value — Method
JuMP.value(vref::LogicalVariableRef)::BoolReturns the optimized value of vref. This dispatches on value(binary_variable(vref)) and then rounds to the closest Bool value.
DisjunctiveProgramming.AbstractCardinalitySet — Type
AbstractCardinalitySet <: MOI.AbstractVectorSetAn abstract type for cardinality sets _MOIAtLeast, _MOIExactly, and _MOIAtMost.
DisjunctiveProgramming.AbstractReformulationMethod — Type
AbstractReformulationMethod <: AbstractSolutionMethodAn abstract type for reformulation approaches used to solve GDPModels.
DisjunctiveProgramming.AbstractSolutionMethod — Type
AbstractSolutionMethodAn abstract type for solution methods used to solve GDPModels.
DisjunctiveProgramming.AtLeast — Type
AtLeast{T<:Union{Int,LogicalVariableRef}} <: JuMP.AbstractVectorSetConvenient alias for using _MOIAtLeast.
DisjunctiveProgramming.AtMost — Type
AtMost{T<:Union{Int,LogicalVariableRef}} <: JuMP.AbstractVectorSetConvenient alias for using _MOIAtMost.
DisjunctiveProgramming.BigM — Type
BigM{T} <: AbstractReformulationMethodA type for using the big-M reformulation approach for disjunctive constraints.
Fields
value::T: Big-M value (default =1e9).tight::Bool: Attempt to tighten the Big-M value (default =true)?
DisjunctiveProgramming.ConstraintData — Type
ConstraintData{C <: JuMP.AbstractConstraint}A type for storing constraint objects in GDPData and any meta-data they possess.
Fields
constraint::C: The constraint.name::String: The name of the proposition.
DisjunctiveProgramming.Disjunct — Type
DisjunctUsed as a tag for constraints that will be used in disjunctions. This is done via the following syntax:
julia> @constraint(model, [constr_expr], Disjunct)
julia> @constraint(model, [constr_expr], Disjunct(lvref))where lvref is a LogicalVariableRef that will ultimately be associated with the disjunct the constraint is added to. If no lvref is given, then one is generated when the disjunction is created.
DisjunctiveProgramming.DisjunctConstraintIndex — Type
DisjunctConstraintIndexA type for storing the index of a Disjunct.
Fields
value::Int64: The index value.
DisjunctiveProgramming.DisjunctConstraintRef — Type
DisjunctConstraintRef{M <: JuMP.AbstractModel}A type for looking up disjunctive constraints.
DisjunctiveProgramming.Disjunction — Type
Disjunction{M <: JuMP.AbstractModel} <: JuMP.AbstractConstraintA type for a disjunctive constraint that is comprised of a collection of disjuncts of indicated by a unique LogicalVariableIndex.
Fields
indicators::Vector{LogicalVariableref}: The references to the logical variables
(indicators) that uniquely identify each disjunct in the disjunction.
nested::Bool: Is this disjunction nested within another disjunction?
DisjunctiveProgramming.DisjunctionRef — Type
DisjunctionRef{M <: JuMP.AbstractModel}A type for looking up disjunctive constraints.
DisjunctiveProgramming.Exactly — Type
Exactly <: JuMP.AbstractVectorSetConvenient alias for using _MOIExactly.
DisjunctiveProgramming.GDPData — Type
GDPData{M <: JuMP.AbstractModel, V <: JuMP.AbstractVariableRef, CrefType, ValueType}The core type for storing information in a GDPModel.
DisjunctiveProgramming.GDPModel — Method
GDPModel([optimizer]; [kwargs...])::JuMP.Model
GDPModel{T}([optimizer]; [kwargs...])::JuMP.GenericModel{T}
GDPModel{M <: JuMP.AbstractModel, VrefType, CrefType}([optimizer], [args...]; [kwargs...])::MThe core model object for building general disjunction programming models.
DisjunctiveProgramming.Hull — Type
Hull{T} <: AbstractReformulationMethodA type for using the convex hull reformulation approach for disjunctive constraints.
Fields
value::T: epsilon value for nonlinear hull reformulations (default =1e-6).
DisjunctiveProgramming.Indicator — Type
Indicator <: AbstractReformulationMethodA type for using indicator constraint approach for linear disjunctive constraints.
DisjunctiveProgramming.Logical — Type
Logical{T}Tag for creating logical variables using @variable. Most often this will be used to enable the syntax:
@variable(model, var_expr, Logical, [kwargs...])which creates a LogicalVariable that will ultimately be reformulated into a binary variable of the form:
@variable(model, var_expr, Bin, [kwargs...])To include a tag that is used to create the reformulated variables, the syntax becomes:
@variable(model, var_expr, Logical(MyTag()), [kwargs...])which creates a LogicalVariable that is associated with MyTag() such that the reformulation binary variables are of the form:
@variable(model, var_expr, Bin, MyTag(), [kwargs...])DisjunctiveProgramming.LogicalConstraintIndex — Type
LogicalConstraintIndexA type for storing the index of a logical constraint.
Fields
value::Int64: The index value.
DisjunctiveProgramming.LogicalConstraintRef — Type
LogicalConstraintRef{M <: JuMP.AbstractModel}A type for looking up logical constraints.
DisjunctiveProgramming.LogicalVariable — Type
LogicalVariable <: JuMP.AbstractVariableA variable type the logical variables associated with disjuncts in a Disjunction.
Fields
fix_value::Union{Nothing, Bool}: A fixed boolean value if there is one.start_value::Union{Nothing, Bool}: An initial guess if there is one.logical_complement::Union{Nothing, LogicalVariableRef}: The logical complement of this variable if there is one.
DisjunctiveProgramming.LogicalVariableData — Type
LogicalVariableDataA type for storing LogicalVariables and any meta-data they possess.
Fields
variable::LogicalVariable: The logical variable object.name::String: The name of the variable.
DisjunctiveProgramming.LogicalVariableIndex — Type
LogicalVariableIndexA type for storing the index of a LogicalVariable.
Fields
value::Int64: The index value.
DisjunctiveProgramming.LogicalVariableRef — Type
LogicalVariableRef{M <: JuMP.AbstractModel}A type for looking up logical variables.
DisjunctiveProgramming.MBM — Type
MBM{O, T, L <: LogicalVariableRef} <: AbstractReformulationMethodA type for using the multiple big-M reformulation approach for disjunctive constraints.
Fields
optimizer::O: Optimizer to use when solving mini-models (required).default_M::T: Default big-M value to use if no big-M is specified for a logical variable (1e9).
DisjunctiveProgramming.PSplit — Type
PSplit <: AbstractReformulationMethodA type for using the P-split reformulation approach for disjunctive constraints. This method partitions variables into groups and handles each group separately.
Constructors
PSplit(partition::Vector{Vector{V}}): Create a PSplit with the given
partition of variables
PSplit(n_parts::Int, model::JuMP.AbstractModel): Automatically partition
model variables into n_parts groups
Fields
partition::Vector{Vector{V}}: The partition of variables, where each inner
vector represents a group of variables that will be handled together
DisjunctiveProgramming.VariableProperties — Type
VariableProperties{L, U, F, S, SET, T}A type for storing variable properties and attributes that can be applied to JuMP variables. This is used to capture and transfer variable information between models during reformulation.
Fields
info::JuMP.VariableInfo{L, U, F, S}: JuMP's VariableInfo struct containing bounds, fixed values, start values, and binary/integer constraints.name::String: The variable name.set::SET: The constraint set the variable belongs to (if any), obtained viaJuMP.moi_set.variable_type::T: The variable type information, critical for extensions.
Type Parameters
L, U, F, S: Type parameters from JuMP.VariableInfo for lower bound, upper bound, fixed value, and start value types.SET: Type of the constraint set the variable belongs to.T: Type of the variable type information.
Constructor VariableProperties(vref::JuMP.GenericVariableRef{T}) creates a VariableProperties instance from a JuMP variable reference, automatically extracting all relevant properties.
DisjunctiveProgramming._MOIAtLeast — Type
_MOIAtLeast <: AbstractCardinalitySetMOI level set for AtLeast constraints, see AtLeast for recommended syntax.
DisjunctiveProgramming._MOIAtMost — Type
_MOIAtMost <: AbstractCardinalitySetMOI level set for AtMost constraints, see AtMost for recommended syntax.
DisjunctiveProgramming._MOIExactly — Type
_MOIExactly <: AbstractCardinalitySetMOI level set for Exactly constraints, see Exactly for recommended syntax.
DisjunctiveProgramming.cutting_planes — Type
cutting_planes{O} <: AbstractReformulationMethodA type for using the cutting planes approach for disjunctive constraints.
Fields
optimizer::O: Optimizer to use when solving mini-models (required).max_iter::Int: Number of iterations (default =3).seperation_tolerance::Float64: Tolerance for the separation problem (default =1e-6).final_reform_method::AbstractReformulationMethod: Final reformulation
method to use after cutting planes (default = BigM()).
M_value::Float64: Big-M value to use in the final reformulation (default =1e9).