You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
After defining a JuMP model, disjunctions can be added to the model by specifying which of the original JuMP model constraints should be assigned to each disjunction. The constraints that are assigned to the disjunctions will no longer be general model constraints, but will belong to the disjunction that they are assigned to. These constraints must be either `GreaterThan`, `LessThan`, or `EqualTo` constraints. Constraints that are of `Interval` type are currently not supported. It is assumed that the disjuncts belonging to a disjunction are proper disjunctions (mutually exclussive) and only one of them will be selected.
14
14
15
-
When a disjunction is defined using the `@disjunction` macro, the disjunctions are reformulated to algebraic constraints via the Big-M method (`reformulation = :BMR`) or the Convex Hull (`reformulation = :CHR`) as described [here](https://optimization.mccormick.northwestern.edu/index.php/Disjunctive_inequalities). For the Convex Hull Reformulation on a nonlinear model, the perspective function proposed in [Furman, et al. [2020]](https://link.springer.com/article/10.1007/s10589-020-00176-0) is used.
15
+
When a disjunction is defined using the `@disjunction` macro, the disjunctions are reformulated to algebraic constraints via either,
16
+
- The Big-M method (when `reformulation = :BMR` in the `@disjunction` macro)
17
+
- The Convex-Hull (when `reformulation = :CHR` in the `@disjunction` macro)
18
+
These approaches are described [here](https://optimization.mccormick.northwestern.edu/index.php/Disjunctive_inequalities). For the Convex-Hull reformulation, disaggregated variables are generated by adding the suffix `_$name$i` to the original variables, where `i` is the index of the disjunct in that disjunction. Bounding constraints are applied to the disaggregated variables and can be accessed with `model[Symbol("$<original var>_$name$i_lb")]` and `model[Symbol("$<original var>_$name$i_ub")]` for the lower bound and upper bound constraints, respectively. The aggregation constraint can be accessed with `model[Symbol("$<original var>_aggregation")]` When the Convex-Hull reformulation is applied to a nonlinear model, the perspective function proposed in [Furman, et al. [2020]](https://link.springer.com/article/10.1007/s10589-020-00176-0) is used.
16
19
17
-
When calling the `@disjunction` macro, a `name::Symbol` keyword argument can be specified to define the name of the indicator variable to be used for that disjunction. Otherwise, (`name = missing`) a symbolic name will be generated with the prefix `disj`.
20
+
When calling the `@disjunction` macro, a `name::Symbol` keyword argument can be specified to define the name of the binary indicator variable to be used for that disjunction. Otherwise, (`name = missing`) a symbolic name will be generated with the prefix `disj`. The mutual exclussion constraint on the binary indicator variables can be accessed with `model[Symbol("XOR($name)")]`.
18
21
19
22
For Big-M reformulations, the user may provide an `M` object that represents the BigM value(s). The `M` object can be a `Number` that is applied to all constraints in the disjuncts, or a `Vector`/`Tuple` of values that are used for each of the disjuncts. For Convex-Hull reformulations, the user may provide an `ϵ` value for the perspective function (default is `ϵ = 1e-6`). The `ϵ` object can be a `Number` that is applied to all perspective functions, or a `Vector`/`Tuple` of values that are used for each of the disjuncts.
20
23
@@ -24,7 +27,13 @@ NOTE: `:gdp_variable_refs` and `:gdp_variable_names` are forbidden JuMP model ob
24
27
25
28
## Logical Propositions
26
29
27
-
Boolean logic can be included in the model by using the `@proposition` macro. This macro will take an expression that uses only binary variables from the model (typically a subset of the indicator variables used in the disjunctions) and one or more of the following Boolean operators: `∨` (or, typed with `\vee + tab`), `∧` (and, typed with `\wedge + tab`), `¬` (negation, typed with `\neg + tab`), `⇒` (implication, typed with `\Rightarrow + tab`), `⇔` (double implication or equivalence, typed with `\Leftrightarrow + tab`).
30
+
Boolean logic can be included in the model by using the `@proposition` macro. This macro will take an expression that uses only binary variables from the model (typically a subset of the indicator variables used in the disjunctions) and one or more of the following Boolean operators:
31
+
-`∨` (or, typed with `\vee + tab`)
32
+
-`∧` (and, typed with `\wedge + tab`)
33
+
-`¬` (negation, typed with `\neg + tab`)
34
+
-`⇒` (implication, typed with `\Rightarrow + tab`)
35
+
-`⇔` (double implication or equivalence, typed with `\Leftrightarrow + tab`)
36
+
The logical proposition is then internally reformulated to an algebraic constraint that is added to the model. This constrait can be accessed with `model[Symbol("<logical proposition expression>")]`.
0 commit comments