{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Stochastic linear program (SLP) to take into account uncertainty\n", "\n", "In this sample we illustrate the usage of SLP for energy portfolios. Our demonstration implements a two-stage problem for a simple portfolio. It may be extended to any portfolio." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Some prerequisites\n", "### Basics" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import datetime as dt\n", "from copy import deepcopy\n", "# in case eao is not installed\n", "import os\n", "import sys\n", "# in case eao is not installed, set path\n", "myDir = os.path.join(os.getcwd(), '../..')\n", "sys.path.append(myDir)\n", "addDir = os.path.join(os.getcwd(), '../../../..')\n", "sys.path.append(addDir)\n", "\n", "import eaopack as eao\n", "\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "np.random.seed(123)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Parameter setting\n", "Defining timegrid and main portfolio settings as well as settings for SLP. Note that we do not explain the setup in detail. Please refer to the basic samples to understand the concepts and parameters\n", "\n", "For the SLP part we define the number of samples to be used. Using the parameter 'sigma' we can adjust uncertainty in price samples. The parameter 'start_future' defines the transition between the two stages of the SLP - present and future. In the two-stage setup we determine the optimal steps in the present given an uncertain future" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "Start = dt.date(2021,1,1)\n", "End = dt.date(2021,1,5)\n", "start_future = Start+dt.timedelta(days=2)\n", "n_samples = 200\n", "sigma = .5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Set up portfolio\n", "(1) defining the assets of the portfolio (here a battery and a market with uncertain prices)\n", "(2) definition of how prices are sampled" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "node = eao.assets.Node('home')\n", "timegrid = eao.assets.Timegrid(Start, End, freq = 'h')\n", "battery = eao.assets.Storage(name='battery', nodes=node, cap_in= 1, cap_out=1, start_level= 24, end_level=24, size= 96)\n", "market = eao.assets.SimpleContract(name = 'market', nodes = node, min_cap= -10, max_cap= 10, price = 'spot')\n", "\n", "def get_price(start, end, name = 'spot', n_samples = 1, sigma = 0.2, start_future = None, last_sample = None):\n", " dates = pd.date_range(start, end, freq ='h')\n", " prices = []\n", " n = len(dates)\n", " if not start_future is None:\n", " Ip = (dates <= pd.Timestamp(start_future))\n", " else:\n", " Ip = (dates <= dates.max())\n", " means = 2+.5*np.sin(4.+np.linspace(0.,10., n)) \n", " if last_sample is not None:\n", " means[Ip] = last_sample[Ip]\n", " for iS in range(0,n_samples):\n", " process = np.zeros(n)\n", " for i,pres in enumerate(Ip):\n", " if not pres:\n", " process[i] = process[i-1] + np.random.randn(1)*sigma \n", " prices.append({'start' : dates.values, 'values': means + process})\n", " return prices" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# define mean price\n", "mean_price = get_price(Start, End, sigma = 0.0)[0]\n", "# standard format needs to be cast onto timegrid\n", "mean_price_grid = {'spot' :timegrid.values_to_grid(mean_price)}\n", "\n", "# create price samples for future (past included, but irrelevant)\n", "# Note: May want to implement possibility to give only future prices\n", "sample_prices = get_price(Start, End, n_samples=n_samples, sigma = sigma, start_future = start_future)\n", "sample_prices_grid = []\n", "for mys in sample_prices:\n", " sample_prices_grid.append( {'spot' :timegrid.values_to_grid(mys)} )\n", "\n", "\n", "portf = eao.portfolio.Portfolio([battery, market])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Perform the optimization\n", "For comparison we perform a deterministic optimization on the 'mean price' and an SLP on given samples for the future" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "op = portf.setup_optim_problem(mean_price_grid, timegrid)\n", "res_hard = op.optimize()\n", "op_slp = eao.stoch_lin_prog.make_slp(portf = portf, \n", " optim_problem= deepcopy(op),\n", " timegrid=timegrid,\n", " start_future = start_future, \n", " samples = sample_prices_grid)\n", "res_slp = op_slp.optimize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create charts and interpret the results" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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PjHG7DTGbDfG/LJwfStjzDJjzN7C15aF6wcaY9YbY7YWvt5Y7FhzjDGHjDFZ7vo8IiIi3kZ5tYiISN3ziCbuxphQINRau8EY0wxYD/wQuAc4aa193BjzENDSWjvTGNMD+NZam2mMiQb+ba29svBYfYADwF5rbVN3fB4RERFvo7xaRESk7nlEAf1SxpgPgRcK/yVba48U3histNZee0laAxwHOlhrLxZbn6VMX0REpG4orxYREal9HtHEvThjTDjQA/gCaG+tPQJQ+NqujF3uADYWz/BFRESk7iivFhERqRv+7g6gOGNMU+B94FfW2jMFD9wrTB8FPAEMqofwREREfJ7yahERkbrjMTXoxpgACjL8N6y1/yxc/W1hc7mivm9Hi6UPAxYAP7HW7q/veEVERHyN8moREZG65REF9MK+aa8BO621zxTbtBAYV/h+HPBhYfoQ4GPgYWvtmnoMVURExCcprxYREal7HjFInDGmH7AK2Ao4C1f/DwV9294BrgIOAqOstSeNMY8CDwN7ix1mkLX2qDHmSeAuoAOQCbxqrZ1VLx9ERETESymvFhERqXseUUAXERERERER8XUe0cRdRERERERExNepgC4iIiIiIiLiAVRAFxEREREREfEAKqCLiIiIiIiIeAAV0EVEREREREQ8gAroIiIiIiIiIh5ABXQRERERERERD/D/AYcAJOlgOvGSAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "### check and illustrate results\n", "out_hard = eao.io.extract_output(portf, op, res_hard)\n", "out_slp = eao.io.extract_output(portf, op_slp, res_slp)\n", "\n", "collect = pd.DataFrame()\n", "collect['deterministic'] = out_hard['dispatch']['battery']\n", "collect['slp (future: mean)'] = out_slp['dispatch']['battery']\n", "collect['start price'] = mean_price_grid['spot']\n", "timegrid.set_restricted_grid(end = start_future)\n", "for i, ts in enumerate(sample_prices_grid):\n", " ts['spot'][timegrid.restricted.I] = mean_price_grid['spot'][timegrid.restricted.I]\n", " collect['sample '+'{:1.0f}'.format(i)] = ts['spot'] \n", "\n", "fig, ax = plt.subplots(1,2, tight_layout = True, figsize=(14,4))\n", "collect[['deterministic','slp (future: mean)']].plot(ax = ax[0])\n", "collect[['start price', 'sample 1', 'sample 2', 'sample 3', 'sample 4']].plot(ax = ax[1], style = ':')\n", "ax[0].axvline(x = start_future, c = 'r')\n", "ax[1].axvline(x = start_future, c = 'r')\n", "ax[0].legend(loc = 'lower left')\n", "ax[1].legend(loc = 'lower left')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Interpretation\n", "\n", "The red line indicates the start of the uncertain future (Jan 3). While for the pending decision (stage 1) prices are certain, for the future (stage 2) we have five price samples that encode the uncertainty. Solutions in this example are relatively similar -- but note that the deterministic optimization charges the storage maximally until Jan 03 as future prices are higher than present prices. Since uncertainty is high, the SLP solution starts discharching earlier, as future prices may be higher today but are uncertain. \n", "\n", "### Two-stage vs. multi-stage problem: \n", "\n", "In our implementation we provide a formulation of a two-stage SLP generically for any portfolio structure. For the two-stage case problems can typically be handled and often already provide a good appoximation. For the multi-stage case we believe that it will be necessary to resort to numerical approximations, strategies that are specific to the given portfolio or others such as methods from machine learning. Providing a solution to the SLP for a relevant problem class could be a valuable research thread for further work." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Backtesting: SLP vs. hard optimization\n", "\n", "We're backtesting the decisions of the hard and SLP decision by sampling over future price outcomes. Naturally, this backtest is more of an illustration for this specific example." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "n_test = 1000 # number of samples for backtesting\n", "# decisions to fix (hard and SLP)\n", "fix_slp = {'I': start_future, 'x': res_slp.x}\n", "fix_hard = {'I': start_future, 'x': res_hard.x}\n", "# draw random prices and perform optimization for future\n", "sample_prices = get_price(Start, End, n_samples=n_test, sigma = sigma, start_future = start_future)\n", "values_slp = []\n", "values_hard = []\n", "for mys in sample_prices:\n", " my_price = {'spot' :timegrid.values_to_grid(mys)} \n", " op_test_hard = portf.setup_optim_problem(my_price, timegrid, fix_time_window=fix_hard)\n", " op_test_slp = portf.setup_optim_problem(my_price, timegrid, fix_time_window=fix_slp) \n", " res_test_hard = op_test_hard.optimize()\n", " res_test_slp = op_test_slp.optimize() \n", " values_slp.append(res_test_slp.value)\n", " values_hard.append(res_test_hard.value)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mean portfolio value hard optimization: 67.53\n", "Mean portfolio value SLP optimization: 68.01\n", "Variance portfolio value hard optimization: 605.14\n", "Variance portfolio value SLP optimization: 497.74\n" ] } ], "source": [ "print('Mean portfolio value hard optimization: '+'{:2.2f}'.format(np.asarray(values_hard).mean()))\n", "print('Mean portfolio value SLP optimization: '+'{:2.2f}'.format(np.asarray(values_slp).mean()))\n", "\n", "print('Variance portfolio value hard optimization: '+'{:2.2f}'.format(np.asarray(values_hard).var()))\n", "print('Variance portfolio value SLP optimization: '+'{:2.2f}'.format(np.asarray(values_slp).var()))" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(2,1, tight_layout = True, figsize=(8,4), sharex = 'col')\n", "ax[0].hist(np.asarray(values_hard), bins = 20)\n", "ax[1].hist(np.asarray(values_slp), bins = 20)\n", "ax[0].set_title('hard optimization')\n", "ax[1].set_xlabel('portfolio value')\n", "ax[1].set_title('SLP optimization')\n", "ax[0].axvline(x = np.asarray(values_hard).mean(), c = 'r', label = 'mean')\n", "ax[1].axvline(x = np.asarray(values_slp).mean(), c = 'r')\n", "ax[0].legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The comparison shows only relatively small differences in the value. However, this was to be expected, since hard and SLP decisions only differed in a small timeframe for the immediate future. Variances differ more significantly, as also the histograms show." ] } ], "metadata": { "interpreter": { "hash": "57baa5815c940fdaff4d14510622de9616cae602444507ba5d0b6727c008cbd6" }, "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.9.2" } }, "nbformat": 4, "nbformat_minor": 2 }