Skip to content

Commit 589c94a

Browse files
committed
update readme
1 parent f7422df commit 589c94a

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

README.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,12 @@ Pkg.add("DisjunctiveProgramming")
1212

1313
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.
1414

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.
1619

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)")]`.
1821

1922
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.
2023

@@ -24,7 +27,13 @@ NOTE: `:gdp_variable_refs` and `:gdp_variable_names` are forbidden JuMP model ob
2427

2528
## Logical Propositions
2629

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>")]`.
2837

2938
## Example
3039

0 commit comments

Comments
 (0)