{ "cells": [ { "cell_type": "markdown", "metadata": { "pycharm": {} }, "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": { "pycharm": {} }, "source": [ "\n", "< [Scenario Analysis for a Plant Expansion](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/06.02-Scenario-Analysis-for-a-Plant-Expansion.ipynb) | [Contents](toc.ipynb) | [Risk Averse Gambler](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/06.04-Risk-Averse-Gambler.ipynb) >

\"Open

\"Download\"" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "# Risk Neutral Gambler" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "## Problem Statement" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "THe risk neutral gambler enters a game with the idea of betting until he or she either reaches a goal $N$ or runs out of money. Beginning with a stake $x$ and wager $u$, the resulting stake is either $x+u$ with probability $p$, or $x-u$ with probability $q$ (where $p + q \\leq 1$.) The wager must be smaller than the stake or any maximum wager established for the game. The future value of money may be discounted by a factor $a \\leq 1$. \n", "\n", "Given an initial stake $x \\lt N$, what is the optimal gambling strategy?" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "## Formulation" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "This classic problem in Dynamic Programming is discussed, for example, by Richard Sutton and Andrew Barto in their book [_Reinforcement Learning_ (MIT Press, 1998)](http://mitpress.mit.edu/books/reinforcement-learning). The function $V(k,x)$ is the expected value of the game after the $k^{th}$ wager and with a stake $x$. If the gambler reaches the goal of winning a stake $N$ at $k$ then the value of the game is $V(k,N) = N$. If the gambler loses everything, then $V(k,0) = 0$. Otherwise, for $x \\lt N$, the Bellman equation for optimality provides the recursion\n", "\n", "$$V(k-1,x) = a \\max_u \\left[ p V(k,x+u) + q V(k,x-u) \\right]$$\n", "\n", "where $a$ is the discount factor for future values. The maximization is over the set of possible bets ranging from $0$ to the minimum of $x$, $N-x$, or the bet limit $B$. Note that the state space and set of control actions are finite." ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "## Solution by Linear Programming" ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "The optimality equation can be solved by well known methods for policy iteration. Alternatively, as shown, for example, by Sheldon Ross in [_Introduction to Stochastic Dynamic Programming_ (Academic Press, 1983)](http://www.amazon.com/Introduction-Stochastic-Dynamic-Programming-Sheldon/dp/0125984219), an exact solution can \n", "be found by linear programming. We seek a stationary solution $V[x]$ by minimizing $\\sum_{x \\in 0..N} V[x]$ subject to \n", "\n", "$$ V[x] \\geq a \\left( p V[x + u] + q V[x-u]\\right) $$\n", "\n", "for all feasible bets and all $x$ in $1..N-1$ with boundary conditions $V[0] = 0$ and $V[N] = N$. The set of optimal wagers $u[x]$ are found by determing the constraints that are active at optimality. $u[x]$ may have multiple values." ] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "## MathProg Model" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "pycharm": {} }, "outputs": [], "source": [ "%%script glpsol -m /dev/stdin -y output.txt --out output\n", "\n", "/* Problem Parameters. Any of these can be adjusted in a data section. */\n", "\n", "param N default 100, >= 1; # Goal\n", "param p default 0.25, >= 0, <= 1; # Winning probability\n", "param q default 1-p, >= 0, <= 1-p; # Losing probability\n", "param B default N, >= 1, <= N; # Maximum wager size\n", "param a default 1, >= 0, <= 1; # Discount factor\n", "\n", "/* Set of States */\n", "\n", "set X:= 0..N;\n", "\n", "/* Sets of possible wagers. These are parameterized by the State */\n", "\n", "set U{x in X} := 1..min(B,min(N-x,x));\n", "\n", "/* Value function */\n", "\n", "var V{X};\n", "\n", "/* Exact Linear Program Equivalent of the DP */\n", "\n", "minimize OBJ: sum{x in X} V[x] ;\n", "\n", "s.t. C1 {x in 1..N-1, u in U[x]}: V[x] >= a*(p*V[x+u] + q*V[x-u]);\n", "s.t. C2: V[0] = 0;\n", "s.t. C3: V[N] = N;\n", "\n", "solve;\n", "\n", "table tab1 {x in X} OUT \"CSV\" \"output.csv\" : \n", " x~Stake, V[x]~ExpectedValue;\n", "\n", "printf \" Goal = %4d\", N;\n", "printf \"\\n Maximum Bet = %4d\", B;\n", "printf \"\\nWinning Probability = %8.3f\", p ;\n", "printf \"\\n Losing Probability = %8.3f\", q ;\n", "printf \"\\n Discount Factor = %8.3f\", a;\n", "printf \"\\n\\n %7s %10s %4s\\n\",'x','V[x]','u[x]: Optimal Wagers';\n", "printf \" %7s %10s %4s\" ,'-','----','---------------------';\n", "for {x in X}{\n", " printf \"\\n %7d %10.4f \",x, V[x];\n", " printf {u in U[x]: abs(-V[x] + a*(p*V[x+u] + q*V[x-u])) < 0.00001} \" %3d\",u;\n", "}\n", "\n", "end;\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "pycharm": {} }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nChERqdb/A9GMshF6pxFjAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import pandas as pd\n", "df = pd.read_csv('output.csv')\n", "df['ExpectedValue'].plot()\n", "xlabel('Stake')\n", "ylabel('Expected Value')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "pycharm": {} }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Goal = 100\n", " Maximum Bet = 100\n", "Winning Probability = 0.250\n", " Losing Probability = 0.750\n", " Discount Factor = 1.000\n", "\n", " x V[x] u[x]: Optimal Wagers\n", " - ---- ---------------------\n", " 0 0.0000 \n", " 1 0.0073 1\n", " 2 0.0291 2\n", " 3 0.0695 3\n", " 4 0.1166 4\n", " 5 0.1771 5\n", " 6 0.2781 6\n", " 7 0.4037 7\n", " 8 0.4663 8\n", " 9 0.5601 9\n", " 10 0.7085 10\n", " 11 0.9041 11\n", " 12 1.1124 12\n", " 13 1.5680 12 13\n", " 14 1.6146 11 14\n", " 15 1.6953 10 15\n", " 16 1.8652 9 16\n", " 17 1.9826 8 17\n", " 18 2.2406 7 18\n", " 19 2.7385 6 19\n", " 20 2.8340 5 20\n", " 21 3.0495 4 21\n", " 22 3.6164 3 22\n", " 23 3.8496 2 23\n", " 24 4.4497 1 24\n", " 25 6.2500 25\n", " 26 6.2719 1 24 26\n", " 27 6.3374 2 23 27\n", " 28 6.4586 3 22 28\n", " 29 6.5997 4 21 29\n", " 30 6.7814 5 20 30\n", " 31 7.0843 6 19 31\n", " 32 7.4610 7 18 32\n", " 33 7.6489 8 17 33\n", " 34 7.9304 9 16 34\n", " 35 8.3755 10 15 35\n", " 36 8.9623 11 14 36\n", " 37 9.5873 12 13 37\n", " 38 10.9539 12 38\n", " 39 11.0939 11 39\n", " 40 11.3360 10 40\n", " 41 11.8457 9 41\n", " 42 12.1978 8 42\n", " 43 12.9717 7 43\n", " 44 14.4654 6 44\n", " 45 14.7520 5 45\n", " 46 15.3984 4 46\n", " 47 17.0991 3 47\n", " 48 17.7988 2 48\n", " 49 19.5991 1 49\n", " 50 25.0000 50\n", " 51 25.0219 1 49\n", " 52 25.0874 2 48\n", " 53 25.2086 3 47\n", " 54 25.3497 4 46\n", " 55 25.5314 5 45\n", " 56 25.8343 6 44\n", " 57 26.2110 7 43\n", " 58 26.3989 8 42\n", " 59 26.6804 9 41\n", " 60 27.1255 10 40\n", " 61 27.7123 11 39\n", " 62 28.3373 12 38\n", " 63 29.7039 12 13 37\n", " 64 29.8439 11 14 36\n", " 65 30.0860 10 15 35\n", " 66 30.5957 9 16 34\n", " 67 30.9478 8 17 33\n", " 68 31.7217 7 18 32\n", " 69 33.2154 6 19 31\n", " 70 33.5020 5 20 30\n", " 71 34.1484 4 21 29\n", " 72 35.8491 3 22 28\n", " 73 36.5488 2 23 27\n", " 74 38.3491 1 24 26\n", " 75 43.7500 25\n", " 76 43.8156 1 24\n", " 77 44.0123 2 23\n", " 78 44.3757 3 22\n", " 79 44.7992 4 21\n", " 80 45.3441 5 20\n", " 81 46.2530 6 19\n", " 82 47.3830 7 18\n", " 83 47.9468 8 17\n", " 84 48.7913 9 16\n", " 85 50.1265 10 15\n", " 86 51.8868 11 14\n", " 87 53.7618 12 13\n", " 88 57.8617 12\n", " 89 58.2818 11\n", " 90 59.0081 10\n", " 91 60.5372 9\n", " 92 61.5935 8\n", " 93 63.9151 7\n", " 94 68.3963 6\n", " 95 69.2561 5\n", " 96 71.1951 4\n", " 97 76.2972 3\n", " 98 78.3963 2\n", " 99 83.7972 1\n", " 100 100.0000 \n" ] } ], "source": [ "f = open(\"output.txt\")\n", "print(f.read())\n", "f.close()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "pycharm": {} }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "pycharm": {} }, "source": [ "\n", "< [Scenario Analysis for a Plant Expansion](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/06.02-Scenario-Analysis-for-a-Plant-Expansion.ipynb) | [Contents](toc.ipynb) | [Risk Averse Gambler](http://nbviewer.jupyter.org/github/jckantor/CBE40455/blob/master/notebooks/06.04-Risk-Averse-Gambler.ipynb) >

\"Open

\"Download\"" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }