None Notebook

This notebook contains material from ND-Pyomo-Cookbook; content is available on Github. The text is released under the CC-BY-NC-ND-4.0 license, and code is released under the MIT license.

< 4.0 Scheduling with Disjunctive Constraints | Contents | Tag Index | 4.2 Machine Bottleneck >

Open in Colab

Download

4.1 Introduction to Disjunctive Programming

4.1.1 Installations and imports

4.1.2 Problem statement

4.1.2.1 Component data

4.1.2.2 Product Composition Requirements

Find the lowest cost blend

Your code should be able to accept alternative specification for data and product requirements.

4.1.2.3 Component Compatibility

For this application, we consider an additional type of constraint specifying the incompatability of certain blends of components. For example, suppose we have a constraint:

The constraint is specified by creating a list of incompatabile pairs.

4.1.3 Version 0: Neglecting the compatibility requirments

4.1.4 Version 1: Including compatibility requirements with Big-M

The challenge of this problem are the disjunctive constraints associated with the component incompatability data. Here we associated a boolean variable for each pair, then use the boolean variable to determine which member of the pair to keep in the blend.

4.1.5 Version 2. Disjunctive Constraints

4.1.6 Analysis

\begin{align*} x_A + x_B + x_C & = 1 \\ 0.5 x_A + 0.4 x_B + 0.3 x_C & \leq 0.4 \\ 0.2 x_A + 0.1 x_B + 0.3 x_C & \geq 0.2 \\ \end{align*}

Solving for x_C

\begin{align*} x_C & = 1 - x_A - x_B \end{align*}

Substitution

\begin{align*} 0.2 x_A + 0.1 x_B & \leq 0.1 \\ -0.1 x_A - 0.2 x_B & \geq -0.1 \\ \end{align*}

< 4.0 Scheduling with Disjunctive Constraints | Contents | Tag Index | 4.2 Machine Bottleneck >

Open in Colab

Download