Initializing help system before first use

Binary variables

Binary decision variables

  • take value 0 or 1
  • model a discrete decision
    • yes/no
    • on/off
    • open/close
    • build or don't build
    • strategy A or strategy B

Logical conditions

Projects A, B, C, D, ... with associated binary variables a, b, c, d, ... which are 1 if we decide to do the project and 0 if we decide not to do the project.

At most N of A, B, C,... a + b + c + ...≤ N
At least N of A, B, C,... a + b + c + ...≥ N
Exactly N of A, B, C,... a + b + c + ... = N
If A then B b ≥ a
Not B b- = 1-b
If A then not B a + b ≤ 1
If not A then B a + b ≥ 1
If A then B, and if B then A a = b
If A then B and C; A only if B and C b ≥ a and c ≥ a
or alternatively: a ≤ (b + c)/2
If A then B or C b + c ≥ a
If B or C then A a ≥ b and a ≥ c
or alternatively: a ≥
1
2
· (b+c)
If B and C then A a ≥ b + c - 1
If two or more of B, C, D or E then A a ≥
1
3
· (b + c + d + e - 1)
If M or more of N projects (B, C, D, ...) then A a ≥
b + c + d + ... -M +1
N-M+1

Minimum values

y = min{x1, x2} for two continuous variables x1, x2

  • Must know lower and upper bounds

    L1 ≤ x1 ≤ U1 [1.1]
    L2 ≤ x2 ≤ U2 [1.2]

  • Introduce binary variables d1, d2 to mean

    di 1 if xi is the minimum value;
    0 otherwise

  • MIP formulation:

    y ≤ x1 [2.1]
    y ≤ x2 [2.2]
    y ≥ x1 - (U1 - Lmin)(1 - d1) [3.1]
    y ≥ x2 - (U2 - Lmin)(1 - d2) [3.2]
    d1 + d2 = 1 [4]

  • Generalization to y = min{x1, x2, ..., xn}

    Li ≤ xi ≤ Ui [1.i]
    y ≤ xi [2.i]
    y ≥ xi - (Ui - Lmin)(1 - di) [3.i]
    i di = 1 [4]

Maximum values

y = max{x1, x2, ..., xn} for continuous variables x1, ..., xn

  • Must know lower and upper bounds

    Li ≤ xi ≤ Ui [1.i]

  • Introduce binary variables d1, ..., dn
    di=1 if xi is the maximum value, 0 otherwise
  • MIP formulation

    Li ≤ xi ≤ Ui [1.i]
    y ≥ xi [2.i]
    y ≤ xi + (Umax - Li)(1 - di) [3.i]
    i di = 1 [4]

Absolute values

y = | x1 - x2| for two variables x1, x2 with 0 ≤ xi ≤ U

  • Introduce binary variables d1, d2 to mean

    d1 : 1 if x1 - x2 is the positive value
    d2 : 1 if x2 - x1 is the positive value

  • MIP formulation

    0 ≤ xi ≤ U [1.i]
    0 ≤ y - (x1-x2) ≤ 2 · U · d2 [2]
    0 ≤ y - (x2-x1) ≤ 2 · U · d1 [3]
    d1 + d2 = 1 [4]

Logical AND

d = min {d1, d2} for two binary variables d1, d2, or equivalently
d = d1 · d2 (see Section Product values), or
d = d1 AND d2 as a logical expression

  • IP formulation

    d ≤ d1 [1.1]
    d ≤ d2 [1.2]
    d ≥ d1 + d2 - 1 [2]
    d ≥ 0 [3]

  • Generalization to d = min {d1, d2, ..., dn}

    d ≤ di [1.i]
    d ≥ ∑i di - (n - 1) [2]
    d ≥ 0 [3]

    Note: equivalent to d = d1 · d2 · ... · dn
    and (as a logical expression): d = d1 AND d2 AND ... AND dn

Logical OR

d = max {d1, d2} for two binary variables d1, d2, or
d = d1 OR d2 as a logical expression

  • IP formulation

    d ≥ d1 [1.1]
    d ≥ d2 [1.2]
    d ≤ d1 + d2 [2]
    d ≤ 1 [3]

  • Generalization to d = max {d1, d2 , ..., dn}

    d ≥ di [1.i]
    d ≤ ∑i di [2.i]
    d ≤ 1 [3]

    Note: equivalent to d = d1 OR d2 ... OR dn

Logical NOT

d = NOT d1 for one binary variable d1

  • IP formulation

    d = 1 - d1

Product values

y = x · d for one continuous variable x, one binary variable d

  • Must know lower and upper bounds

    L ≤ x ≤ U

  • MIP formulation:

    Ld ≤ y ≤ Ud [1]
    L(1 - d) ≤ x - y ≤ U(1 - d) [2]

Product of two binaries: d3 = d1 · d2

  • MIP formulation:

    d3 ≤ d1
    d3 ≤ d2
    d3 ≥ d1 + d2 -1

Disjunctions

Either 5 ≤ x ≤ 10 or 80 ≤ x ≤ 100

  • Introduce a new binary variable:
    ifupper: 0 if 5 ≤ x ≤ 10; 1 if 80 ≤ x ≤ 100
  • MIP formulation:

    x ≤ 10 + (100 - 10) · ifupper [1]
    x ≥ 5 + ( 80 - 5) · ifupper [2]

  • Generalization to Either L1 ≤ ∑i Ai xi ≤ U1 or L2 ≤ ∑i Ai xi ≤ U2 (with U1 ≤ L2)

    i Ai xi ≤ U1 + (U2 - U1) · ifupper [1]
    i Ai xi ≥ L1 + (L2 - L1) · ifupper [2]

Minimum activity level

Continuous production rate make that may be 0 (the plant is not operating) or between allowed production limits MAKEMIN and MAKEMAX

  • Introduce a binary variable ifmake to mean

    ifmake : 0 if plant is shut
    1 plant is open

    MIP formulation:

    make ≥ MAKEMIN · ifmake [1]
    make ≤ MAKEMAX · ifmake [2]

    Note: see Section Minimum activity level for an alternative formulation using semi-continuous variables
  • The ifmake binary variable also allows us to model fixed costs
    • FCOST: fixed production cost
    • VCOST: variable production cost
    MIP formulation:

    cost = FCOST · ifmake + VCOST · make [3]
    make ≥ MAKEMIN · ifmake [1]
    make ≤ MAKEMAX · ifmake [2]