{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "*This notebook contains material from [Controlling Natural Watersheds](https://jckantor.github.io/Controlling-Natural-Watersheds);\n", "content is available [on Github](https://github.com/jckantor/Controlling-Natural-Watersheds.git).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Harmonizing Rule Curves to Seasonal Inflows](http://nbviewer.jupyter.org/github/jckantor/Controlling-Natural-Watersheds/blob/master/notebooks/03.04-Harmonizing_Rule_Curves_to_Seasonal_Inflows.ipynb) | [Contents](toc.ipynb) | [Estimation](http://nbviewer.jupyter.org/github/jckantor/Controlling-Natural-Watersheds/blob/master/notebooks/04.00-Estimation.ipynb) >

\"Open

\"Download\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Rule Curve Optimization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Hydrological Model\n", "\n", "\\begin{align*}\n", "V^{NL}_{d+1,y} & = V^{NL}_{d,y} + Q^{NL}_{d+1,y} - S^{NL}_{d+1,y}\\\\\n", "V^{RL}_{d+1,y} & = V^{RL}_{d,y} + Q^{RL}_{d+1,y} - S^{RL}_{d+1,y}\\\\\n", "\\end{align*}\n", "\n", "where $V^{NL}_{d,y}$ and $V^{RL}_{d,y}$ denote the volume of water in Namakan and Rainy Lakes, respectively, on day of year $d$ and year $y$. Changes in lake levels are due to the difference between net lake inflows $Q^{NL}_{d,y}$ and $Q^{RL}_{d,y}$ and controlled outflows $S^{NL}_{d,y}$ and $S^{RL}_{d,y}$. \n", "\n", "At year-end\n", "\n", "\\begin{align*}\n", "V^{NL}_{1,y+1} & = V^{NL}_{365,y} + Q^{NL}_{1,y+1} - S^{NL}_{1,y+1}\\\\\n", "V^{RL}_{1,y+1} & = V^{RL}_{365,y} + Q^{RL}_{1,y+1} - S^{RL}_{1,y+1}\\\\\n", "\\end{align*}\n", "\n", "and with initial conditions determined from historical data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Rule Curve Constraints\n", "\n", "To linearize the optimization model, the upper and lower rule curves are expressed in 'volumetric' units where $U^{NL}_d$ and $U^{RL}_d$ are the upper value, and $L^{NL}_d$ and $L^{RL}_d$ are the lower values on day $d$ of the calendar year.\n", "\n", "For the purpose of optimization, the rule curves constraints are expressed as\n", "\n", "\\begin{align*}\n", "L^{NL}_{d,y} - (1-\\beta_y)M \\leq V^{NL}_{d,y} \\leq U^{NL}_{d,y} + (1-\\beta_y)M \\\\\n", "L^{RL}_{d,y} - (1-\\beta_y)M \\leq V^{RL}_{d,y} \\leq U^{RL}_{d,y} + (1-\\beta_y)M\n", "\\end{align*}\n", "\n", "where $\\beta_y = 1$ means that the rule curve constraint is in effect for year $y$, and where $M$ is a big number. For an optimization over $N$ years, we seek rules curves which can be satistfied a fraction $1-\\alpha$ of the time\n", "\n", "$$\\sum_{y=1}^N \\beta_y \\leq (1-\\alpha) N$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Flow Constraints\n", "\n", "\\begin{align*}\n", "S^{NL}_{d,y} & \\leq F^{NL}(V^{NL}_{d,y}) \\\\\n", "S^{RL}_{d,y} & \\leq F^{RL}(V^{RL}_{d,y}) \\\\\n", "\\end{align*}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Note on Volumetric Units\n", "\n", "The nonlinear relationship of lake level to lake volume is problematic for linear or convex optimization models. For that reason, here we employ lake volume in place of lake level for purpose of optimization calculations.\n", "\n", "To further simplify model caculations and interpretation, volume units will be expressed in units of 'cubic meters per second day' which, in other words, is a volume equal to the flow of one cubic meter per second for one day or 86,400 cubic meters. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Harmonizing Rule Curves to Seasonal Inflows](http://nbviewer.jupyter.org/github/jckantor/Controlling-Natural-Watersheds/blob/master/notebooks/03.04-Harmonizing_Rule_Curves_to_Seasonal_Inflows.ipynb) | [Contents](toc.ipynb) | [Estimation](http://nbviewer.jupyter.org/github/jckantor/Controlling-Natural-Watersheds/blob/master/notebooks/04.00-Estimation.ipynb) >

\"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.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }