{ "cells": [ { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "f4rXez8ioy3l" }, "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": { "colab_type": "text", "id": "XpVq9yGPoy3m" }, "source": [ "\n", "< [Jesuit Volunteer Corps](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/04.04-Jesuit-Volunteer-Corps.ipynb) | [Contents](toc.ipynb) | [Scheduling Multipurpose Batch Processes using State-Task Networks](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/04.06-Scheduling-Multipurpose-Batch-Processes-using-State-Task-Networks.ipynb) >

\"Open

\"Download\"" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "eh0-fke71Hno" }, "source": [ "# Unit Commitment\n", "\n", "The production of electrical power to meet the demands of a regional power grid is among the most complex and important applications of mathematical optimization. A full treatment of the problem would consider the dispatch of mulitiple generating units and storage systems and the allocation of transportation resources to meet the projected demands of users.\n", "\n", "The scope of this notebook is an elementary introduction to the models used for unit commitment and closely follows [Unit Commitment](https://yalmip.github.io/example/unitcommitment/). A more comprehensive discussion and implemenation can be found in the open source [Dispa-Set](http://www.dispaset.eu/en/latest/) package." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "SULnfFaYpXIQ" }, "source": [ "## Install Pyomo and Solvers for Google Colaboratory" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "4AAkdrrjrfdC" }, "source": [ "### Install and Import Pyomo" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "owz_lt6S-uAH" }, "outputs": [], "source": [ "!pip install -q pyomo\n", "import pyomo.environ as pyo" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "j7ABANpRpktv" }, "source": [ "### Install COIN-OR BONMIN and Create Solver" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "Vs8V6FbgdyK2" }, "outputs": [], "source": [ "!wget -N -q \"https://ampl.com/dl/open/bonmin/bonmin-linux64.zip\"\n", "!unzip -o -q bonmin-linux64\n", "bonmin = pyo.SolverFactory('bonmin', executable='/content/bonmin')" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "axFsSMlQp1qS" }, "source": [ "## Unit Specifications" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 295 }, "colab_type": "code", "executionInfo": { "elapsed": 6631, "status": "ok", "timestamp": 1557426367466, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh5.googleusercontent.com/-8zK5aAW5RMQ/AAAAAAAAAAI/AAAAAAAAKB0/kssUQyz8DTQ/s64/photo.jpg", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "b6Ur0rQC0_1q", "outputId": "51854313-74eb-490f-d7cf-932c9d90e6cd" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "

" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "units = {\n", " 'A': {'Pmin': 20, 'Pmax': 100, 'Q': 0.04, 'C': 10, 'min_up': 6, 'min_down': 3},\n", " 'B': {'Pmin': 40, 'Pmax': 50, 'Q': 0.01, 'C': 20, 'min_up': 30, 'min_down': 6},\n", " 'C': {'Pmin': 1, 'Pmax': 25, 'Q': 0.02, 'C': 20, 'min_up': 1, 'min_down': 3},\n", " 'U': {'Pmin': 1, 'Pmax': 200, 'Q': 0.00, 'C': 60, 'min_up': 0, 'min_down': 0}\n", "}\n", "\n", "for key,unit in units.items():\n", " P = np.linspace(unit['Pmin'], unit['Pmax'])\n", " C = unit['Q']*P**2 + unit['C']*P\n", " plt.plot(P, C, label=key)\n", "\n", "plt.title('individual unit characteristics')\n", "plt.xlabel('power / mw')\n", "plt.ylabel('cost / $/hr')\n", "plt.legend()\n", "plt.grid(True)" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 283 }, "colab_type": "code", "executionInfo": { "elapsed": 6857, "status": "ok", "timestamp": 1557426367702, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh5.googleusercontent.com/-8zK5aAW5RMQ/AAAAAAAAAAI/AAAAAAAAKB0/kssUQyz8DTQ/s64/photo.jpg", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "v1CtCrb0xq1E", "outputId": "7d479c97-233d-4f46-c2b0-b25735c1be68" }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": { "tags": [] }, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD5CAYAAAA3Os7hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAE0BJREFUeJzt3X9w3HWdx/HXOz9smKYXpMVMpUhS\n+gNLAuS6tmKhJrTeVM9DYISzMLYZ8KIzl1OEGcl5fwjj6HAzjDLjOAx10KAjpHdIpQNyJ5Suacaz\nber0TNu0Qw6jk1pSiQUbjhTTvu+PbHMlTdjN7nfzzX72+ZjJZL/f/e5n3/345eU3n/18P2vuLgBA\n4SuJuwAAQDQIdAAIBIEOAIEg0AEgEAQ6AASCQAeAQBDoABAIAh0AAkGgA0AgymbyzRYsWOA1NTUz\n+ZZZefPNNzV37ty4ywgG/Rkd+jJahdKf+/bte83dL0533IwGek1Njbq7u2fyLbOSTCbV2NgYdxnB\noD+jQ19Gq1D608x+l8lxDLkAQCAIdAAIBIEOAIGY0TF0AGH4y1/+ooGBAY2MjMRdSk6qqqrU29sb\ndxnjKioqtGjRIpWXl2f1egIdwLQNDAxo3rx5qqmpkZnFXU7WTp48qXnz5sVdhiTJ3TU0NKSBgQHV\n1tZm1UbaIRczqzCzPWb232Z20MweSO2vNbPdZtZnZlvN7D1ZVQCg4IyMjGj+/PkFHeazjZlp/vz5\nOf3Vk8kY+ilJN7j71ZKukbTBzD4s6V8lfdvdl0g6IemurKsAUHAI8+jl2qdpA93HDKc2y1M/LukG\nSU+l9j8u6aacKgEA5CSjMXQzK5W0T9ISSd+V9D+SXnf30dQhA5IumeK1LZJaJKm6ulrJZDLHkvNv\neHi4IOrMh56jb0TeZm1VadH2Z9Rmy7lZVVWlkydPjm/Xf6Mz0vZ7/mVtpO1N5fTp0+/4d8wGIyMj\nWf9vnFGgu/tpSdeY2YWStkm6ItM3cPctkrZIUiKR8EK4K6tQ7h7Lh+a25yJvs33D3KLtz6jNlnOz\nt7c3rx8mRtX29u3bdejQIbW1tU36/Gz6UPSsiooKNTQ0ZPXaac1ycffXzWynpGslXWhmZamr9EWS\njmZVAQDkyY033qgbb7wx7jJmTCazXC5OXZnLzC6Q9DFJvZJ2Svp06rDNkp7JV5EAMFF/f7+uuOIK\n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\nvf8yyqA6AAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "import pandas as pd\n", "\n", "df = pd.DataFrame(units).T\n", "df[['min_up','min_down']].plot(kind='bar', grid=True)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "wDbFg8hy4O70" }, "source": [ "## Unit Commitment Model 1. Constant Demand without Uptime or Downtime Constraints\n", "\n", "The model is created with a mutable parameter so that the model can be solved for multiple parameters without having to reconstruct the model from scratch for every value." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "PUaZ7kYWGnDv" }, "outputs": [], "source": [ "def unit_commitment(units, Pforecast):\n", " m = pyo.ConcreteModel()\n", " \n", " m.units = pyo.Set(initialize = units.keys())\n", " m.P = pyo.Var(m.units, domain=pyo.NonNegativeReals)\n", " m.x = pyo.Var(m.units, domain=pyo.Binary)\n", "\n", " m.cost = pyo.Objective(expr=sum(units[k]['Q']*m.P[k]**2 + units[k]['C']*m.P[k] for k in m.units), sense=pyo.minimize)\n", "\n", " m.a = pyo.Constraint(m.units, rule=lambda m, k: m.x[k]*units[k]['Pmin'] <= m.P[k])\n", " m.b = pyo.Constraint(m.units, rule=lambda m, k: m.x[k]*units[k]['Pmax'] >= m.P[k])\n", " m.c = pyo.Constraint(expr=sum([m.P[k] for k in m.units]) >= Pforecast)\n", " \n", " results = bonmin.solve(m)\n", " return m\n", " \n", "c = []\n", "P = []\n", "\n", "Pforecast = np.linspace(0, 175, 176)\n", "for p in Pforecast:\n", " m = unit_commitment(units, p)\n", " c.append(m.cost())\n", " P.append([m.P[k]() for k in units.keys()])" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "PoqKM3o6pgmE" }, "source": [ "### Cost" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 295 }, "colab_type": "code", "executionInfo": { "elapsed": 18112, "status": "ok", "timestamp": 1557426378978, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh5.googleusercontent.com/-8zK5aAW5RMQ/AAAAAAAAAAI/AAAAAAAAKB0/kssUQyz8DTQ/s64/photo.jpg", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "bww8J5Qs8e9o", "outputId": "cc2c85e4-f8f1-4e72-d33c-6f974d3aa9ac" }, "outputs": [ { "data": { "image/png": "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\nY0yx/D/KINurcDSU+AAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "plt.plot(Pforecast, c)\n", "plt.title('cost as function of total power')\n", "plt.xlabel('total power / mw')\n", "plt.ylabel('cost / $ per hr')\n", "plt.grid(True)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "RhCKiKKZpkSj" }, "source": [ "### Unit Commitment Strategy" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 295 }, "colab_type": "code", "executionInfo": { "elapsed": 18586, "status": "ok", "timestamp": 1557426379464, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh5.googleusercontent.com/-8zK5aAW5RMQ/AAAAAAAAAAI/AAAAAAAAKB0/kssUQyz8DTQ/s64/photo.jpg", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "jdjLAcg-Ran3", "outputId": "d3f3efed-e2e1-47f7-9983-fab7e3cae58d" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAASYAAAEWCAYAAADLvjp3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3XuYHGWZ9/HvL5Mhk2RiAgmOCaAJ\nCCgHDTIoIOJEPASWFVHOKwcPRHZRQGAF1JWgywK6CPqygHjBy0FNYJEgInIQmCScJAlEEkgQguFN\nICTkQJIhmRwm9/tHPU06Q890zUxXVR/uz3XNNd1V1VX3013zm6rqqnpkZjjnXDnpl3UBzjnXmQeT\nc67seDA558qOB5Nzrux4MDnnyo4Hk3Ou7FREMEm6XtJ/ZF1HX0j6F0kPZl1H2iQdLWmRpDZJ+6W4\n3Ezeb0mflPRSaO+XMlj+zZL+M+3llpoq7TwmSS3Ab8xs56xr6QtJBuxuZi9nsOyJwAfN7KspLGsB\ncK6Z/SHBZYwG/gHUm9nmpJYTs5aHgXvM7BddjF8IfNPM/hJzfj2d/mZgsZn9MFbBZaoitphcRfsA\n8HzWRaSo1trba5L6dznSzFL5AYzov3Tu+c3Af4bHLcBi4DxgGbAE+FrnaYHBwHpgC9AWfkYVWNZA\n4ErgVWA18BgwMIz7ItGK8xbQCnw473ULgX8HngPeBm4EmoA/A2uBvwDbh2lHhzZ9DVgErALOAA4I\nr38LuCZv3qcBj4XH08Jr3w5tOD7vPfhe3nvwJeAI4O/ASuD7efPrB1wILABWAHcAO3Sq7VTg/wHL\ngR+EceOBjcCmsOy/dfF55ea9FngBODpv3AeBqeG9XQ7cXuD1A8L8c+1cUIL1oODnGtpoeevEQfnv\nd3jtwcCM8LoZwMF541qBnwCPh/Y+CIzoZl0+HXg5fCb3ENbB8H5tIVpH24ABnV53W6fx3+tunexm\n+v8F3ghtmQbsXej9LFD3aaGN14TXzgcOyxs/KrRnZWjf6WF4Q6hhRHj+A2Az8J7w/CfA1Xmf+3+H\nz2QpcD1b//Zyn+8Fof7bunyPyyiYNgM/BuqJ/hjXsTUEOk+7uMiy/id8wDsBdWGlHADsQfRH8rmw\nnO+FD2C7vGB6iiiMdiL643gG2C98OI8AF3f6478+jPs80A7cDbw37/Wf7hxMXbwfuffgR6G204E3\ngd8BQ4C9w8oxJkx/dqh159C2XwGTOtX2a6I/3I8CG9i6wk8k2h3u7j08lmhF7UcUnG8DI8O4SUQr\nZ7/Q9kN68Ln3ZT3o6nPNtbd/pz/C3D+CHYj+cZwM9AdODM+H5wXTAqL1Y2B4fnkX7fkMURh/LCz7\n/wDT8sYvBD7bzfuxzXjirZOf7TSPr4d1YgBwNTC7B8G0GfhuWNbxRAGV+4c2Dbg2fKZjida/z+SN\n+0p4/GB4vw7PG3d0eHwVUbjtEGr8I3BZp8/3ilD7wEoIpvWdVqxlwIE9DSaiP5b1wEcLjPsP4I5O\n074GtOStBP+SN/73wHV5z78D3N3pj3+nvPErgOM7vf6cHgTTeqAuPB8SpvlE3jSzgC+Fx/PY9r/d\nSKKtoP55te2cN/5p4ITweCJFgqnAezcbOCo8vhW4IX/+Pfjce7UeFPlcc+3tKphOBp7u9JongdPC\n41bgh3nj/g24v4v23Aj8NO95Y3jfR+etQz0JpjjrZHfzGxbaPrTz+1lg2tOA1wnHlvPWi5OBXYAO\nYEjeuMuAm8PjnwC/DOvXG0T/GC9n69bUcEBEIbtb3jwOAv6R9/luBBqKrTfldIxphW174HId0Yfe\nUyOI3qwFBcaNItoNAMDMthDthu2UN83SvMfrCzzvXFNPp+/OCjPryHttofnn5vcBYIqktyS9RRRU\nHURbezlv5D3u0fsp6RRJs/Pmvw/RewvRf3UBT0t6XtLX4843hq7Wg+4+12K2+dyDV9n2c4/7XnVe\nh9qI/iHt1MX0Paqti3XyHZLqJF0uaYGkNUTBBVs/m2Jes5ASwauhhlHASjNb22lcro6pRMHyMWAO\n8BDwaaJ/Gi+b2QpgR2AQMCtvvbk/DM9508zaixWZZjCtIyo65329nI8VGb+caJdqtwLjXif6gwZA\nkoj+U7zWy1qytIhoU3pY3k+DmcVpS7fvoaQPEO0Gfptod2cYMJcojDCzN8zsdDMbBXwLuFbSB2PW\n3dv1oLvPtdg6sc3nHryf3n3undehwURbC3Hn1bnWYutk5+lPAo4CPgsMJdpahPDZxLBTWEbO+0MN\nrwM7SBrSaVyujieAPYGjgalm9kIYfwRRaEH0Ga0nOuaVWyeHmll+yBf7rIB0g2k2cFJI/PFEadsb\nS4HhkoYWGhn+49wE/FzSqLC8gyQNIDpA/E+SDpNUT3SQdQPRm562pcCufXj99cClIUSQtKOko3qw\n7NGSuvr8BxOtQG+GeX+NaIuJ8PxYSbnTNVaFabfEXHav1oMin+ubYfldvZ/3AXtIOklSf0nHA3sB\n98asOd8k4GuSxoZl/xfwVzNbGPP1nT/3Yutk5+mHhPEriAL+v3pY/3uBsyTVSzoW+DBwn5ktCsu8\nTFKDpI8A3wB+A2Bm64gOJZzJ1iB6gugLn6lhmi1E/9CukvReAEk7SfpCD2tMNZjOBv6Z6JuHfyE6\nSNxjZjafaOV4JWwujiow2flEm5sziL5huALoZ2YvAl8lOmC5PNTzz2a2sTe19NFE4JbQhuN68fpf\nEB1kfFDSWqID4Z+I+dr/Db9XSHqm88jw3/BKouMwS4F9ib7NyTkA+KuktlDD2Wb2Ssxl92U96Opz\nXQdcCjwe3s8DO7VnBXAk0R/9CqJd0SPNbHkPlp2b11+Ijgv9nuhbw92AE3owi8uAH4Y6z4+xTm4z\nPdHxvVeJtmReIPrce+KvwO5hWZcCx4T3B6IvBUYTbT1NIfqiJ//8qalEB82fzns+hOjgd84FRAfv\nnwq7mn8h2tLqkYo7wdI51zuSTiM6WfOQrGspppwOfjvnHODB5JwrQ74r55wrO77F5JwrO11fRFcB\nRowYYaNHjy463dtvv83gwYOTLyhD1d7Gam8flG8bZ82atdzMdiw+ZelUdDCNHj2amTNnFp2utbWV\nlpaW5AvKULW3sdrbB+XbRkmdz5pPnO/KOefKjgeTc67seDA558pORR9jKmTTpk0sXryY9vatFzAP\nHTqUefPmZVhVYQ0NDey8887U19dnXYpzZaXqgmnx4sUMGTKE0aNHk7uIeu3atQwZMqTIK9NlZqxY\nsYLFixczZsyYrMtxrqwktisn6SZJyyTNzRt2e7jHz2xJCyXNDsNHS1qfN+763i63vb2d4cOHvxNK\n5UoSw4cP32bLzjkXSXKL6WaiewvfmhtgZsfnHku6kui2njkLzGxsKRZc7qGUUyl1Ope2xILJzKaF\nbnXeJdyo6jii+yc759w2sjrG9ClgqZm9lDdsjKRngTVE91+eXuiFkiYAEwCamppobW3dZvzQoUNZ\nu3br3UH3vXQapTTnB4fGmu7ee+/lpJNOYubMmeyxxx5dTtfe3v6uNvRGW1tbSeZTrqq9fZBuG9s2\ntdFY35s7V6cjq2A6kehmbzlLgPeb2QpJ+wN3S9rbzNZ0fqGZ3UB0I3yam5ut85my8+bNS/RAd9x5\n33333RxyyCHcc889XHLJJV1O19DQwH779b2D2nI9a7hUqr19kF4bp7w0hev/dj0PHPNA4svqrdTP\nYwqd3H0ZuD03zMw25O6iZ2az2NqVTkVqa2vjscce48Ybb2Ty5MlZl+PcO6a8NIWLn7iYLbHvhJyN\nLE6w/Cww38wW5waE+1XXhce7Et36M+6tWsvOH/7wB8aPH88ee+zB8OHDmTVrVtYlOfdOKFm8/gAy\nleTpApOI7hm9p6TFkr4RRp3AtrtxAIcCz4XTB+4EzjCzlUnVlrRJkyZxwgnRbaBPOOEEJk3q3Fzn\n0lVJoQTJfit3YhfDTysw7PdEN3eveCtXruSRRx5hzpw5SKKjowNJ/OxnP/PTA1wmKi2UwK+VK7k7\n77yTk08+mVdffZWFCxeyaNEixowZw/TpBb9kdC5RlRhKUIWXpHS28PJ/SvWSlEmTJnHBBRdsM+wr\nX/kKkyZN4tBD451q4FwpVGooQQ0EU9oeffTRdw0766yzMqjE1bJKDiXwXTnnqk6lhxJ4MDlXVaoh\nlMCDybmqUS2hBB5MzlWFagol8GByruJVWyiBB5NzFa0aQwlq4XSBiUMp6RlME1cXnaSuro59990X\nM6Ouro5rrrmGgw8+uJRVOFe1oQS1EEwZGDhwILNnzwbggQce4KKLLmLq1KkZV+WqSTWHEviuXOLW\nrFnD9ttvn3UZropUeyiBbzElYv369YwdO5b29naWLFnCI488knVJrkrUQiiBB1Mi8nflnnzySU45\n5RTmzp3rdxdwfVIroQS+K5e4gw46iOXLl/Pmm29mXYqrYLUUSuDBlLj58+fT0dHB8OHDsy7FVaha\nCyWohV25iatT74k3d4wJoh53b7nlFurq6lJbvqsetRhKUAvBlIGOjo6sS3BVoFZDCXxXzrmyVMuh\nBMl2RnCTpGWS5uYNmyjpNUmzw88ReeMukvSypBclfSGpupwrd7UeSpDsFtPNwPgCw68ys7Hh5z4A\nSXsR9Z6yd3jNtbnunJyrJR5KkcSCycymAXG7YDoKmBw6vvwH8DLw8aRqc64cvbXhLQ+lIIuD39+W\ndAowEzjPzFYBOwFP5U2zOAx7F0kTgAkATU1N7+rrfejQoaxdu3abYR0dHe8aVi7a29tL0l99mv3e\nZ6Ha2/fWhrfYtH4TZzSekcryhtQPKuv3M+1gug74CWDh95XA13syAzO7AbgBoLm52Tr39T5v3rx3\nnRqQ9ukCPdHQ0MB+++3X5/mk1e99Vqq5fbndtzMaz+C6tusSXdbg/oM4b7tdOHbBfPju3OIvyEiq\nwWRmS3OPJf0auDc8fQ3YJW/SncOwPtv3ln1LMZt3zDl1Tqzp3njjDc455xxmzJjBsGHDaGpq4uqr\nr2aPPfYoaT2usqV5TOnAYXvy44XzGbnqIXjPzokvry9SPV1A0si8p0cDuci+BzhB0gBJY4DdgafT\nrK2UzIyjjz6alpYWFixYwKxZs7jssstYunRp8Re7mpFWKA3uP4j/GLQnv372IUauWpToskolsS0m\nSZOAFmCEpMXAxUCLpLFEu3ILgW8BmNnzku4AXgA2A2eaWcWepfjoo49SX1/PGWdsPV7w0Y9+NMOK\nXLlJK5QOHLYnlyx8kVGrHkp0OaWWWDCZ2YkFBt/YzfSXApcmVU+a5s6dy/777591Ga5MpRFK7xxL\nerayAinHz/x2LkVphNKBw/ZkyvK3Ofb5ygwl8GvlErH33ntz5513Zl2GKzNJh9Lg/oM4d7tdOK5C\nt5Ly+RZTAj7zmc+wYcMGbrjhhneGPffcc0yfPj3DqlyWkg6lA4ftyV3L13FcBW8l5av6LaY5p85J\n/TwmSUyZMoVzzjmHK664goaGBkaPHs3VV1+dWg2ufCQZStW0lZSv6oMpK6NGjeKOO+7IugyXsSRD\nqVK/cYvDg8m5hMz5+x+564Vb2fc9Y2JNP1AD+Mh7di06nRBHbe5fsd+4xeHB5FwSnrmNfe/5Drf1\nYEupdc9x/PbF1uRqqiB+8Nu5UnvmNrjnO+B3Ceg1DybnSslDqSQ8mJwrFQ+lkvFgcq4UPJRKquoP\nfs/70IdLOr8Pz59XdJqFCxdy5JFHMnfu1vvdTJw4kcbGRs4///yS1uPKgIdSyfkWk3N94aGUCA8m\n53rLQykxHkzO9YaHUqI8mBIgqUfDXYXxUEqcB1MChg8fzqpVq7YZtnLlSkaMGJFRRa5kPJRS4cGU\ngMbGRkaOHMkjjzwCRKF0//33c8ghh2RcmesTD6XUVP3pAh+ePy+T7ptuvfVWzjzzTM4991wALr74\nYnbbbbdUa3Al5KGUqqoPpqzstddePProo1mX4UrBQyl1ie3KSbpJ0jJJc/OG/UzSfEnPSZoiaVgY\nPlrSekmzw8/1SdXlXI94KGUiyWNMNwPjOw17CNjHzD4C/B24KG/cAjMbG37S6SfZuW6smnunh1JG\nEgsmM5sGrOw07EEz2xyePkXU424Sy05itiVXKXXWoikvTeH2l+/CQykbSvKPQ9Jo4F4z26fAuD8C\nt5vZb8J0zxNtRa0BfmhmBe/cL2kCMAGgqalp/8mTJ28zvrGxkaamJoYOHfrOeUMdHR3U1dWVqFWl\nYWasXr2apUuX0tbW1uf5tbW10djYWILKylOa7Xtrw1u83vY6TXUNDF+/JpVlArQNGEXjhtfTWVi/\nemjaO9ak48aNm2VmzQlXtI1MgknSD4Bm4MtmZpIGAI1mtkLS/sDdwN5m1u1a0dzcbDNnztxm2KZN\nm1i8eDHt7e3vDGtvb6ehoaEUTSqphoYGdt55Z+rr6/s8r9bWVlpaWvpeVJlKq3359+j+/uAPceLc\nBxNfZk7rnpfQ8uLF6SzsPTvDuc/HmlRS6sFU9Fs5Sd8AppnZS6VYoKTTgCOBwyykopltADaEx7Mk\nLQD2AGZ2NZ+u1NfXM2bMtvdYbm1tZb/99utj5a7ade44oGFLxfZSX/HinC7wfuBXYetnFjANmG5m\ns3u6MEnjge8BnzazdXnDdwRWmlmHpF2B3YFXejp/53qrUG8mAzs2d/MKl6SiwWRmFwNIGgicDvw7\ncDXQ7UEbSZOAFmCEpMXAxUTfwg0AHgrHf54K38AdCvxY0iZgC3CGma0sOGPnSqyrLpYaPJgyE2dX\n7ofAJ4FG4FngfKBol7JmdmKBwTd2Me3vgd8Xm6dzpdZdv28NHZsyqMhBvF25LwObgT8BU4EnwzEh\n5ypasc4oGzZvTLkil1P0PCYz+xjwWeBp4HPAHEmPJV2Yc0mK00NuwyYPpqzE2ZXbB/gU8Gmir/gX\nEWNXzrlyFbfb7obN7d2Od8mJsyt3OVEQ/RKYYWa+4+0qVtxQAmjY5MGUlTjfyh2ZRiHOJa0noQQw\ncOO64hO5RBQ9xiTpSEnPSlopaY2ktZLSO0/fuRLoaSiBbzFlKc6u3NVE38zNsSSvX3EuIb0JJSEG\n+DGmzMS5u8AiYK6HkqtEvQklgIa6AQlV5OKIs8X0PeA+SVMJ17MBmNnPE6vKuRLobSiBB1PW4gTT\npUAb0ABsl2w5zpVGX0IJoKHOV/UsxQmmUYXup+RcueprKAE09PNgylKcY0z3Sfp84pU4VwKlCCWA\nhn59v0eW6704wfSvwP2hswA/XcCVrVKFEkCDyuuOp7UmzgmW6XbI5lwvlDKUABr6ec9mWfKeeF3F\nK3UoATR0f7sxlzAPJlfRkgglgAb5n0aW/N13FSupUAIYiEo+Txdfl8EkaZakX0gaL6n8uhhxNS3J\nUAJo8OscMtXdFtMngClE9+2eKuk+SWdL2iOVypzrQtKhBNHZxC47XQaTmW02s1Yzu9DMPgF8E1gL\n/GfYmrq22Mwl3SRpmaS5ecN2kPSQpJfC7+3DcEn6paSXJT0n6WMlaJ+rMmmEEkCDXxqaqdjHmMzs\ndTO7ycyOAw4AfhvjZTcD4zsNuxB42Mx2Bx4OzwEOJ+q2aXeinnavi1ubqw1phRJAw5YtiS/Dda1X\nJ2uY2Rbg8RjTTQv90eU7imj3EOAWoBW4IAy/NdzF4ClJwySNNLMlvanRVZfVG1Zz2dOXsV1KF9cO\n2tL38LO67aBHJ2r2w/oP7PNy47D+DWX9zVcWZ5E15YXNG0BTeLwT0S1WchaHYdsEk6QJRFtUNDU1\n0draWnSBbW1tsaarZNXcxlXrNrGpHU7mB6T1ZdlQVtO658G9fv2W/oN4cdN72WzxC24aANeM+VWv\nl9kT9XX9+FAZry/dBpOkOuAsM7sqiYWbmUnq0b8mM7sBuAGgubnZ4vRnn1a/91mq1jbeMWMRFzzw\nHOfuA1fOSe//6G93n8snF/UuJNa89wAOe+PbvLmxZ9fbnbfv5tTaOGpoA0+c0JLKsnqj2605M+sA\nCnVc2RdLJY0ECL+XheGvAbvkTbdzGOZq1B0zFnHBXc+RxXHolVsG9+p1a957AON6EUpuW3F2Mx+X\ndI2kT0n6WO6nD8u8Bzg1PD4V+EPe8FPCt3MHAqv9+FLtyjKUAFb0IphyobTCQ6nP4mw3jg2/f5w3\nzIDPFHuhpElEB7pHSFoMXEzUHdQdkr4BvAocFya/DzgCeBlYB3wtRm2uCmUdSgBLN/fsILSHUmnF\nubvAuN7O3My62g08rMC0BpzZ22W56lAOoQTwxsZBsafNHVPyUCqdON03NUm6UdKfw/O9wtaOcyVV\nLqEE8NqGeKcl9PZAt+tenGNMNwMPAKPC878D5yRVkKtN5RRKAIvbi1+U4qGUnDjBNMLM7gC2QHSp\nCtCRaFWuppRbKAEs2bAd1s3Jkf7tW7LiBNPbkoYTHfAm941ZolW5mlGOoQRgJqxhWMFxfqA7eXG+\nlTuP6Kv83SQ9DuwIHJNoVa4mlGso5WweMJTt1q/YZpiHUjrifCs3S9KngT2JLgh40cw2JV6Zq2rl\nHkoAG+uHbdORon/7lp4438o9BlxCdFb2qx5Krq8qIZQA2vu/553HfqA7XXGOMZ0MvAh8BXhC0kxJ\niVw756pfpYQSwNt1UTB5KKUvzq7cPyS1AxvDzzjgw0kX5qpPJYUSwFo1eihlpGgwSVoALAd+B9wI\nfCfcj8m52CotlAD+1L4Pdyz9gh9TykCcb+V+CRxCdJeB/Yju/z3NzBYkWpmrGpUYSgDXLRqddQk1\nq+gxJjP7hZkdC3wWmAVMJDr727miKjWUXLbi7MpdSbTF1Ag8CfwImJ5wXa4KeCi53oqzK/ck8FMz\nW5p0Ma56eCi5vojzrdydkr4o6dAwaKqZ/THhulwF81ByfRXnBMvLgLOBF8LPWZL+K+nCXGXyUHKl\nEGdX7p+AsblTBCTdAjwLfD/Jwlzl8VBypRK3a6n8y6yHJlGIq2weSq6U4mwxXQY8K+lRoot4D2Vr\n77nOeSi5kotz8HuSpFaibsENuMDM3ujtAiXtCdyeN2hXolMQhgGnA2+G4d83s/t6uxyXDg8ll4S4\nvesdRHQuk4XXTOntAs3sRULPK6FDzdfC/L4GXGVm/93bebt0eSi5pMT5Vu5a4AxgDjAX+Jak/ynR\n8g8DFpjZqyWan0uJh5JLkqzImiVpPvDh0L0SkvoBz5tZn+8wIOkm4Bkzu0bSROA0YA0wEzjPzFYV\neM0EYAJAU1PT/pMnTy66nLa2NhobG/tabllLs42r1m1i8ap1qSwrp2kgLF2f6iJTl2Yb6+v68aH3\nDYk17bhx42aZWXPCJW0jTjDdC5yZ26qR9AHgGjP75z4tWNoOeB3Y28yWSmoiuouBAT8BRprZ17ub\nR3Nzs82cObPoslpbW2lpaelLuWUvrTZmtaV03r6buXJO3CMPlSnNNo4a2sATF72re8eCJKUeTHHe\nhSHAPElPE4XGx4GZku4BMLMv9nLZhxNtLS0N83nnkhdJvwbu7eV8XUJ8982lJU4w/SihZZ8ITMo9\nkTTSzJaEp0cTHc9yZcJDyaUpzukCU0u9UEmDgc8B38ob/FNJY4m2yhZ2Gucy5KHk0pbJTruZvQ0M\n7zTs5Cxqcd3zUHJZiHtJiqtBHkouKx5MriAPJZelLnflJM0hdAveeRRgZvaRxKpymfJQclnr7hjT\nkalV4cqGh5IrB10Gk18mUns8lFy5iHOt3IGSZkhqk7RRUoekNWkU59LjoeTKSZyD39cQnQz5EjAQ\n+CZQqot4XRnwUHLlJta3cmb2MlBnZh1m9n+B8cmW5dLioeTKUZwTLNeFC25nS/opsAQ/zaAqeCi5\nchUnYE4O030beBvYBfhykkW55HkouXIWJ5i+ZGbtZrbGzC4xs3PxUwkqmoeSK3dxgunUAsNOK3Ed\nLiUeSq4SdHfm94nAScCY3L2XgvcAK5MuzJWeh5KrFN0d/H6C6ED3CODKvOFrgeeSLMqVnoeSqyTF\nzvx+FTgo3Pb2gDBqnpltTqM4VxoeSq7SxDnz+1jgaeBY4Djgr5KOSbowVxoeSq4SxTmP6YfAAWa2\nDEDSjsBfgDuTLMz1nYeSq1RxvpXrlwulYEXM17kMeSi5ShZni+l+SQ+wteOA44E/J1eS6ysPJVfp\n4nRG8O+SvkzURTjADWbW6y7CcyQtJPqGrwPYbGbNknYAbgdGE3VIcFyhTi9d1zyUXDWIc/D7CjO7\ny8zODT9TJF1RouWPM7OxeZ3pXQg8bGa7Aw+H5y4mDyVXLeIcK/pcgWGHl7qQ4CjglvD4FuBLCS2n\n6qxat8lDyVWNLrsIl/SvwL8BuwIL8kYNAR43s6/2acHSP4BVRPcV/5WZ3SDpLTMbFsYLWJV7nve6\nCcAEgKampv0nT55cdFltbW00Njb2pdyytmrdJja1r0ut3/ssNA2kqtsH6baxvq4fH3rfkFjTjhs3\nLvUuwrsLpqHA9sBlbLtLtdbM+nxJiqSdzOw1Se8FHgK+A9yTH0SSVpnZ9l3No7m52WbOnFl0Wa2t\nrbS0tPS15LKU2307d5/0+r3Pwnn7Vnf7IN02jhrawBMXHRZrWkmpB1N3Z36vBlYT3b2y5MzstfB7\nmaQpwMeBpbmuwiWNBJZ1O5Ma58eUXLXK5HwkSYMlDck9Bj4PzAXuYevdDE4F/pBFfZXAQ8lVs6y2\njZuAKdFhJPoDvzOz+yXNAO6Q9A2i6/SOy6i+suah5KpdJsFkZq8AHy0wfAUQb8e3RnkouVrgl5ZU\nEA8lVys8mCqEh5KrJR5MFcBDydUaD6Yy56HkapEHUxnzUHK1yoOpTHkouVrmwVSGPJRcrfNgKjMe\nSs55MJUVDyXnIh5MZcJDybmtPJjKgIeSc9vyYMqYh5Jz7+bBlCEPJecK82DKiIeSc13zYMqAh5Jz\n3fNgSpmHknPFeTClyEPJuXg8mFLioeRcfB5MKfBQcq5nPJgS5qHkXM+lHkySdpH0qKQXJD0v6eww\nfKKk1yTNDj9HpF1bqXkoOdc7WfSSshk4z8yeCX3LzZL0UBh3lZn9dwY1lZyHknO9l3owmdkSYEl4\nvFbSPGCntOtIkoeSc30jy/CvR9JoYBqwD3AucBqwBphJtFW1qsBrJgATAJqamvafPHly0eW0tbXR\n2NhYqrK7tWrdJhavWpfKsvIZLEYeAAAJRklEQVQ1DYSl61NfbGqqvX2Qbhvr6/rxofcNiTXtuHHj\nZplZc8IlbSOzYJLUCEwFLjWzuyQ1AcsBA34CjDSzr3c3j+bmZps5c2bRZbW2ttLS0tL3oovIckvp\nvH03c+WcrDpWTl61tw/SbeOooQ08cVG8vmUlpR5MmXwrJ6ke+D3wWzO7C8DMlppZh5ltAX4NfDyL\n2nrLd9+cK50svpUTcCMwz8x+njd8ZN5kRwNz066ttzyUnCutLLaNPwmcDMyRNDsM+z5woqSxRLty\nC4FvZVBbj3koOVd6WXwr9xigAqPuS7uWrjz20lJ+89TiotNt3rKFh+cv81ByrsSq+2hiLz2/5E3u\nf/6NrMtwrmb5JSkFvLXh7axLcK6meTAVsHpDW9YlOFfTPJgKWOvB5FymPJgKWLvRd+Wcy5IHUydm\nxrpN6V9S4pzbyoOpk5XtK9m42d8W57Lkf4GdLF+/nPaN9VmX4VxN82DqZNm6ZWz0YHIuUx5Mnby5\n/k3Wb/DzTp3LkgdTJ6+89QrrPJicy5QHU54pL03htnm3sW59XdalOFfTPJiCKS9N4eInLqZOdWzq\n8LfFuSz5XyBbQ8kwBvUflHU5ztW8mg+m/FACaKjzYHIuazUdTJ1DCWCAB5NzmavZYCoUSgDb9RuY\nUUXOuZyaDKauQgmgvxoyqMg5l6/mgqm7UAKo92ByLnNlF0ySxkt6UdLLki4s5byLhRJAPzyYnMta\nWQWTpDrgf4DDgb2Iek7ZqxTzjhNKAP3Mg8m5rJXbtRcfB142s1cAJE0GjgJe6MtM125cy9XPXM2w\nAcOKTjuwbhg7DN6uL4vLRP9+Wyqy7riqvX2QbhuHDSrv9zKzLsILkXQMMN7Mvhmenwx8wsy+nTfN\nBGACQFNT0/6TJ08uOt+2tjYaGxuTKbpMVHsbq719UL5tHDduXOpdhJfbFlNRZnYDcANAc3OztbS0\nFH1Na2srcaarZNXexmpvH9RGG+Mqq2NMwGvALnnPdw7DnHM1pNyCaQawu6QxkrYDTgDuybgm51zK\nympXzsw2S/o28ABQB9xkZs9nXJZzLmVlFUwAZnYfcF/WdTjnslNuu3LOOefB5JwrPx5Mzrmy48Hk\nnCs7ZXXmd09JehN4NcakI4DlCZeTtWpvY7W3D8q3jR8wsx3TXGBFB1NckmamfUp92qq9jdXePqiN\nNsblu3LOubLjweScKzu1Ekw3ZF1ACqq9jdXePqiNNsZSE8eYnHOVpVa2mJxzFcSDyTlXdqo+mJLs\n3CArkhZKmiNptqSZYdgOkh6S9FL4vX3WdfaEpJskLZM0N29YwTYp8svwmT4n6WPZVR5PF+2bKOm1\n8DnOlnRE3riLQvtelPSFbKrOTlUHU5KdG5SBcWY2Nu+8lwuBh81sd+Dh8LyS3AyM7zSsqzYdDuwe\nfiYA16VUY1/czLvbB3BV+BzHhjtrENbRE4C9w2uuDetyzajqYCKvcwMz2wjkOjeoRkcBt4THtwBf\nyrCWHjOzacDKToO7atNRwK0WeQoYJmlkOpX2Thft68pRwGQz22Bm/wBeJlqXa0a1B9NOwKK854vD\nsEpnwIOSZoXOGQCazGxJePwG0JRNaSXVVZuq6XP9dtgdvSlv97ua2tcr1R5M1eoQM/sY0S7NmZIO\nzR9p0TkgVXUeSDW2iWgXdDdgLLAEuDLbcspHtQdTVXZuYGavhd/LgClEm/lLc7sz4fey7Cosma7a\nVBWfq5ktNbMOM9sC/Jqtu2tV0b6+qPZgqrrODSQNljQk9xj4PDCXqF2nhslOBf6QTYUl1VWb7gFO\nCd/OHQisztvlqxidjosdTfQ5QtS+EyQNkDSG6CD/02nXl6Wyu+d3KVVp5wZNwBRJEH1+vzOz+yXN\nAO6Q9A2iW8Ecl2GNPSZpEtACjJC0GLgYuJzCbboPOILooPA64GupF9xDXbSvRdJYol3UhcC3AMzs\neUl3EPVAvRk408w6sqg7K35JinOu7FT7rpxzrgJ5MDnnyo4Hk3Ou7HgwOefKjgeTc67seDBVCUnD\nJP1bjOlGSzop5nRzi02XJUn1kp7Jug5Xeh5M1WMYUDSYgNFA0WAqN5IKnXN3CPB42rW45HkwVY/L\ngd3CfX1+Fs6K/pmkueHeTcfnTfepMN13w5bRdEnPhJ+Du1uIpBZJ0yT9Kdwr6HpJ/cK4E8Oy5kq6\nIgw7VtLPw+OzJb0SHu8q6fHweH9JU8NFyQ/kXYbSKunqcM+pswuUMx74c4Ea20Lbn5f0F0kfD/N6\nRdIXwzR/kvSR8PhZST8Kj38s6fSevfWu5MzMf6rgh2hLaG7e868ADxGd8d4E/D9gJNHZx/fmTTcI\naAiPdwdmFppf3vQtQDuwa5j3Q8AxwKiwjB2Jzkh/hOg2Je8DZoTX3kl0mdBORJeYXAbUA08AO4Zp\njic6Qx+gFbi2mzY/DQwqMNyAw8PjKcCDYTkfBWaH4RcCZwJDQ00PhOGPAntm/XnW+k9VX5JS4w4B\nJll0KcNSSVOBA4A1naarB64Jl0Z0AHvEmPfTZpbb8pkUlrUJaDWzN8Pw3wKHmtndkhrD9X27AL8D\nDgU+BdwF7AnsAzwULrOpI7rSPuf2QgVI2glYaWbrCozeCNwfHs8BNpjZJklziAIXYDpwFvAP4E/A\n5yQNAsaY2Ysx3gOXIA8m911gKdHWRD+iraFiOl/HVOy6pieIrmd7kSgQvg4cBJwHvB943swO6uK1\nb3cxfDzRNZCFbLKw+QNsATYAmNmWvGNVM4Bm4BWirb4RwOnArCJtcSnwY0zVYy0wJO/5dOB4SXWS\ndiTaSnm6wHRDgSUW3XrjZKItlmI+Hu7Y0I9o1+uxMO9PSxoRbgN7IjA1r5bzgWnAs8A4oq2Y1URh\ntaOkg+Cdb9r2jlFDweNLcVl0R9NFwLHAk51qdBnzLaYqYWYrJD0evuL/M/A9oq2SvxFt0XzPzN6Q\ntALokPQ3ovtQXwv8XtIpRLs/XW2h5JsBXAN8kOiYzJSwNXJheC7gT2aWu03JdKLduGlm1iFpETA/\n1L1R0jHALyUNJVonrwa6vAtECL4Pmtn8uO9PF6YDh5nZeknTie57NL2P83Ql4HcXcD0iqQU438yO\nzLCGQ4CvmtkZWdXgkuVbTK7imNljRLuPrkr5FpNzruz4wW/nXNnxYHLOlR0PJudc2fFgcs6VHQ8m\n51zZ+f8xmu27o+tOAQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1,1)\n", "P = np.array(P)\n", "base = 0\n", "for k in range(len(P[0,:])):\n", " ax.fill_between(Pforecast, base, base + P[:,k])\n", " base += P[:,k]\n", "ax.set_title('unit commitment as function of total power')\n", "ax.set_xlabel('total power / mw')\n", "ax.set_ylabel('total power / mw')\n", "ax.legend(units.keys(), loc='upper left')\n", "ax.axis('equal')\n", "ax.axis('square')\n", "ax.grid(True)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "LIBtve-6BqAC" }, "source": [ "## Unit Commitment Model 2. Variable Demand without Uptime or Downtime Constraints" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 295 }, "colab_type": "code", "executionInfo": { "elapsed": 18851, "status": "ok", "timestamp": 1557426379742, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh5.googleusercontent.com/-8zK5aAW5RMQ/AAAAAAAAAAI/AAAAAAAAKB0/kssUQyz8DTQ/s64/photo.jpg", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "VUYhhdwB1NiG", "outputId": "062e3b6e-853f-41f5-b2d7-98e91780e0c5" }, "outputs": [ { "data": { "image/png": "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\nIMzMLNf/A5sjdUcaWZ1LAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "horizon = 48\n", "t = np.linspace(1, horizon, horizon)\n", "Pforecast = {t:100.0 + 50*np.sin(t*2*np.pi/24) for t in t}\n", "\n", "def poststep(x, y):\n", " xstep = np.array([x[0]-(x[1]-x[0]), x[0]])\n", " ystep = np.array([y[0], y[0]])\n", " for k in range(1, len(x)):\n", " xstep = np.append(xstep, [x[k-1], x[k]])\n", " ystep = np.append(ystep, [y[k], y[k]])\n", " return xstep, ystep\n", "\n", "fig, ax = plt.subplots(1,1)\n", "ts, ps = poststep(t, np.array([Pforecast[t] for t in t]))\n", "ax.fill_between(ts, 0, ps)\n", "ax.set_title('power forecast')\n", "ax.set_xlabel('hour')\n", "ax.set_ylabel('power')\n", "ax.grid(True)" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "-Yl1PKso2rwN" }, "outputs": [], "source": [ "def unit_commitment(units, horizon, Pforecast):\n", " m = pyo.ConcreteModel()\n", " m.t = pyo.RangeSet(1, horizon)\n", " \n", " m.units = pyo.Set(initialize = units.keys())\n", " m.P = pyo.Var(m.units, m.t, domain=pyo.NonNegativeReals)\n", " m.x = pyo.Var(m.units, m.t, domain=pyo.Binary)\n", "\n", " m.cost = pyo.Objective(expr=sum(units[k]['Q']*m.P[k,t]**2 + units[k]['C']*m.P[k,t] for k in m.units for t in m.t), sense=pyo.minimize)\n", "\n", " m.a = pyo.Constraint(m.units, m.t, rule=lambda m, k, t: m.x[k,t]*units[k]['Pmin'] <= m.P[k,t])\n", " m.b = pyo.Constraint(m.units, m.t, rule=lambda m, k, t: m.x[k,t]*units[k]['Pmax'] >= m.P[k,t])\n", " m.c = pyo.Constraint(m.t, rule=lambda m, t: sum([m.P[k,t] for k in m.units]) >= Pforecast[t])\n", " \n", " results = bonmin.solve(m)\n", " return m\n", "\n", "m = unit_commitment(units, horizon, Pforecast)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "WKwHYDrVyfLw" }, "source": [] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 295 }, "colab_type": "code", "executionInfo": { "elapsed": 26537, "status": "ok", "timestamp": 1557426387444, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh5.googleusercontent.com/-8zK5aAW5RMQ/AAAAAAAAAAI/AAAAAAAAKB0/kssUQyz8DTQ/s64/photo.jpg", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "-XvJPS8N4qdp", "outputId": "8a6c84de-b9d7-4857-bce5-d7c0e486f5ca" }, "outputs": [ { "data": { "image/png": "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\npXKBMDOzVP8f6i7O3JC9hlAAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "t = np.array([t for t in m.t])\n", "P = {k:np.array([m.P[k,t]() for t in m.t]) for k in units.keys()}\n", "\n", "base = 0\n", "fig, ax = plt.subplots(1,1)\n", "for k in P.keys():\n", " ts, ps = poststep(t, P[k])\n", " ax.fill_between(ts, base, base + ps, label=k)\n", " base += ps\n", "ax.legend()\n", "ax.set_title('power generation')\n", "ax.set_xlabel('hour')\n", "ax.set_ylabel('power')\n", "ax.grid(True)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "LL8SzA6T77QV" }, "source": [ "## Unit Commitment Model 3. Variable Demand with Uptime and Downtime Constraints" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "C5zaG28dt14e" }, "outputs": [], "source": [ "def unit_commitment(units, horizon, Pforecast):\n", " m = pyo.ConcreteModel()\n", " m.t = pyo.RangeSet(1, horizon)\n", " \n", " m.units = pyo.Set(initialize = units.keys())\n", " m.P = pyo.Var(m.units, m.t, domain=pyo.NonNegativeReals)\n", " m.x = pyo.Var(m.units, m.t, domain=pyo.Binary)\n", " m.y = pyo.Var(m.units, m.t, domain=pyo.Binary)\n", " m.z = pyo.Var(m.units, m.t, domain=pyo.Binary)\n", "\n", " m.cost = pyo.Objective(expr=sum(units[k]['Q']*m.P[k,t]**2 + units[k]['C']*m.P[k,t] for k in m.units for t in m.t), sense=pyo.minimize)\n", "\n", " m.a = pyo.Constraint(m.units, m.t, rule=lambda m, k, t: m.x[k,t]*units[k]['Pmin'] <= m.P[k,t])\n", " m.b = pyo.Constraint(m.units, m.t, rule=lambda m, k, t: m.x[k,t]*units[k]['Pmax'] >= m.P[k,t])\n", " m.c = pyo.Constraint(m.t, rule=lambda m, t: sum([m.P[k,t] for k in m.units]) >= Pforecast[t])\n", " \n", " def _d(m, k, t):\n", " if t <= 1:\n", " return pyo.Constraint.Skip\n", " else:\n", " return m.x[k,t] == m.x[k,t-1] + m.y[k,t] - m.z[k,t]\n", " m.d = pyo.Constraint(m.units, m.t, rule=_d)\n", " \n", " def _e(m, k, t):\n", " if units[k]['min_up'] == 0:\n", " return pyo.Constraint.Skip\n", " else:\n", " return units[k]['min_up']*m.y[k,t] <= sum(m.x[k,s] for s in range(t, min(t+units[k]['min_up'], horizon)))\n", " m.e = pyo.Constraint(m.units, m.t, rule=_e)\n", " \n", " def _f(m, k, t):\n", " if units[k]['min_down'] == 0:\n", " return pyo.Constraint.Skip\n", " else:\n", " return units[k]['min_down']*(1-m.z[k,t]) >= sum(m.x[k,s] for s in range(t, min(t+units[k]['min_down'], horizon)))\n", " m.f = pyo.Constraint(m.units, m.t, rule=_f)\n", " \n", " results = bonmin.solve(m)\n", " return m\n", "\n", "m = unit_commitment(units, horizon, Pforecast)" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 295 }, "colab_type": "code", "executionInfo": { "elapsed": 465140, "status": "ok", "timestamp": 1557426826062, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh5.googleusercontent.com/-8zK5aAW5RMQ/AAAAAAAAAAI/AAAAAAAAKB0/kssUQyz8DTQ/s64/photo.jpg", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "522ur2fd7aaY", "outputId": "b22c9921-fcf1-4966-fb05-e4465ba24ac5" }, "outputs": [ { "data": { "image/png": "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\nygnCzMxS/X+ZjOEBd9q9AQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "t = np.array([t for t in m.t])\n", "P = {k:np.array([m.P[k,t]() for t in m.t]) for k in units.keys()}\n", "\n", "base = 0\n", "fig, ax = plt.subplots(1,1)\n", "for k in P.keys():\n", " ts, ps = poststep(t, P[k])\n", " ax.fill_between(ts, base, base + ps, label=k)\n", " base += ps\n", "ax.legend()\n", "ax.set_title('power generation')\n", "ax.set_xlabel('hour')\n", "ax.set_ylabel('power')\n", "ax.grid(True)" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 441 }, "colab_type": "code", "executionInfo": { "elapsed": 465879, "status": "ok", "timestamp": 1557426826809, "user": { "displayName": "Jeffrey Kantor", "photoUrl": "https://lh5.googleusercontent.com/-8zK5aAW5RMQ/AAAAAAAAAAI/AAAAAAAAKB0/kssUQyz8DTQ/s64/photo.jpg", "userId": "09038942003589296665" }, "user_tz": 240 }, "id": "wA7tCijD74bO", "outputId": "3571da02-7caa-443a-9963-eaae858d41ac" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(len(P), 1, figsize=(8, 1.5*len(P)))\n", "keys = [k for k in P.keys()]\n", "\n", "for k in range(0, len(P)):\n", " ts, ps = poststep(t, P[keys[k]])\n", " ax[k].plot(ts, ps)\n", " ax[k].set_title('power generation unit ' + str(keys[k]))\n", " ax[k].grid()\n", " \n", "plt.tight_layout()" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "3iDYtaWvGJte" }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "jVl_koMgoy4X" }, "source": [ "\n", "< [Jesuit Volunteer Corps](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/04.04-Jesuit-Volunteer-Corps.ipynb) | [Contents](toc.ipynb) | [Scheduling Multipurpose Batch Processes using State-Task Networks](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/04.06-Scheduling-Multipurpose-Batch-Processes-using-State-Task-Networks.ipynb) >

\"Open

\"Download\"" ] } ], "metadata": { "colab": { "collapsed_sections": [], "name": "04.05-Unit-Commitment.ipynb", "provenance": [], "version": "0.3.2" }, "kernelspec": { "display_name": "Python 3", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 0 }