{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "*This notebook contains course material from [CBE40455](https://jckantor.github.io/CBE40455) by\n", "Jeffrey Kantor (jeff at nd.edu); the content is available [on Github](https://github.com/jckantor/CBE40455.git).\n", "The text is released under the [CC-BY-NC-ND-4.0 license](https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode),\n", "and code is released under the [MIT license](https://opensource.org/licenses/MIT).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Continuous Time Simulation in SimPy](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/02.09-Continuous-Time-Simulation-in-SimPy.ipynb) | [Contents](toc.ipynb) | [Linear Optimization](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/03.00-Linear-Optimization.ipynb) >
"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "faGKi4efxKg9"
},
"source": [
"# Decentralized Control in a Supply Chain"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "_5UGAEiKxKg-"
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import control.matlab as control"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "k8kvcX1_xKhA"
},
"source": [
"## Model"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "k8kvcX1_xKhA"
},
"source": [
"### Inventory Model\n",
"\n",
"We model a single level in a heirarchical supply chain as an inventory, $Y(t)$, that is depleted by customer orders, $D(t)$, and replenished by supplier deliveries. Orders $U(t)$ are sent to the supplier at time $t$ for delivery at time $t+\\tau$. The inventory is then given by\n",
"\n",
"$$\\frac{dY}{dt} = U(t-\\tau) - D(t)$$\n",
"\n",
"In this model, $U(t)$ and $D(t)$ have units of flowrate (i.e, quantity per unit time), whereas $Y$ has units of quantity.\n",
"\n",
"We further assume the customer demand is characterized by a stationary but perhaps unknown mean value $\\bar{D}$, and the inventory is controlled to a desired target level $\\bar{R}$. "
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "k8kvcX1_xKhA"
},
"source": [
"### Deviation Variables\n",
"\n",
"We introduce deviation variables for the actual and target inventories\n",
"\n",
"\\begin{align*}\n",
"y(t) & = Y(t) - \\bar{Y} \\\\\n",
"r(t) & = R(t) - \\bar{R}\n",
"\\end{align*}\n",
"\n",
"and for the product flows\n",
"\n",
"\\begin{align*}\n",
"d(t) & = D(t) - \\bar{D} \\\\\n",
"u(t) & = U(t) - \\bar{U} \\\\\n",
"\\end{align*}\n",
"\n",
"normally we expect $\\bar{Y} = \\bar{R}$ and $\\bar{U} = \\bar{D}$. The deviation variables can represent positive or negative deviations from nominal steady-state conditions."
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "k8kvcX1_xKhA"
},
"source": [
"### Inventory Model in Deviation Variables\n",
"\n",
"In deviation variables, the deviation of the inventory level from a nominal value $\\bar{Y}$ is given by\n",
"\n",
"$$\\frac{dy}{dt} = u(t-\\tau) - d(t)$$\n",
"\n",
"where $u$ and $d$ denote deviations from nominal conditions. After the Laplace transform (assuming zero initial conditions), the following transfer function model\n",
"\n",
"$$y(s) = \\frac{1}{s}e^{-\\tau s}u(s) - \\frac{1}{s}d(s)$$\n",
"\n",
"is obtained for the response of the inventory to downstream customer demand and orders sent to the upstream suppliers."
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "cbMNeNAWxKhB"
},
"source": [
"## Ordering Policies\n",
"\n",
"Here we consider the case of a single operator within a multi-level supply chain. The operator wishes to be part of a successful supply chain, but otherwise has only for the operator's own facility. We consider ordering policies for $u(s)$ that can be expressed as transfer functions operating on the available signals $y(s)$, $r(s)$, and $d(s)$. "
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "cbMNeNAWxKhB"
},
"source": [
"### Feed-forward Ordering based on Customer Demand\n",
"\n",
"A feed-forward policy would be to filter customer demand to determine orders,\n",
"\n",
"$$u(s) = K_d(s) d(s)$$\n",
"\n",
"where the single transfer function $K_d(s)$ is to be designed."
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "cbMNeNAWxKhB"
},
"source": [
"### Ordering based on Feedback Control of Inventory\n",
"\n",
"Feedback control is given by\n",
"\n",
"$$u(s) = K_e(s)\\left[r(s) - y(s)\\right]$$\n",
"\n",
"where $K_e(s)$ is the feedback policy determined by the 'error' $e(s) = r(s) - y(s)$, or difference, between the inventory target and actual inventory levels."
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "cbMNeNAWxKhB"
},
"source": [
"### Ordering based on 2DOF Feedback Control of Inventory\n",
"\n",
"The feedback policy can be further parameterized as\n",
"\n",
"$$u(s) = K_r(s)r(s) - K_y(s)y(s)$$\n",
"\n",
"where separate transfer functions are used for setpoint and process feedback."
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "cbMNeNAWxKhB"
},
"source": [
"### A 3 DOF Feed-forward plus Feedback Ordering Policy\n",
"\n",
"As a final consideration, we can write the ordering policy as \n",
"\n",
"$$u(s) = = K_r(s)r(s) - K_y(s)y(s) + K_d(s)d(s)$$\n",
"\n",
"where the three degrees of freedom are the choices of $K_r(s)$, $K_y(s)$, and $K_d(s)$."
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "6UPqj4nqxKhC"
},
"source": [
"### Closed-Loop Model\n",
"\n",
"Solving for $u(s)$,\n",
"\n",
"$$u(s) = \\left[P(s) - K(s)G(s)]d(s) = $$"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "lIxWgjVTxKhD",
"outputId": "5ae11d7a-06fb-47d2-e5b7-9456e9aad7c4"
},
"outputs": [
{
"data": {
"image/png": "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\nT/x/ZDbCEpaVQAcAAAAASUVORK5CYII=\n",
"text/plain": [
" "
]
}
],
"metadata": {
"colab": {
"collapsed_sections": [],
"name": "04.08-Decentralized-Control-in-a-Supply-Chain.ipynb",
"provenance": [],
"version": "0.3.2"
},
"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.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}