{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Overview of State Task Networks (not finished)\n", "\n", "## References\n", "\n", "Floudas, C. A., & Lin, X. (2005). Mixed integer linear programming in process scheduling: Modeling, algorithms, and applications. Annals of Operations Research, 139(1), 131-162.\n", "\n", "Harjunkoski, I., Maravelias, C. T., Bongers, P., Castro, P. M., Engell, S., Grossmann, I. E., ... & Wassick, J. (2014). Scope for industrial applications of production scheduling models and solution methods. Computers & Chemical Engineering, 62, 161-193.\n", "\n", "Kondili, E., Pantelides, C. C., & Sargent, R. W. H. (1993). A general algorithm for short-term scheduling of batch operations—I. MILP formulation. Computers & Chemical Engineering, 17(2), 211-227.\n", "\n", "Maravelias, C. T., and Grossmann (2003). New General Continuous-Time State−Task Network Formulation for Short-Term Scheduling of Multipurpose Batch Plants. Industrial & Engineering Chemistry Research, 42 (13), 3056-3074.\n", "\n", "Méndez, C. A., Cerdá, J., Grossmann, I. E., Harjunkoski, I., & Fahl, M. (2006). State-of-the-art review of optimization methods for short-term scheduling of batch processes. Computers & Chemical Engineering, 30(6), 913-946.\n", "\n", "Shah, N., Pantelides, C. C., & Sargent, R. W. H. (1993). A general algorithm for short-term scheduling of batch operations—II. Computational issues. Computers & Chemical Engineering, 17(2), 229-244.\n", "\n", "Wassick, J. M., & Ferrio, J. (2011). Extending the resource task network for industrial applications. Computers & chemical engineering, 35(10), 2124-2140." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Creating a Pyomo Model\n", "\n", "The following Pyomo model closely follows the development in Kondili, et al. (1993). In particular, the first step in the model is to process the STN data to create sets as given in Kondili. \n", "\n", "One important difference from Kondili is the adoption of a more natural time scale that starts at $t = 0$ and extends to $t = H$ (rather than from 1 to H+1), and which may take real values.\n", "\n", "The basic decision variables are the assignment of a unit $j$ to a task $i$ at time $t$ which is indicated by the boolean variable $W_{ijt}$. \n", "\n", "A second difference is the introduction of an additional decision variable denoted by $Q_{j,t}$ indicating the amount of material in unit $j$ at time $t$. A material balance then reads\n", "\n", "\\begin{align*}\n", "Q_{jt} & = Q_{j(t-1)} + \\sum_{i\\in I_j}B_{ijt} - \\sum_{i\\in I_j}\\sum_{\\substack{s \\in \\bar{S}_i\\\\s\\ni t-P_{is} \\geq 0}}\\bar{\\rho}_{is}B_{ij(t-P_{is})} \\qquad \\forall j,t\n", "\\end{align*}\n", "\n", "Following Kondili's notation, $I_j$ is the set of tasks that can be performed in unit $j$, and $\\bar{S}_i$ is the set of states fed by task $j$. We assume the units are empty at the beginning and end of production period, i.e.,\n", "\n", "\\begin{align*}\n", "Q_{j(-1)} & = 0 \\qquad \\forall j \\\\\n", "Q_{j,H} & = 0 \\qquad \\forall j\n", "\\end{align*}\n", "\n", "The unit allocation constraints are written the full backward aggregation method described by Shah (1993). The allocation constraint reads\n", "\n", "\\begin{align*}\n", "\\sum_{i \\in I_j} \\sum_{t'=t}^{t-p_i+1} W_{ijt'} & \\leq 1 \\qquad \\forall j,t\n", "\\end{align*}\n", "\n", "Each processing unit $j$ is tagged with a minimum and maximum capacity, $B_{ij}^{min}$ and $B_{ij}^{max}$, respectively, denoting the minimum and maximum batch sizes for each task $i$. A minimum capacity may be needed to cover heat exchange coils in a reactor or mixing blades in a blender, for example. The capacity may depend on the nature of the task being performed. These constraints are written\n", "\n", "\\begin{align*}\n", "B_{ij}^{min}W_{ijt} & \\leq B_{ijt} \\leq B_{ij}^{max}W_{ijt} \\qquad \\forall j, \\forall i\\in I_j, \\forall t\n", "\\end{align*}" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }