Set bridges
ConstraintProgrammingExtensions.Bridges.add_all_set_bridges
— Functionadd_all_set_bridges(bridged_model, ::Type{T}) where {T}
Add all set bridges defined in the Bridges
submodule to bridged_model
. The coefficient type used is T
.
ConstraintProgrammingExtensions.Bridges.AbsoluteValue2MILPBridge
— TypeBridges CP.AbsoluteValue
to linear constraints and integer constraints.
The implemented model is the most generic one, so that the absolute value always has a well-defined value. This requires the use of a binary variable. In many cases, this is not necessary, and simpler models could be used, but checking this automatically would require access to the whole model.
Based on Mosek's modelling cookbook.
YALMIP implements a similar formulation, with big-M and small-m values computed based on the bounds for each variable.
ConstraintProgrammingExtensions.Bridges.AllDifferent2DifferentFromBridge
— TypeBridges CP.AllDifferent
to a series of CP.DifferentFrom
.
ConstraintProgrammingExtensions.Bridges.AllDifferentExceptConstants2ConjunctionDisjunctionBridge
— TypeBridges CP.AllDifferentExceptConstants
to a series of CP.Disjunction
of CP.DifferentFrom
and CP.Domain
.
ConstraintProgrammingExtensions.Bridges.AllDifferentExceptConstants2ReificationBridge
— TypeBridges CP.AllDifferentExceptConstants
to reifications.
ConstraintProgrammingExtensions.Bridges.AllEqual2EqualToBridge
— TypeBridges CP.AllEqual
to a series of CP.EqualTo
.
ConstraintProgrammingExtensions.Bridges.ArgumentMaximumAmong2MILPBridge
— TypeBridges CP.ArgumentMaximumAmong
to MILP formulations, by the means of big-M constraints.
ConstraintProgrammingExtensions.Bridges.ArgumentMinimumAmong2MILPBridge
— TypeBridges CP.ArgumentMinimumAmong
to MILP formulations, by the means of big-M constraints.
ConstraintProgrammingExtensions.Bridges.BinPacking2MILPBridge
— TypeBridges CP.BinPacking
to a MILP by creating binary variables for the bin assignment and MILP constraints.
ConstraintProgrammingExtensions.Bridges.FixedCapacityBinPacking2BinPackingBridge
— TypeBridges CP.BinPacking{CP.FIXED_CAPACITY_BINPACKING}
to CP.BinPacking{CP.NO_CAPACITY_BINPACKING}
by adding constraints on the capacity variables.
ConstraintProgrammingExtensions.Bridges.FixedCapacityBinPacking2VariableCapacityBinPackingBridge
— TypeBridges CP.BinPacking{CP.FIXED_CAPACITY_BINPACKING, T}
to CP.BinPacking{CP.VARIABLE_CAPACITY_BINPACKING, T}
by creating capacity variables.
ConstraintProgrammingExtensions.Bridges.VariableCapacityBinPacking2BinPackingBridge
— TypeBridges CP.BinPacking{CP.VARIABLE_CAPACITY_BINPACKING, T}
to CP.BinPacking{CP.NO_CAPACITY_BINPACKING, T}
by adding constraints on the capacity variables.
ConstraintProgrammingExtensions.Bridges.GlobalCardinalityFixedClosed2GlobalCardinalityFixedOpenBridge
— TypeBridges CP.GlobalCardinality{CP.FIXED_COUNTED_VALUES, CP.CLOSED_COUNTED_VALUES, T}
to CP.GlobalCardinality{CP.FIXED_COUNTED_VALUES, CP.OPEN_COUNTED_VALUES, T
.
ConstraintProgrammingExtensions.Bridges.GlobalCardinalityVariableClosed2GlobalCardinalityVariableOpenBridge
— TypeBridges GlobalCardinality{CP.VARIABLE_COUNTED_VALUES, CP.CLOSED_COUNTED_VALUES, T}
to GlobalCardinality{CP.VARIABLE_COUNTED_VALUES, CP.OPEN_COUNTED_VALUES, T}
.
ConstraintProgrammingExtensions.Bridges.Conjunction2ReificationBridge
— TypeBridges CP.Conjunction
to reification.
ConstraintProgrammingExtensions.Bridges.Count2ReificationBridge
— TypeBridges CP.Count
to reification.
ConstraintProgrammingExtensions.Bridges.CountCompare2CountBridge
— TypeBridges CP.CountCompare
to CP.Count
.
ConstraintProgrammingExtensions.Bridges.Decreasing2LPBridge
— TypeBridges CP.Decreasing
to linear constraints.
ConstraintProgrammingExtensions.Bridges.DifferentFrom2PseudoMILPBridge
— TypeBridges CP.DifferentFrom
to linear constraints (including, possibly, strict inequalities). This constraint adds one variable to store the absolute value of the difference, and constrains it to be nonzero.
For AbstractFloat
arguments (like Float64
): equivalent to abs(x) > 0.0, i.e. a Strictly(GreaterThan(0.0))
.
ConstraintProgrammingExtensions.Bridges.IndicatorDifferentFrom2PseudoMILPBridge
— TypeBridges MOI.Indicator{A, CP.DifferentFrom}
to linear constraints (including, possibly, strict inequalities). This constraint adds one variable to store the absolute value of the difference, and uses it for the indicator.
For AbstractFloat
arguments (like Float64
): equivalent to abs(x) > 0.0, i.e. a Strictly(GreaterThan(0.0))
.
ConstraintProgrammingExtensions.Bridges.ReificationDifferentFrom2IndicatorBridge
— TypeBridges CP.Reification{CP.DifferentFrom}
to indicator constraints, both with equality and inequalities (CP.DifferentFrom).
ConstraintProgrammingExtensions.Bridges.ReificationDifferentFrom2MILPBridge
— TypeBridges CP.Reification{CP.DifferentFrom}
to MILP constraints.
ConstraintProgrammingExtensions.Bridges.Disjunction2ReificationBridge
— TypeBridges CP.Disjunction
to reification.
ConstraintProgrammingExtensions.Bridges.Domain2MILPBridge
— TypeBridges CP.Domain
to MILP by adding one binary variable per possible combination.
ConstraintProgrammingExtensions.Bridges.DoublyLexicographicallyLessThan2LexicographicallyLessThanBridge
— TypeBridges CP.DoublyLexicographicallyLessThan
to CP.LexicographicallyLessThan
.
ConstraintProgrammingExtensions.Bridges.DoublyLexicographicallyGreaterThan2LexicographicallyGreaterThanBridge
— TypeBridges CP.DoublyLexicographicallyGreaterThan
to CP.LexicographicallyGreaterThan
.
ConstraintProgrammingExtensions.Bridges.Element2MILPBridge
— TypeBridges CP.Element
to MILP constraints by using a unary encoding of the index in the array.
ConstraintProgrammingExtensions.Bridges.ElementVariableArray2MILPBridge
— TypeBridges CP.ElementVariableArray
to MILP constraints by using a unary encoding of the index in the array.
ConstraintProgrammingExtensions.Bridges.ReificationEqualTo2IndicatorBridge
— TypeBridges CP.Reification{MOI.EqualTo}
to indicator constraints, both with equality and inequalities (CP.DifferentFrom).
ConstraintProgrammingExtensions.Bridges.ReificationEqualTo2MILPBridge
— TypeBridges CP.Reification{MOI.EqualTo}
to MILP constraints.
ConstraintProgrammingExtensions.Bridges.ReificationGreaterThan2IndicatorBridge
— TypeBridges CP.Reification{MOI.GreaterThan}
to indicator constraints with (strict) inequalities.
ConstraintProgrammingExtensions.Bridges.ReificationGreaterThan2MILPBridge
— TypeBridges CP.Reification{MOI.GreaterThan}
to MILP constraints.
ConstraintProgrammingExtensions.Bridges.GlobalCardinalityFixedOpen2CountBridge
— TypeBridges CP.GlobalCardinality
to CP.Count
.
ConstraintProgrammingExtensions.Bridges.GlobalCardinalityFixedOpen2GlobalCardinalityVariableOpenBridge
— TypeBridges CP.GlobalCardinality
to CP.GlobalCardinalityVariable
.
ConstraintProgrammingExtensions.Bridges.GlobalCardinalityVariableOpen2CountBridge
— TypeBridges CP.GlobalCardinality{CP.VARIABLE_COUNTED_VALUES, CP.OPEN_COUNTED_VALUES, T}
to CP.Count
.
ConstraintProgrammingExtensions.Bridges.IfThenElse2ImplicationBridge
— TypeBridges CP.IfThenElse
to CP.Implication
.
ConstraintProgrammingExtensions.Bridges.IfThenElse2ReificationBridge
— TypeBridges CP.IfThenElse
to reification.
ConstraintProgrammingExtensions.Bridges.Implication2ReificationBridge
— TypeBridges CP.Implication
to reification.
ConstraintProgrammingExtensions.Bridges.Increasing2LPBridge
— TypeBridges CP.Increasing
to linear constraints.
ConstraintProgrammingExtensions.Bridges.Inverse2ReificationBridge
— TypeBridges CP.Inverse
to reification.
ConstraintProgrammingExtensions.Bridges.Knapsack2MILPBridge
— TypeBridges CP.Knapsack{KCT, KVT}
to a MILP by adding the corresponding MILP constraint.
ConstraintProgrammingExtensions.Bridges.Knapsack2VariableCapacityKnapsackBridge
— TypeBridges CP.Knapsack{CP.FIXED_CAPACITY_KNAPSACK, CP.UNVALUED_KNAPSACK}
to CP.Knapsack{CP.VARIABLE_CAPACITY_KNAPSACK, CP.UNVALUED_KNAPSACK}
by creating capacity variables.
ConstraintProgrammingExtensions.Bridges.ValuedKnapsack2KnapsackBridge
— TypeBridges CP.Knapsack{CP.FIXED_CAPACITY_KNAPSACK, CP.VALUED_KNAPSACK, T}
to CP.Knapsack{CP.FIXED_CAPACITY_KNAPSACK, CP.UNVALUED_KNAPSACK, T}
by creating a value constraint.
ConstraintProgrammingExtensions.Bridges.VariableCapacityValuedKnapsack2VariableCapacityKnapsackBridge
— TypeBridges CP.Knapsack{CP.VARIABLE_CAPACITY_KNAPSACK, CP.VALUED_KNAPSACK, }
to CP.Knapsack{CP.VARIABLE_CAPACITY_KNAPSACK, CP.UNVALUED_KNAPSACK, T}
by creating a value constraint.
ConstraintProgrammingExtensions.Bridges.ReificationLessThan2IndicatorBridge
— TypeBridges CP.Reification{MOI.LessThan}
to indicator constraints with (strict) inequalities.
ConstraintProgrammingExtensions.Bridges.ReificationLessThan2MILPBridge
— TypeBridges CP.Reification{MOI.LessThan}
to MILP constraints.
ConstraintProgrammingExtensions.Bridges.LexicographicallyGreaterThan2IndicatorBridge
— TypeBridges CP.LexicographicallyGreaterThan
to indicators.
ConstraintProgrammingExtensions.Bridges.LexicographicallyLessThan2IndicatorBridge
— TypeBridges CP.LexicographicallyLessThan
to indicators.
ConstraintProgrammingExtensions.Bridges.StrictlyDecreasing2LPBridge
— TypeBridges CP.Strictly{CP.Decreasing}
to linear constraints.
ConstraintProgrammingExtensions.Bridges.DoublyStrictlyLexicographicallyLessThan2StrictlyLexicographicallyGreaterThanBridge
— TypeBridges CP.Strictly{CP.DoublyLexicographicallyGreaterThan}
to CP.Strictly{CP.LexicographicallyGreaterThan}
.
ConstraintProgrammingExtensions.Bridges.DoublyStrictlyLexicographicallyLessThan2StrictlyLexicographicallyLessThanBridge
— TypeBridges CP.Strictly{CP.DoublyLexicographicallyLessThan}
to CP.Strictly{CP.LexicographicallyLessThan}
.
ConstraintProgrammingExtensions.Bridges.StrictlyIncreasing2LPBridge
— TypeBridges CP.Strictly{CP.Increasing}
to linear constraints.
ConstraintProgrammingExtensions.Bridges.StrictlyLexicographicallyGreaterThan2IndicatorBridge
— TypeBridges CP.Strictly{CP.LexicographicallyGreaterThan}
to indicators.
ConstraintProgrammingExtensions.Bridges.StrictlyLexicographicallyLessThan2IndicatorBridge
— TypeBridges CP.Strictly{CP.LexicographicallyLessThan}
to indicators.
ConstraintProgrammingExtensions.Bridges.Strictly2LPBridge
— TypeBridges CP.Strictly
to linear constraints.
ConstraintProgrammingExtensions.Bridges.MaximumAmong2MILPBridge
— TypeBridges CP.MaximumAmong
to MILP formulations, by the means of big-M constraints.
ConstraintProgrammingExtensions.Bridges.MinimumAmong2MILPBridge
— TypeBridges CP.MinimumAmong
to MILP formulations, by the means of big-M constraints.
ConstraintProgrammingExtensions.Bridges.NonOverlappingOrthotopes2DisjunctionLPBridge
— TypeBridges CP.NonOverlappingOrthotopes
to CP.Disjunction
of linear inequations (MOI.LessThan{T}
).
Variable number of constraints in the disjunction (two per dimension).
ConstraintProgrammingExtensions.Bridges.NonOverlappingOrthotopes2ConditionallyNonOverlappingOrthotopesBridge
— TypeBridges CP.NonOverlappingOrthotopes{CP.UNCONDITIONAL_NONVERLAPPING_ORTHOTOPES}
to CP.NonOverlappingOrthotopes{CP.CONDITIONAL_NONVERLAPPING_ORTHOTOPES}
.
ConstraintProgrammingExtensions.Bridges.Sort2MILPBridge
— TypeBridges CP.Sort
to MILP constraints by adding O(n²) binary variables, with a transportation-like model.
Detailed model
Let x
be the array to sort and y
its sorted copy, both vectors having length n
. This bridge handles the constraint [y..., x...]
-in-CP.Sort(n)
.
Two sets of variables:
f[i, j]
: real variable,i
from 1 ton
; the "flow" from the array to sort to the sorted copy, equal to the value ofx[i]
andy[j]
a[i, j]
: binary variable,i
from 1 ton
;a[i, j]
indicates whether the flowf[i, j]
is nonzero
Constraints:
- Flow coming from the array to sort
x
: $x_i = \sum_{j=1}^n f_{i,j} \qquad \forall i \in \{1, 2\dots n\}$ - Flow going to the sorted array: $y_j = \sum_{i=1}^n f_{i,j} \qquad \forall j \in \{1, 2\dots n\}$
- The flow from one value of the array to sort can only go to one element of the sorted array: $\sum_{i=1}^n a_{i,j} = 1 \qquad \forall j \in \{1, 2\dots n\}$
- The flow to one value of the sorted array can only come from one element of the array to sort: $\sum_{j=1}^n a_{i,j} = 1 \qquad \forall i \in \{1, 2\dots n\}$
- The flow
f[i, j]
is related to the binary variablea[i, j]
: $U a_{i,j} \leq f_{i,j} \leq L a_{i,j} \qquad \forall (i,j) \in \{1, 2\dots n\}^2$ - The array
y
must be sorted: $y_{j-1} \leq y_{j} \qquad \forall j \in \{2, 3\dots n\}$
ConstraintProgrammingExtensions.Bridges.Sort2SortPermutationBridge
— TypeBridges CP.Sort
to CP.SortPermutation
by adding index variables.
ConstraintProgrammingExtensions.Bridges.SortPermutation2AllDifferentBridge
— TypeBridges CP.SortPermutation
to CP.AllDifferent
and CP.ElementVariableArray
.
ConstraintProgrammingExtensions.Bridges.SlidingSum2LPBridge
— TypeBridges CP.SlidingSum
to linear constraints.
ConstraintProgrammingExtensions.Bridges.SymmetricAllDifferent2AllDifferentInverseBridge
— TypeBridges CP.SymmetricAllDifferent
to CP.AllDifferent
and CP.Inverse
.
ConstraintProgrammingExtensions.Bridges.ValuePrecedence2ReificationBridge
— TypeBridges CP.ValuePrecedence
to reification.
ConstraintProgrammingExtensions.Bridges.VectorDomain2MILPBridge
— TypeBridges CP.VectorDomain
to MILP by adding one binary variable per possible combination.