{ "cells": [ { "cell_type": "markdown", "metadata": { "nbpages": { "level": 0, "link": "[](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html)", "section": "" } }, "source": [ "\n", "*This notebook contains material from [cbe30338-2021](https://jckantor.github.io/cbe30338-2021);\n", "content is available [on Github](https://github.com/jckantor/cbe30338-2021.git).*\n" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 0, "link": "[](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html)", "section": "" } }, "source": [ "\n", "< [6.1 Static Operability](https://jckantor.github.io/cbe30338-2021/06.01-Static-Operability.html) | [Contents](toc.html) | [Tag Index](tag_index.html) | [6.3 Predictive Control](https://jckantor.github.io/cbe30338-2021/06.03-Predictive-Control.html) >

\"Open

\"Download\"" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 1, "link": "[6.2 Simulation and Open-Loop Optimal Control](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2-Simulation-and-Open-Loop-Optimal-Control)", "section": "6.2 Simulation and Open-Loop Optimal Control" } }, "source": [ "# 6.2 Simulation and Open-Loop Optimal Control\n", "\n", "This notebook demonstrates the use of CVXPY for the simulation and computation of open-loop optimal control. The notebook includes a lab exercise." ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[6.2.1 Heater Model](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.1-Heater-Model)", "section": "6.2.1 Heater Model" } }, "source": [ "## 6.2.1 Heater Model" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[6.2.1.1 Model](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.1.1-Model)", "section": "6.2.1.1 Model" } }, "source": [ "### 6.2.1.1 Model\n", "\n", "We will use the two-state model for a single heater/sensor assembly for the calculations that follow.\n", "\n", "\\begin{align}\n", "C^H_p\\frac{dT_{H,1}}{dt} & = U_a(T_{amb} - T_{H,1}) + U_b(T_{S,1} - T_{H,1}) + \\alpha P_1 u_1\\\\\n", "C^S_p\\frac{dT_{S,1}}{dt} & = U_b(T_{H,1} - T_{S,1}) \n", "\\end{align}\n", "\n", "The model is recast into linear state space form as\n", "\n", "\\begin{align}\n", "\\frac{dx}{dt} & = A x + B_u u + B_d d \\\\\n", "y & = C x\n", "\\end{align}\n", "\n", "where\n", "\n", "$$x = \\begin{bmatrix} T_{H,1} \\\\ T_{S,1} \\end{bmatrix}\n", "\\qquad\n", "u = \\begin{bmatrix} u_1 \\end{bmatrix}\n", "\\qquad\n", "d = \\begin{bmatrix} T_{amb} \\end{bmatrix}\n", "\\qquad\n", "y = \\begin{bmatrix} T_{S,1} \\end{bmatrix}$$\n", "\n", "and\n", "\n", "$$A = \\begin{bmatrix} -\\frac{U_a+U_b}{C^H_p} & \\frac{U_b}{C^H_p} \\\\ \\frac{U_b}{C^S_p} & -\\frac{U_b}{C^S_p} \\end{bmatrix}\n", "\\qquad\n", "B_u = \\begin{bmatrix} \\frac{\\alpha P_1}{C^H_p} \\\\ 0 \\end{bmatrix}\n", "\\qquad\n", "B_d = \\begin{bmatrix} \\frac{U_a}{C_p^H} \\\\ 0 \\end{bmatrix}\n", "\\qquad\n", "C = \\begin{bmatrix} 0 & 1 \\end{bmatrix}$$\n" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[6.2.1.2 Parameter Values](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.1.2-Parameter-Values)", "section": "6.2.1.2 Parameter Values" } }, "source": [ "### 6.2.1.2 Parameter Values" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "nbpages": { "level": 3, "link": "[6.2.1.2 Parameter Values](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.1.2-Parameter-Values)", "section": "6.2.1.2 Parameter Values" } }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import cvxpy as cp\n", "\n", "# parameter estimates.\n", "alpha = 0.00016 # watts / (units P * percent U1)\n", "P1 = 200 # P units\n", "P2 = 100 # P units\n", "Ua = 0.050 # heat transfer coefficient from heater to environment\n", "CpH = 2.2 # heat capacity of the heater (J/deg C)\n", "CpS = 1.9 # heat capacity of the sensor (J/deg C)\n", "Ub = 0.021 # heat transfer coefficient from heater to sensor\n", "\n", "# state space model\n", "A = np.array([[-(Ua + Ub)/CpH, Ub/CpH], [Ub/CpS, -Ub/CpS]])\n", "Bu = np.array([[alpha*P1/CpH], [0]]) # single column\n", "Bd = np.array([[Ua/CpH], [0]]) # single column\n", "C = np.array([[0, 1]]) # single rowe" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[6.2.2 The Control Problem](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.2-The-Control-Problem)", "section": "6.2.2 The Control Problem" } }, "source": [ "## 6.2.2 The Control Problem\n", "\n", "For the purposes of this notebook, the control problem is to find a control policy $u(t)$ for the interval $0 \\leq t \\leq t_f$ which causes the output $y(t)$ to track a desired setpoint or reference tracjectory $r(t)$." ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[6.2.2.1 Reference Tractory](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.2.1-Reference-Tractory)", "section": "6.2.2.1 Reference Tractory" } }, "source": [ "### 6.2.2.1 Reference Tractory\n", "\n", "The reference trajectory is a sequence of ramp/soak intervals. Python function `r(t)` uses `numpy.interp` to compute values of the reference trajectory at any point in time." ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "nbpages": { "level": 3, "link": "[6.2.2.1 Reference Tractory](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.2.1-Reference-Tractory)", "section": "6.2.2.1 Reference Tractory" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "

" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# time grid\n", "tf = 1000\n", "dt = 2\n", "n = round(tf/dt)\n", "t_grid = np.linspace(0, 1000, n+1)\n", "\n", "# ambient temperature\n", "Tamb = 21\n", "\n", "# setpoint/reference\n", "def r(t):\n", " return np.interp(t, [0, 50, 150, 450, 550], [Tamb, Tamb, 60, 60, 35])\n", "\n", "# plot function\n", "fig, ax = plt.subplots(1, 1, figsize=(10, 3))\n", "ax.plot(t_grid, r(t_grid), label=\"setpoint\")\n", "ax.set_title('setpoint')\n", "ax.set_ylabel('deg C')\n", "ax.legend()\n", "ax.grid(True)" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[6.2.2.2 Guessing a Solution](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.2.2-Guessing-a-Solution)", "section": "6.2.2.2 Guessing a Solution" } }, "source": [ "### 6.2.2.2 Guessing a Solution\n", "\n", "So what should $u(t)$ be? \n", "\n", "The next cell defines process inputs $d(t)$ and $u(t)$. For this disturbance, the model parameters given above, do you think this control policy will cause $y(t)$ to be close to the reference trajectory?" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "nbpages": { "level": 3, "link": "[6.2.2.2 Guessing a Solution](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.2.2-Guessing-a-Solution)", "section": "6.2.2.2 Guessing a Solution" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def d(t):\n", " return np.interp(t, [0, 300, 400], [Tamb, Tamb, Tamb-5])\n", "\n", "def u(t):\n", " return np.interp(t, [ 0, 50, 50, 450, 450], [ 0, 0, 80, 80, 25])\n", "\n", "fig, ax = plt.subplots(3, 1, sharex=True, figsize=(10, 6))\n", "ax[0].plot(t, r(t))\n", "ax[0].set_title('setpoint')\n", "ax[0].set_ylabel('deg C')\n", "\n", "ax[1].plot(t, u(t))\n", "ax[1].set_title('heat power input')\n", "ax[1].set_ylabel('% of max power')\n", "\n", "ax[2].plot(t, d(t))\n", "ax[2].set_title('unmeasured disturbance')\n", "ax[2].set_ylabel('deg C')\n", "\n", "for a in ax:\n", " a.grid(True)\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[6.2.3 Simulation](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.3-Simulation)", "section": "6.2.3 Simulation" } }, "source": [ "## 6.2.3 Simulation\n", "\n", "Let's see how well our initial guess at a control strategy will work for us subject to initial conditions\n", "\n", "\\begin{align*}\n", "T_H(t_0) & = T_{amb} \\\\\n", "T_S(t_0) & = T_{amb}\n", "\\end{align*}\n", "\n", "and prior specification of inputs $u(t)$ and $d(t)$." ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "nbpages": { "level": 2, "link": "[6.2.3 Simulation](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.3-Simulation)", "section": "6.2.3 Simulation" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# create a dictionary of unknowns indexed by time\n", "x = {t: cp.Variable(2) for t in t_grid}\n", "y = {t: cp.Variable(1) for t in t_grid}\n", "\n", "# trivial objective\n", "objective = cp.Minimize(0)\n", "\n", "# model equation and initial condition\n", "model = [x[t] == x[t-dt] + dt*(A@x[t-dt] + Bu@[u(t-dt)] + Bd@[d(t-dt)]) for t in t_grid[1:]]\n", "output = [y[t] == C@x[t] for t in t_grid]\n", "IC = [x[0] == np.array([Tamb, Tamb])]\n", "\n", "# create and solve optimization problem\n", "problem = cp.Problem(objective, model + IC + output)\n", "problem.solve()\n", "\n", "# display solution\n", "fix, ax = plt.subplots(3, 1, figsize=(10,6), sharex=True)\n", "ax[0].plot(t_grid, [x[t][0].value for t in t_grid], label=\"T_H\")\n", "ax[0].plot(t_grid, [x[t][1].value for t in t_grid], label=\"T_S\")\n", "ax[0].plot(t_grid, [r(t) for t in t_grid], label=\"SP\")\n", "ax[0].set_ylabel(\"deg C\")\n", "ax[0].legend()\n", "ax[1].plot(t_grid, [u(t) for t in t_grid], label=\"u(t)\")\n", "ax[1].set_ylabel(\"% of max power\")\n", "ax[2].plot(t_grid, [d(t) for t in t_grid], label=\"d(t)\")\n", "ax[2].set_ylabel(\"deg C\")\n", "for a in ax:\n", " a.grid(True)\n", " a.legend()\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[6.2.3 Simulation](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.3-Simulation)", "section": "6.2.3 Simulation" } }, "source": [ "
\n", "\n", "**Study Question:** Evaluate how well this control policy performed. Keep in mind that the objective is for $T_S$ to track the reference input (i.e., the setpoint) as closely as possible. Did the controller achieve the desired steady-state? What about the prior ramp and soak periods? \n", "\n", "**Study Question:** Edit the cells above to change $u(t)$ in to produce a response closer to the target. Make at least 3 attempts. What changes did you make, and were you able to get a better result.\n", "\n", "**Study Question:** What criteria could you use to determine if one control policy was better than another? Give at least three examples of possible criteria.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[6.2.4 Feedforward Optimal Control](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.4-Feedforward-Optimal-Control)", "section": "6.2.4 Feedforward Optimal Control" } }, "source": [ "## 6.2.4 Feedforward Optimal Control\n", "\n", "An optimal control policy minimizes the differences\n", "\n", "\\begin{align*}\n", "\\min_{u} \\int_{t_0}^{t_f} \\|T_H^{SP}(t) - T_H(t)\\|^2\\,dt \\\\\n", "\\end{align*}\n", "\n", "subject to constraints\n", "\n", "\\begin{align*}\n", "C_p^H \\frac{dT_H}{dt} & = U_a (T_{amb} - T_H) + U_c (T_S - T_H) + P u(t) + d(t)\\\\\n", "C_p^S \\frac{dT_S}{dt} & = - U_c (T_S - T_H) \n", "\\end{align*}\n", "\n", "initial conditions\n", "\n", "\\begin{align*}\n", "T_H(t_0) & = T_{amb} \\\\\n", "T_S(t_0) & = T_{amb}\n", "\\end{align*}\n", "\n", "and prior knowledge of $d(t)$." ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "nbpages": { "level": 2, "link": "[6.2.4 Feedforward Optimal Control](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.4-Feedforward-Optimal-Control)", "section": "6.2.4 Feedforward Optimal Control" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# add $u$ as a decision variable\n", "u = {t: cp.Variable(1, nonneg=True) for t in t_grid}\n", "x = {t: cp.Variable(2) for t in t_grid}\n", "y = {t: cp.Variable(1) for t in t_grid}\n", "\n", "# least-squares optimization objective\n", "objective = cp.Minimize(sum((y[t]-r(t))**2 for t in t_grid))\n", "\n", "model = [x[t] == x[t-dt] + dt*(A@x[t-dt] + Bu@u[t-dt] + Bd@[d(t-dt)]) for t in t_grid[1:]]\n", "output = [y[t] == C@x[t] for t in t_grid]\n", "inputs = [u[t] <= 100 for t in t_grid]\n", "IC = [x[0] == np.array([Tamb, Tamb])]\n", "rate = [cp.abs(u[t] - u[t-dt]) <= dt*1 for t in t_grid[1:]]\n", "\n", "problem = cp.Problem(objective, model + IC + output + inputs + rate)\n", "problem.solve()\n", "\n", "# display solution\n", "fix, ax = plt.subplots(3, 1, figsize=(10,6), sharex=True)\n", "ax[0].plot(t_grid, [x[t][0].value for t in t_grid], label=\"T_H\")\n", "ax[0].plot(t_grid, [x[t][1].value for t in t_grid], label=\"T_S\")\n", "ax[0].plot(t_grid, [r(t) for t in t_grid], label=\"SP\")\n", "ax[0].set_ylabel(\"deg C\")\n", "ax[0].legend()\n", "ax[1].plot(t_grid, [u[t].value for t in t_grid], label=\"u(t)\")\n", "ax[1].set_ylabel(\"% of max power\")\n", "ax[2].plot(t_grid, [d(t) for t in t_grid], label=\"d(t)\")\n", "ax[2].set_ylabel(\"deg C\")\n", "for a in ax:\n", " a.grid(True)\n", " a.legend()\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[6.2.4 Feedforward Optimal Control](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.4-Feedforward-Optimal-Control)", "section": "6.2.4 Feedforward Optimal Control" } }, "source": [ "
\n", "\n", "**Study Question:** The optimal control computed above requires rapid changes in power level. In process systems where control action requires movement of a valve stem position, there are often limits on how fast the manipulated variable can change. Modify the model to include differential inequalities that limit the time rate of change of control.\n", "\n", "\\begin{align*}\n", "\\frac{du}{dt} & \\leq \\dot{u}_{max} \\\\\n", "\\frac{du}{dt} & \\geq -\\dot{u}_{max}\n", "\\end{align*}\n", "\n", "where $\\dot{u}_{max}$ is the maximum rate of change. Add these rate constraints to the problem above. Specify that the maximum power cannot change more than 1% per second.\n", "\n", "How does that change the response?\n", "\n", "**Study Question:** Change the objective so that the goal is to guide the heater (insteady of the sensor) temperature to the reference trajectory. How does the control policy change? Explain what you observe.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[6.2.5 Lab Assignment 8](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.5-Lab-Assignment-8)", "section": "6.2.5 Lab Assignment 8" } }, "source": [ "## 6.2.5 Lab Assignment 8\n", "\n", "The goal of this lab assignment is to extend the calculations shown above to the case of the four-state models with two manipulable inputs and independent setpoint functions for $T_{S,1}$ and $T_{S,2}$." ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[6.2.5.1 Exercise 1](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.5.1-Exercise-1)", "section": "6.2.5.1 Exercise 1" } }, "source": [ "### 6.2.5.1 Exercise 1\n", "\n", "In a new cell, create reference inputs for sensor temperatures $T_{S,1}$ and $T_{S,2}$. The new reference trajectories should \n", "\n", "* Set the final time to 800 seconds. \n", "* Use the same ramp/soak specifications as above for $T_{S,1}$\n", "* For $T_{S,2}$, delay the ramp by 100 seconds, and set the soak temperature to 45C. The high temperature soak period should remain the same. The slopes of the ramps should remain the same. Plot your results." ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[6.2.5.2 Exercise 2](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.5.2-Exercise-2)", "section": "6.2.5.2 Exercise 2" } }, "source": [ "### 6.2.5.2 Exercise 2\n", "\n", "Set up and solve for the heater control policies minimizing the sum of least squares between the sensor temperatures and reference trajectories. Create functions U1(t) and U2(t) that interpolate the solutions for u1(t) and u2(t) for any value of t. Plot the results." ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[6.2.5.3 Exercise 3](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.5.3-Exercise-3)", "section": "6.2.5.3 Exercise 3" } }, "source": [ "### 6.2.5.3 Exercise 3\n", "\n", "Apply the functions U1(t) and U2(t) to your hardware and compare the measured sensor temperatures to those predicted in Exercise 2. How did you do?" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[6.2.5.3 Exercise 3](https://jckantor.github.io/cbe30338-2021/06.02-Simulation-and-Open-Loop-Optimal-Control.html#6.2.5.3-Exercise-3)", "section": "6.2.5.3 Exercise 3" } }, "source": [ "\n", "< [6.1 Static Operability](https://jckantor.github.io/cbe30338-2021/06.01-Static-Operability.html) | [Contents](toc.html) | [Tag Index](tag_index.html) | [6.3 Predictive Control](https://jckantor.github.io/cbe30338-2021/06.03-Predictive-Control.html) >

\"Open

\"Download\"" ] } ], "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.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }