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 MOI.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,ifrom 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,ifrom 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
ymust 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 MOI.AllDifferent and CP.ElementVariableArray.
ConstraintProgrammingExtensions.Bridges.SlidingSum2LPBridge — TypeBridges CP.SlidingSum to linear constraints.
ConstraintProgrammingExtensions.Bridges.SymmetricAllDifferent2AllDifferentInverseBridge — TypeBridges CP.SymmetricAllDifferent to MOI.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.