{ "cells": [ { "cell_type": "markdown", "metadata": { "nbpages": { "level": 0, "link": "[](https://jckantor.github.io/CBE32338/05.01-Optimization-Control-and-Estimation-using-Pyomo.html)", "section": "" } }, "source": [ "\n", "*This notebook contains material from [CBE32338](https://jckantor.github.io/CBE32338);\n", "content is available [on Github](https://github.com/jckantor/CBE32338.git).*\n" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 0, "link": "[](https://jckantor.github.io/CBE32338/05.01-Optimization-Control-and-Estimation-using-Pyomo.html)", "section": "" } }, "source": [ "\n", "< [5.0 Predictive Control and Real Time Optimization](https://jckantor.github.io/CBE32338/05.00-Predictive-Control-and-Real-Time-Optimization.html) | [Contents](toc.html) | [5.2 Simulation, Control, and Estimation using Pyomo](https://jckantor.github.io/CBE32338/05.02-Optimization-Control-and-Estimation-using-Pyomo-With-Windows-ipopt.html) >
"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 1,
"link": "[5.1 Simulation, Control, and Estimation using Pyomo](https://jckantor.github.io/CBE32338/05.01-Optimization-Control-and-Estimation-using-Pyomo.html#5.1-Simulation,-Control,-and-Estimation-using-Pyomo)",
"section": "5.1 Simulation, Control, and Estimation using Pyomo"
}
},
"source": [
"# 5.1 Simulation, Control, and Estimation using Pyomo"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[5.1.1 Installations](https://jckantor.github.io/CBE32338/05.01-Optimization-Control-and-Estimation-using-Pyomo.html#5.1.1-Installations)",
"section": "5.1.1 Installations"
}
},
"source": [
"## 5.1.1 Installations\n",
"\n",
"The following instructions show how to download and install pyomo and the ipopt solver. Execute the appropriate cell for your platform (if needed)."
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 3,
"link": "[5.1.1.1 Google Colab](https://jckantor.github.io/CBE32338/05.01-Optimization-Control-and-Estimation-using-Pyomo.html#5.1.1.1-Google-Colab)",
"section": "5.1.1.1 Google Colab"
}
},
"source": [
"### 5.1.1.1 Google Colab"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"nbpages": {
"level": 3,
"link": "[5.1.1.1 Google Colab](https://jckantor.github.io/CBE32338/05.01-Optimization-Control-and-Estimation-using-Pyomo.html#5.1.1.1-Google-Colab)",
"section": "5.1.1.1 Google Colab"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/bin/sh: wget: command not found\n",
"unzip: cannot find or open ipopt-linux64, ipopt-linux64.zip or ipopt-linux64.ZIP.\n"
]
}
],
"source": [
"!pip install -q pyomo\n",
"!wget -N -q \"https://ampl.com/dl/open/ipopt/ipopt-linux64.zip\"\n",
"!unzip -o -q ipopt-linux64\n",
"ipopt_executable = '/content/ipopt'"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 3,
"link": "[5.1.1.2 MacOS](https://jckantor.github.io/CBE32338/05.01-Optimization-Control-and-Estimation-using-Pyomo.html#5.1.1.2-MacOS)",
"section": "5.1.1.2 MacOS"
}
},
"source": [
"### 5.1.1.2 MacOS"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"nbpages": {
"level": 3,
"link": "[5.1.1.2 MacOS](https://jckantor.github.io/CBE32338/05.01-Optimization-Control-and-Estimation-using-Pyomo.html#5.1.1.2-MacOS)",
"section": "5.1.1.2 MacOS"
}
},
"outputs": [],
"source": [
"!pip install -q pyomo\n",
"!curl -s https://ampl.com/dl/open/ipopt/ipopt-osx.zip --output ipopt-osx.zip\n",
"!tar xf ipopt-osx.zip ipopt\n",
"ipopt_executable = \"./ipopt\"\n",
"!rm ipopt-osx.zip"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 3,
"link": "[5.1.1.3 Windows PC](https://jckantor.github.io/CBE32338/05.01-Optimization-Control-and-Estimation-using-Pyomo.html#5.1.1.3-Windows-PC)",
"section": "5.1.1.3 Windows PC"
}
},
"source": [
"### 5.1.1.3 Windows PC"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"nbpages": {
"level": 3,
"link": "[5.1.1.3 Windows PC](https://jckantor.github.io/CBE32338/05.01-Optimization-Control-and-Estimation-using-Pyomo.html#5.1.1.3-Windows-PC)",
"section": "5.1.1.3 Windows PC"
}
},
"outputs": [],
"source": [
"!conda install -c conda-forge pyomo pyomo.extras\n",
"# Can anyone help?"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[5.1.2 Process Information](https://jckantor.github.io/CBE32338/05.01-Optimization-Control-and-Estimation-using-Pyomo.html#5.1.2-Process-Information)",
"section": "5.1.2 Process Information"
}
},
"source": [
"## 5.1.2 Process Information\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"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 3,
"link": "[5.1.2.1 Process Parameter Values](https://jckantor.github.io/CBE32338/05.01-Optimization-Control-and-Estimation-using-Pyomo.html#5.1.2.1-Process-Parameter-Values)",
"section": "5.1.2.1 Process Parameter Values"
}
},
"source": [
"### 5.1.2.1 Process Parameter Values"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"nbpages": {
"level": 3,
"link": "[5.1.2.1 Process Parameter Values](https://jckantor.github.io/CBE32338/05.01-Optimization-Control-and-Estimation-using-Pyomo.html#5.1.2.1-Process-Parameter-Values)",
"section": "5.1.2.1 Process Parameter Values"
}
},
"outputs": [],
"source": [
"P = 0.04 # power input when the system is turned\n",
"Ua = 0.068 # heat transfer coefficient from heater to environment\n",
"CpH = 6.50 # heat capacity of the heater (J/deg C)\n",
"CpS = 1.25 # heat capacity of the sensor (J/deg C)\n",
"Uc = 0.036 # heat transfer coefficient from heater to sensor\n",
"Tamb = 21.0 # ambient room temperature"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 3,
"link": "[5.1.2.2 Process Inputs](https://jckantor.github.io/CBE32338/05.01-Optimization-Control-and-Estimation-using-Pyomo.html#5.1.2.2-Process-Inputs)",
"section": "5.1.2.2 Process Inputs"
}
},
"source": [
"### 5.1.2.2 Process Inputs\n",
"\n",
"The next cell defines some process inputs that will be used throughout the notebook to demonstrate aspects of process simulation, control, and estimation. These are gathered in one place to make it easier to modify the notebook to test the response under different conditions. These functions are implemented using the `interp1d` from the `scipy` library."
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"nbpages": {
"level": 3,
"link": "[5.1.2.2 Process Inputs](https://jckantor.github.io/CBE32338/05.01-Optimization-Control-and-Estimation-using-Pyomo.html#5.1.2.2-Process-Inputs)",
"section": "5.1.2.2 Process Inputs"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
}
],
"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.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}