From ecc8d5964590cf7c004ce93eb064dc46f42a75d7 Mon Sep 17 00:00:00 2001 From: AngryCracker Date: Thu, 15 Feb 2018 13:58:47 +0530 Subject: [PATCH 1/5] Added Policy Iteration section --- mdp.ipynb | 493 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 492 insertions(+), 1 deletion(-) diff --git a/mdp.ipynb b/mdp.ipynb index af46f948c..d1c6694da 100644 --- a/mdp.ipynb +++ b/mdp.ipynb @@ -30,7 +30,9 @@ "* Overview\n", "* MDP\n", "* Grid MDP\n", - "* Value Iteration Visualization" + "* Value Iteration\n", + " * Value Iteration Visualization\n", + "* Policy Iteration" ] }, { @@ -649,6 +651,30 @@ "pseudocode(\"Value-Iteration\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### AIMA3e\n", + "__function__ VALUE-ITERATION(_mdp_, _ε_) __returns__ a utility function \n", + " __inputs__: _mdp_, an MDP with states _S_, actions _A_(_s_), transition model _P_(_s′_ | _s_, _a_), \n", + "      rewards _R_(_s_), discount _γ_ \n", + "   _ε_, the maximum error allowed in the utility of any state \n", + " __local variables__: _U_, _U′_, vectors of utilities for states in _S_, initially zero \n", + "        _δ_, the maximum change in the utility of any state in an iteration \n", + "\n", + " __repeat__ \n", + "   _U_ ← _U′_; _δ_ ← 0 \n", + "   __for each__ state _s_ in _S_ __do__ \n", + "     _U′_\\[_s_\\] ← _R_(_s_) + _γ_ max_a_ ∈ _A_(_s_) Σ _P_(_s′_ | _s_, _a_) _U_\\[_s′_\\] \n", + "     __if__ | _U′_\\[_s_\\] − _U_\\[_s_\\] | > _δ_ __then__ _δ_ ← | _U′_\\[_s_\\] − _U_\\[_s_\\] | \n", + " __until__ _δ_ < _ε_(1 − _γ_)/_γ_ \n", + " __return__ _U_ \n", + "\n", + "---\n", + "__Figure ??__ The value iteration algorithm for calculating utilities of states. The termination condition is from Equation (__??__)." + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -766,6 +792,471 @@ "source": [ "Move the slider above to observe how the utility changes across iterations. It is also possible to move the slider using arrow keys or to jump to the value by directly editing the number with a double click. The **Visualize Button** will automatically animate the slider for you. The **Extra Delay Box** allows you to set time delay in seconds upto one second for each time step. There is also an interactive editor for grid-world problems `grid_mdp.py` in the gui folder for you to play around with." ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "# POLICY ITERATION\n", + "\n", + "We have already seen that value iteration converges to the optimal policy long before it accurately estimates the utility function. \n", + "If one action is clearly better than all the others, then the exact magnitude of the utilities in the states involved need not be precise. \n", + "The policy iteration algorithm works on this insight. \n", + "The algorithm executes two fundamental steps:\n", + "* **Policy evaluation**: Given a policy _πᵢ_, calculate _Uᵢ = U(πᵢ)_, the utility of each state if _πᵢ_ were to be executed.\n", + "* **Policy improvement**: Calculate a new policy _πᵢ₊₁_ using one-step look-ahead based on the utility values calculated.\n", + "\n", + "The algorithm terminates when the policy improvement step yields no change in the utilities. \n", + "Refer to **Figure 17.6** in the book to see how this is an improvement over value iteration.\n", + "We now have a simplified version of the Bellman equation\n", + "\n", + "$$U_i(s) = R(s) + \\gamma \\sum_{s'}P(s'\\ |\\ s, \\pi_i(s))U_i(s')$$\n", + "\n", + "An important observation in this equation is that this equation doesn't have the `max` operator, which makes it linear.\n", + "For _n_ states, we have _n_ linear equations with _n_ unknowns, which can be solved exactly in time _**O(n³)**_.\n", + "For more implementational details, have a look at **Section 17.3**.\n", + "Let us now look at how the expected utility is found and how `policy_iteration` is implemented." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " Codestin Search App\n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
def expected_utility(a, s, U, mdp):\n",
+       "    """The expected utility of doing a in state s, according to the MDP and U."""\n",
+       "    return sum([p * U[s1] for (p, s1) in mdp.T(s, a)])\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(expected_utility)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " Codestin Search App\n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
def policy_iteration(mdp):\n",
+       "    """Solve an MDP by policy iteration [Figure 17.7]"""\n",
+       "    U = {s: 0 for s in mdp.states}\n",
+       "    pi = {s: random.choice(mdp.actions(s)) for s in mdp.states}\n",
+       "    while True:\n",
+       "        U = policy_evaluation(pi, U, mdp)\n",
+       "        unchanged = True\n",
+       "        for s in mdp.states:\n",
+       "            a = argmax(mdp.actions(s), key=lambda a: expected_utility(a, s, U, mdp))\n",
+       "            if a != pi[s]:\n",
+       "                pi[s] = a\n",
+       "                unchanged = False\n",
+       "        if unchanged:\n",
+       "            return pi\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(policy_iteration)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
Fortunately, it is not necessary to do _exact_ policy evaluation. \n", + "The utilities can instead be reasonably approximated by performing some number of simplified value iteration steps.\n", + "The simplified Bellman update equation for the process is\n", + "\n", + "$$U_{i+1}(s) \\leftarrow R(s) + \\gamma\\sum_{s'}P(s'\\ |\\ s,\\pi_i(s))U_{i}(s')$$\n", + "\n", + "and this is repeated _k_ times to produce the next utility estimate. This is called _modified policy iteration_." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " Codestin Search App\n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
def policy_evaluation(pi, U, mdp, k=20):\n",
+       "    """Return an updated utility mapping U from each state in the MDP to its\n",
+       "    utility, using an approximation (modified policy iteration)."""\n",
+       "    R, T, gamma = mdp.R, mdp.T, mdp.gamma\n",
+       "    for i in range(k):\n",
+       "        for s in mdp.states:\n",
+       "            U[s] = R(s) + gamma * sum([p * U[s1] for (p, s1) in T(s, pi[s])])\n",
+       "    return U\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(policy_evaluation)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us now solve **`sequential_decision_environment`** using `policy_iteration`." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{(0, 0): (0, 1),\n", + " (0, 1): (0, 1),\n", + " (0, 2): (1, 0),\n", + " (1, 0): (1, 0),\n", + " (1, 2): (1, 0),\n", + " (2, 0): (0, 1),\n", + " (2, 1): (0, 1),\n", + " (2, 2): (1, 0),\n", + " (3, 0): (-1, 0),\n", + " (3, 1): None,\n", + " (3, 2): None}" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "policy_iteration(sequential_decision_environment)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "pseudocode('Policy-Iteration')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### AIMA3e\n", + "__function__ POLICY-ITERATION(_mdp_) __returns__ a policy \n", + " __inputs__: _mdp_, an MDP with states _S_, actions _A_(_s_), transition model _P_(_s′_ | _s_, _a_) \n", + " __local variables__: _U_, a vector of utilities for states in _S_, initially zero \n", + "        _π_, a policy vector indexed by state, initially random \n", + "\n", + " __repeat__ \n", + "   _U_ ← POLICY\\-EVALUATION(_π_, _U_, _mdp_) \n", + "   _unchanged?_ ← true \n", + "   __for each__ state _s_ __in__ _S_ __do__ \n", + "     __if__ max_a_ ∈ _A_(_s_) Σ_s′_ _P_(_s′_ | _s_, _a_) _U_\\[_s′_\\] > Σ_s′_ _P_(_s′_ | _s_, _π_\\[_s_\\]) _U_\\[_s′_\\] __then do__ \n", + "       _π_\\[_s_\\] ← argmax_a_ ∈ _A_(_s_) Σ_s′_ _P_(_s′_ | _s_, _a_) _U_\\[_s′_\\] \n", + "       _unchanged?_ ← false \n", + " __until__ _unchanged?_ \n", + " __return__ _π_ \n", + "\n", + "---\n", + "__Figure ??__ The policy iteration algorithm for calculating an optimal policy." + ] } ], "metadata": { From f6c532de89e5876d5674680332745a97707b9921 Mon Sep 17 00:00:00 2001 From: AngryCracker Date: Thu, 15 Feb 2018 14:44:39 +0530 Subject: [PATCH 2/5] Removed ambiguous test --- tests/test_mdp.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/tests/test_mdp.py b/tests/test_mdp.py index 9117a32d9..1aed4b58f 100644 --- a/tests/test_mdp.py +++ b/tests/test_mdp.py @@ -70,14 +70,6 @@ def test_policy_iteration(): (2, 1): (1, 0), (2, 2): (1, 0), (3, 0): (0, 1), (3, 1): None, (3, 2): None} - assert policy_iteration(sequential_decision_environment_3) == { - (0, 0): (-1, 0), (0, 1): (0, -1), (0, 2): (0, -1), (0, 3): (0, -1), (0, 4): None, - (1, 0): (-1, 0), (1, 1): (-1, 0), (1, 4): (1, 0), - (2, 0): (-1, 0), (2, 1): (0, -1), (2, 2): None, (2, 4): (1, 0), - (3, 0): (-1, 0), (3, 2): None, (3, 3): (1, 0), (3, 4): (1, 0), - (4, 0): (-1, 0), (4, 3): (1, 0), (4, 4): (1, 0), - (5, 0): None, (5, 1): (0, 1), (5, 2): (0, 1), (5, 3): (0, 1), (5, 4): (1, 0)} - def test_best_policy(): pi = best_policy(sequential_decision_environment, From 29286b845f4d306ac3a61f83580a0615e712273e Mon Sep 17 00:00:00 2001 From: AngryCracker Date: Thu, 15 Feb 2018 20:18:33 +0530 Subject: [PATCH 3/5] Capitalized header --- mdp.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mdp.ipynb b/mdp.ipynb index d1c6694da..899414704 100644 --- a/mdp.ipynb +++ b/mdp.ipynb @@ -549,7 +549,7 @@ "collapsed": true }, "source": [ - "# Value Iteration\n", + "# VALUE ITERATION\n", "\n", "Now that we have looked how to represent MDPs. Let's aim at solving them. Our ultimate goal is to obtain an optimal policy. We start with looking at Value Iteration and a visualisation that should help us understanding it better.\n", "\n", From 6962267a5866b3d0f5007858d1b8fefedf7e3be0 Mon Sep 17 00:00:00 2001 From: AngryCracker Date: Fri, 16 Feb 2018 17:20:09 +0530 Subject: [PATCH 4/5] Added images --- images/-0.04.jpg | Bin 0 -> 16933 bytes images/-0.4.jpg | Bin 0 -> 20027 bytes images/-4.jpg | Bin 0 -> 19579 bytes images/4.jpg | Bin 0 -> 21550 bytes images/ge0.jpg | Bin 0 -> 20226 bytes images/ge1.jpg | Bin 0 -> 21080 bytes images/ge2.jpg | Bin 0 -> 26216 bytes images/ge4.jpg | Bin 0 -> 23605 bytes images/grid_mdp.jpg | Bin 0 -> 13536 bytes images/grid_mdp_agent.jpg | Bin 0 -> 6643 bytes 10 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/-0.04.jpg create mode 100644 images/-0.4.jpg create mode 100644 images/-4.jpg create mode 100644 images/4.jpg create mode 100644 images/ge0.jpg create mode 100644 images/ge1.jpg create mode 100644 images/ge2.jpg create mode 100644 images/ge4.jpg create mode 100644 images/grid_mdp.jpg create mode 100644 images/grid_mdp_agent.jpg diff --git a/images/-0.04.jpg b/images/-0.04.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3cf27642178a9417922ca4c5c36426ed64f9f3ea GIT binary patch literal 16933 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

+Wxbu#xm8>9rF1HnSUCh7t6irRP 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

G%fsIpkYcM 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 literal 0 HcmV?d00001 diff --git a/images/4.jpg b/images/4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..55e75001d92ab790c824e4647f035b200519d4ac GIT binary patch literal 21550 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 literal 0 HcmV?d00001 diff --git a/images/ge0.jpg b/images/ge0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a70b1870321307b9e1ff7ffbbd2d6fc2504eb3a9 GIT binary patch literal 20226 zcmeHv2Ut_vw(deinu;JrMTrFvY1t}81&OG15wU<$w<6NSNRuKE73n1c3W7?N-g^_G zQ~?3$5QGql)IdTBfwVWh@4j=6c<$Z%ynEmG-n;ii=Es`JWUV#F8viK&7?C-^9EEmi zt81x4EG#V0@8BQA9D*)DTUc0r{QT>Sm5uesYunbXtZeMt*x7#!4o+@P4h}93c6P2E zTwL7S!Hb=9C(n-UJAWMiILVJc|M6GgXFCTw$Bz~N*o*lQ;^lzIEOD$XhoLRJEUdgN z%z6k0K`dkkuf=>chJBgwv?>Ii=tl5+A2ilwemW z+jw1ZWBS#N4&4GD5&O2D*6sQezQQp9tfEg&c!ZnaXmao;sA)GMim}rkL#gbf_%b08 zh6ocX$g5*Q8*W8;8Plv2D2lZ?#Du<*Mwt+8{}77gjH)|NVQ2WG*_qJj_aP<}oR{S? z?9o(HZd{8?1@m-+HADHL#EC$ zp}Ty>gu{k9t$5+>>5uJNi@iRk!;Jb9l^xwA@P~62Pb=bd;FXKSQ_0UuC2z(k%~($2 z7QZgRvF2l8WyIw%^hW|hyP7J44yHLMglB6^G#wq15jxi=TkmcuhCtb|E}YMyez3Cp zP34#s6JmQnL^mLwc{G+Q!%1)OBd;=OioM>4+)$?F-EvP|vTXWzFFqKlRV*)8bzvzF zwl%8_Z!SOMUf?-36Ca3SE5-ydjuKU}(mPN)nx43n^{=d!I$w`!kh{-qO7yY|5 z1JjK@eV3h=dZOlG6@VIjt0F`atR9=eHN>6r(I(|4C)k|{3*|3`S?u!*6_4xd*Cg0J z5EzylvVO03s{We$bq)LRca=aHE>RTqRb)ylNlo=xIXn&f41?s{!*{aKp1x$%-vUZ3zR+}#WI9COD;nT3=&)mRB@Km}q=uq&mCagtpYru$44 z8`h#qJF)b_Nzrbsrg#*`Z7r2Lu}sC6?+=%1RekEMqBzr%QEJ`~LWk96-)Nk;EO*_z zUz`bz(7jh;?XA0z-_nzUK7W-+3WENT0no}2xka2~_;vuhNV(&QWI`>mWFB7(-^yZ$ z$kqaqV5I#Rw=P0|SvkF=dK>iuMmIvv>Pu0zpYZFNyQ1#lxs#HuuPiOT>Yrod2g4Hw z9t+D?SW}G({VnZ?LfQBZp^GF`eOB;}-`$Y)ShRm`9$}0aAF#+LSeYLu{1k?jv7e9> zWeJgbajwDZkeNC4GUJODRaG1r+7aAYh&2Ow@05qPV>=Wq)_%beNcBfZCMF z-Y3dcWFAsYHPt}%Xp;=mthzX##P(ssz-RQaU70bG(^zy=S0ruML9HD3eBZa4$M5MA zl9*6*V6OLzT-G{7QJBvt8Xdb>e}KE9p9NKC&noh-murF zJ@iHMZpjw0CHpUD>5%&x!G;NmXOT`a8g#EQAWAbBNH{VzhsJ^ zrNdL>rK(ke(tb&|taEp~pg!rjnLLVCHfjpPIEBNT!)b<0=!H1YJqra8v8FvfvvvlW zL*c~>m{1&0$Z?b}j2L;733Z@o4w%{sNeR{*CiFbEiSd{TjfXP$QMI}jObB>85)d5M zM0&!`G6tU=Y<-alg(*_>nGmNunzqJ-nuKXm5lK(Z;Qo4X4Vq{lVj1Y`ek3thJLsR6 z{il%svsJ2%o<&o$Ld=(tjtSl`q8MJkqM#^>)ghS3*m(EAmh2I`n9%&K9?VLVQCk9! z7|A^FgHyT|p5lUL$J%%}QQllw&W*fTR&HI8Y4mDcAb5W%`+<{jy(_uZV>gx0PP(^B zxepHIvxZpopp8hlASSf56{LIf_r9W57Ol+Cqzeoa6d{e#dS!7B`jIgc@_hxsqMXZw z7GHt9Eq(JFSpi9f$zqm;NiJ|2Ws7qm}lPF3i;-}e|L^4)W`Vk1W3xV}` zg`+QFXg6SgJ8|IGCx{9vp(wWu5X&u#jCFH{B>HbB{+ENu0ssR=%DEa4U?%|-b@1OlA%4uv78%ZwfVM11L?2xJ- zd4WV@Nu!-0>4msdpXlo1l!c3S-|ZgUr{I;nUqgBn{yLzcap6f2c8bPdRcFZH?hi}B zV}dX|ed8Z1<3o#gXwO~l_U$W6#hw?j3*LjZ=~D{m(=@$}3F7mtAKuII(X5w>u<2@} zx7#rxhvqynZ*qxN1y!X?XYmS(>UnM1YRLR=Mf;PSJz2+bL*w--`zTZ6ZCs0WjI%`) zFFf+OKIJPVSTFeEV@gcdl1BCQs8K)rQt;RmsGh4Ynqd+89l36E*=?*ri*yM<;m9;OSr?$xpH=Z!o zCa(kFMQHRR{%wIKlGw>B-5>Uj4O^*otB81NlTsF+JI{IPHQ3>)N_#PQ0j=@n2&tzs z-|Wvez1;36eB43&YZ|fxkWUswc$i##U>sMMvPJ?%7d-7+!{#DJ*y43z#12Z7$Ki7cSd3PGc z+QAAt>bV2zo=4W5iDTXAR{9d9y$qvVsu4$ZBJzQ;^y>#UC+{4k1H@QQ$K$DjF6MMz zc`c*C;*z5luPMN69n^&}8tnn6c$w@1vTc6EWD^66nlG7x2{54vPLPcZv?Va1nUVJD zU^8Nm$f2bV-(PvYB@CQvcbMf#IW3jNDdM2^!<^>aM@{A6=qnhSF6?h77V{IP?T3SY zSY@LDV3mzA)EN{d7V*>U?AvEky#MZLMA}uI0+Omw6oXR4a^E6j!<-?G{%K-$u%cey z6ho6ThON&5tLz15Lc29KO^aTbj7j9;7y>zH+UgIh9LD?>vhc-7b|0&Y1(S;i6bpftF(CvSzyVSljo zbHaMW1&NUp!DZ4d97k7#Hi_ovX}Ys;%6#RmJPa1KH0agZzEQVp+(~xrdlfMCpGW; zoLKZBiB{Xxgc=+l6AD&-oH}4<#zsQdBU!aZb(J)`<<7zz!>6%=Z?clLW!uZ_$)CN4 zZ4SS=axQ3v10SPSg{)%$zUpVu{w!(v98GQe3Kx6K8xXmiDJ&`JQgLnJc_msYS~IEZ zeLWd<%e8wcsDms>sdl9v@RT8jjBqLd3c|;GCk6L$jXZv%;CN}GE7FDy9W{1;&%*Yd zEltAPlyTA|vt*J~t@-X%1XdB>GRK6rc{+^4{NlOfbfoBqhtBmn^T4l@_WE0xd`nqK zx&KMJTZ+r~cgygJj%E?mg`W}e^URwGDP{Cl(H0d^HOY2G`gYf4&c>#6iq~A7tfVGI z$J#4>qqURZ^VMTs+~ZdDdBVEH$noeP85ODOvH%%5+;&ex5ux}CA9VKEi{g6U{$(I=nkVD!JVVR<;hNre?IRl4CBU5@4KtuFe7M`y^&M%uEae^ zDWg;D-Sr7hQMG%s=ko6VqUW36u#srK5N@BeF2lDjBj4XnC{=WKs$QiI=Q8Zgr?7p0 z2*eDsVM;tW5~A^ekrMux&&R@FKRrUj1+*ZmloTz>RQ=xR<_U zLPlA}IlS!0N#=}mu?TtymWT0fe(u{`or)9_`n+2MRIA>oGNJD3cOHvD%KA)*0~bz3 zE42^P9y^3Qh8fup8Eh*NXa+b0)+r4}3k7}z*iY^YjJK#IMG$W26Amk#%ucF6P>f(J z<4hIvdqTDlYM#- zr5H;+n92MStz-KvN_Ku+uqzDXt7>rM9}T@=WB#;qCN!i+k4j3bm9J>-R1^4eQ(uiA z`lDeu<=@Z|q{31{!IRd#k5ID6{`r`0+6|i|$|G}bJCWlhUD7I@$urNe!=m{vUHF(q zSz+#nhB7Cj*Kb;_sC@ViAGE8zHUlE5Y!@Y)k~a9*7Be(HF@pQZNq2E0k7_UN#IfI zMT{mrs?hCM+$OYL@stj*I_er>tnvMIBCdL`mr&|k*?KGjU zw8uxEe_*jmnDaP*3&`%TkLR;rk!o|q9(${{Gx`C!LuR-qs`gmO{rtw%?|b@gaf*51 zcB4LBD9KT}Nt*8VhTR;Qi4*LX!*JT1_(loAew)Mgr3l8$WUCksnjS3U_TFCPp8NT* z*q!J{+b|7qia7c?L-Y+r#?u(sTh8eXoDV^nJKM(N!0_9Lww0!t?WLp-5kor4YHD99 zsLBQGTiJJ>IxD|8uZY)K-0Ie$X0KPDK60|}zURe_=dQ=azDK4H8sAd2bF!_K$?SZ? z?SA}lWzpjH9AS57jlm41;gqsR75y!crQfv#DdZpd`3^BennZg`bzMaAVyca&1@=Q`?rUH#64 zil*lKt*8hyO6j_?&RCwHEkm&S11Uyx3|C-Eo z_He2}@zt3YxXo$zue>zE5YIWJ1je zZc_m1hD_+9?o~sRN9tC8!cjhc_uF5tM#Al7;9y*yY-80I)OtL%ThTpuZv*P+_&k1|XZWMc^ke?5OEGeF$PyFJ^sT zO+ivtJU1w1fy2 z0Oq_j2gCurtD*c(cvOTrg%6ybHBx{^0;dAy4{^_Te`k3Qs;=34CunME$VTC1vQSI% zUKVQmDdrQ=jIEe;Xrck7j3NpF@x~whWhIQbWbT7mIc^7|=-A?Dq2@O`HB^Mw#hB1j zIOE*uhUOqNCT8S4=&2)bS^`PYI)Z$;kC8aopWE9(y-GqF)7{$`}C!eU%t0JEPT1f)bu? zW9WT2{$g>2E<&xuF>-c|Tex*1i_I(ONSKyrq#egtkjBC1^6#hz-G*+E(2aT6t1=h# zd*Cv1$N;iJtYvjWYnw>S1IA8bTdOLEMZoyUZ+gdWKti$VjZ=5jq@@h6L?Z)HODqz1 zlJ8C(Kq6gMN*K8Kslm6f%_{N7%FWgs#Bc-R1Dryn%H=-^t}svd640?N=Cmh{cQA1X z3O9gBM{u@~Cf1NjlW^7?X>nA4`H!V$Oi0BYq z8GbT=fZ((T1YvmA+&+mZP|_F05CJ$ovx`fu19Sfb!??7r^vhz9|Nd$vHX4IY6EV$j z8Yht5e}QdNM{xwxQ8>DCxbF?#{(d=3?3fkSkeTWkOxI>=d4yMsF^zOquQ7lw?gq zNkJ0-GV*={m1ICeeNF~TTH*sh8_s*fwEpKa=0%3}9e#k42-JI`0ylEAI!_WWbIq&v z#XUdNlM?iOhSrSn>`paw<=PS=am96i(WBdM_aD9NI9XkWL5a3sIv@M?=$?^&?C=My zN?}qB*rl&M6@;*z-kpHS8!<*L{owF0)`$%_7Qqm1MKZLKXF*kAY96(OVq8=yy2kJV ziVYNO0-c_o7mdOjdxKh$c`=Hn7=@!n0@e))QpR91@Kb(EfcT2A-Y7w=Q(?4tprSn4 z;8gKIB+aPxBeRlHlQ@b2t{6raBEUdT)gB*M%4g~Uhekb+<;yyr33168Uqqs3Q`8M zE{@IuCFb}7@F4)xu8lUm^;I|xc)kdgq<;z_;%w76d!3Bkm}T4>!C=zvMg)&p+LuEV&j=i0T1zD8lo*TX3-x;ff~F~4g*8;H`{-;&_L^Q(&d9WC5d*Bw&v%9`GV zQ;)Cf!aC!0HKcDCvg-|MchJtJ2$3r@npH54WxSwSK5Ov-+K=B;!8?n-JclBGUs=NtFXt$lcGie` zcadwvYr0kuyNqet-4;Ev#Y61*#c{VskzCuXN8Qt``#Udn@zTeyfS_u#dKIl8pPCDQ zIGsM*AB$?la1RX6_1mE`I*`P!_G9wGzR#pwV(%G0x%)zOEAO`ZFJ3fOV1rop%b%(X zzY&TdFbJS?3lQn}2+lEE-G<7mT}-I8SIxc+S%?u_@Um3%tonPPKx~FyZw4UQ0nt7I z!o`4^e_svQCKZ~CQ0AIC-G)rj7wxxv z8L~b;b6oZQ^83YV11-f;O23WpL++_ZhREFOW0OLn35$1Mt(EJ`W9e!$tQsiaV^So zO4t%4@rPrZ$>q{~<*rskN?Aq?e4HHvZ05VQIT?0C1C1744F z4#8K_T6JLW{C#})^E=B|szSeOn%13Y*soQrbC4^gr+KehtoZtxefrDTM;9~~e>$5! zh?g3H=|`Ba?*LFP&vE_a(eZSF4|j{v@#rOHaH=Rg$Ruf0P~zjBH!rj;KYoM4*PGfw z+nx+qPmwhMYB-O|Ji8*EM!8Yz=1_~@#UXq$X_m+1A^^a3vR!pe6! zF+w4=Z{PL^E&y+inM_}I{;mQ7wCCf%gU094`~c)NXh-*%)99!PMF4T49R_QTZ}1P5 zU)<3_V*T_RCAhYfC)3WuBz7`$WSVT9x#;A?=|!y1oNoBW#?lk{OiIOkXg7X8@69UO zHHu?kriq5l-L^5~gRT#bW=R;>Vb8gv1XWNT+U@3at(xc>QnTMJyjbQ=zk070={m2mO;M}k zi`SM>Vs9)v+Alt=%!tqppHzIX&*LcJ2yw9<$H(JSj1!^2uaG>l+pz~q%j{*}3+@#; zh92zw@;Xd&LVexaK%IRnuh#WQL-W2shVJoGgQjtdKR**R<+2y>rAiJi*S>8o-+>D_~*@tzUmqwy2n>*$v&#;83rW!K)@I7Ej(OJ5p_a66E7`9mv!(+fg0-BpjyVVK(Y zBGT@vQ9hsu?))WT|2L?D{}Vyq{|f&8&hIU$7?7q*;WogN+2G98!7GLyqFAA_io?xJ zjAoZK97z}Q*PSvsT4@6aIUBzCH>@otvbO>WvIJkk`~1@LExw!w&K(i(-Bifz(NY@T zaZ+fEC+se1p@5&ERa#o29>x*lqxfaeN^~bD3yaAM1>$90H%w^Fj#+O}dR7gLGRrwH zq(w~i$+dBP_<2G0ZWLMf^w{zAt10J-q8+3;zP;WNiB7=$ROJ1+q}6ubq{YjHcFjEU zn0C|m@4#zqZ6>*y2OC{{R4I~!96v?7rQkCrycobZs5ie}lAfC%F}-cC^Q6R@?ruH) zr!nj?lk3kjR`fz)`Lc;5Nxi@hd!Fa4Ze^oiU^|K*Rj9YUYI&y`|LBmCj8=IGLj2}y zcfD{YGH{CjetkGv(qG4T(nez`Qtk#e9${t$fAdn53GIQmTHtXZuzYj?&1Q^#c}=aH z*x>t)960JFf5%2FU_Dl(N<8uO@8P_~L*<%P3oS2#m#>cq)BTiH@fFH4PIeCX$GSS| zl&UdUfTE!TJ6tR^Q6!81ocFX)Ip<^B-0bs&z$cHmDyU9BS6DZdrn9^|acyO5S8p42WE z96_ooZzWwoI^wR?(mcUp*TpGorOWs=7Z7*+ZO#6t0={_acykwl4n!vt6`cC4dMFyT zq_bp}=bF(x4O==;$b@nMKb*+5f~_s4psXxi`CG-Bt>2zvi{9!JuRWak+{h>}KPgDE z{zqf$zc(IYO4w;{^y(3yPXSIBiz>3yAt!)*+lJx~%9HKDQoS$ivxl61ZB1zZaB>Vo zdn$*b?ge>-(qMnZR~9w?D}QEeGpHDwv)@9v9dq>F-JM(#NA@165P7Bdb3aS2>$pO) zc+4a8R+w#7)TtbT%-TFvw?5)EKG*^8`uTGen)Q($)Hg$ay=wRP)RdkeJz0O4O0nz? zms{UuH5tmfH_6FY7<=nnYrOR2`H63NcW*>rHUHb5vY#5vJ{%!Grxc)w{vRv#0`4ai z$2L)2FBSE&)gC{7%hXiEUNrrNUw_D#!n=NZ)b~t1B;{z3=SkdlFhRLFT`5iDP#)uM zIpo%6>D{k-_bt$7cJ{M6E-sbqku7t-betpP?fyu)sbe)aYDO?SM?SO+&r^>#JLX!I z#%|zf7=dBfgP*(VHaFQV`4f1l4%YG8Jq1WA-D-?ZbW;sGF)D9NN%*W&oyWVd_>4Du zSPPzw-AwXZ5_5fy7)-sh)hGOI-`e~zY21)fH;xPRFiW#f{e&DHHoRO=Xm@ki?0R|U zJo4@5TLXMzl`nQAs((#*rg{f|Ojq$h1g3@D{aumUh>oN<;sEWb(e+aYl&!VLgb_Vi zm+Nz8?iGJ%|ENg)Mt`g!lGx8U2U5&_Cnl7Tb4s`Do{q)^HGYHlzCXIl|6uHg{~G6X z(bEwVSnorikXe+0nvpJfb8dgr<|rp``{tgS1?N93(fn%(hvg&9C?9>TCt|PSliTWs z8WN;46_(DoTPpLnXLCrNJNQfrd6P1iFk!ydu~uYo&a%LCe`imGL!R(M(Rg{^Fy@Q!{yd2jytJkz#;1$E>Reyy`;*MW3yo z+$i_?j``l<%QaS5D~K_XGk&%!b3ynUnw&KcQf<{0%=#+u+Gqwy!Fhhf7kP|}C{jk~ zX?2rUFS?9Nn*GSojMu9`Bb`@-do`E)F<#MWx`XRe>A-%8n;VfZ^}4omjVcEe<4%9| z)J+Jz3TKy`D^$xae0j!qy%O#r-76@uOIo5pGJzFBC)BVpIxxhP54XqLjH%{S9mZ}i zb7IFt_f(=f0MQm{OV*X~A@{e`95;{kZ z52Z!2Jlx=<+Sg$w<05li~ zEr?zKa-Zd|21!$WTT#TKAKd}x5Zr(}-IxMl7Dx(wW5&=MEI+TI>&&(fUEewBd#QS$!gTt&q1;QuYsJ6p z0JQ#g@T0!+fT*6LQUOx$ed~t!H3BM&(Sh5dd>yxEss@~!0kb>vASScaH}#0gEbnaL zkj%?YqePRW>OucW;WzV+zbg?RmB1+yap=SuGSL>sqjL0?Tkd$naf-6rt?X>eUcn7x zP9&k7k~`A#N&5KyOR`)?6c;bu7QNdYzT!GWDvhgI>h{tK{*FFjWJfVAo3VTxuZgPt zLeii^G&pEqnu}+sg3e5-3_Oi<)lmnV$J|HCbp zF&xkEO(T@eOux~M@6lUBkMW%t8?>qj57~V}Ywx!jWV5-3o6cAcI@A+2=C!4z|H?h$ z8>0qS&(HA|QSSKN>%94QzRc`Czxaxat=>)Al}%fwLHFzdoNlBoBMht3#@g*dm+8-( z8<@xZS690DWKWYGbVzZi)Qv8=R+ql_QG3J-dL}B59lp3knH zpvWIlF$$-045Mb)+K#&9d?cS)_BuK)f*IQ(-hHL$YcY#uy6S;p4A!M${7p;vh16AJ zjT`paCs==DKXNq3L(Q$J4zVuA5M)C6VrWLBhVBTNt)Tl4wcvW5JiW*hmE|cxf8l+M zl6MGMDUx(9{coDXL~|V zEnv;vXEA>Q?dCgZob-yj6kX!fm|+;rejF!A>BmPuCpZT?_jnp64!XIT7WY5k+&z=} zZOCSBznE3G+3DP*Kz3|Q2w@i-mOzsMY4m%yljF}vb`=v{{gpMwyv!T=g@|50y1m8R zKB*~@Lpk+@CbB7HW8WJUe&1SLDtJ)0Wt0Y(> z-KlopfxZk>!nCf%?Y*(1MswGi6{Aku2lWMH545vbviDredPTtlavfEVA@6*{gjD5a zXUs;kAD2Abm}=NzfZ&}qFfxlwF=h=Ji#$00SnpYgN5d zK1X3(BfqGybK!1bMOB#n$@#vSGqn-MuY*k69yTf(oY;2WOmzL4JptKB)@j4y3Ce zovB4vLb4z1`puQMZc?1!TmPg{B_t>F>ceO$RR3z3OL|;rQ`surYbXkkK!5Ce^{u|i zUZ>=Y-zM>p6-j+rWDDyqiqlO$P1p6OqCv;TJQcQ0ehc+^qS<&(`9|gB1I$F7vMccL zd3>npA?$2M!?20S)TUO2TuO$kKw3RvYpbY(U#E*0+raktVw)ydA}tF|`E)kEkbV%*&aF0#aSCCl|X_w!ToDa7Hi6f3Y+!*9!RSX zTmFcBKOOo^5$b!+`pkVTF)QIb6S6Y`(O?^fPUA=Y)!raFF`fsah~I2sG=J?jEPWr!sgib{Jg|-;M*@@j(Cz3YihFjvkC|{MjW^RR zXt6E|8y17VSxo0^ALEws=vvJSk~~aL^q?9}Rq6@vb|ZG*g~f#OKE9K#neE6O zpCV@UVxrrSF@48N#qO{i<9jIe;g5CWvNoB3d^J>-GEC@B34HV_ud{6VF~)RtczEP{ zKe;52MjK*6xKA2?J-mt8tk)pE-lY2Q|Id~6KLX7!iVmipCPY}YsH1()1E-RwO&e^z zs=tWHoVeJa=gZiIQ8d!?E76smP7G&VC>(Zs1&JKO6%xZp>cFAjGqEGz(nA5NRPr@ zlFf8%lx-aLEAA?m?Tp%_xW``?900%i{4ufdWT;2WGl|mwKl6+4dKM=^_>%TC;0r%|Vad=fUrB?0g!csGTKjZUg)M zw%(f9<*`pMCTp92iD5)rx~lzn-k$f7wP<>AXvtevpVWch$BBqn;EHwnZr2#@lsZ5$ z&_T8vp2bsdE}$YrsiB$Lj_m7|*GYJGTpssC{@4W9iSr9~=N+2IM>5jB@*@B0-~KT? zMSs{Qc~oijY?W|t=zQ=czs7N`xUt?G zco`6FPqpLwO+2!?=*K=5xNfpZ3}+476JcjOo#ZADiBA#O!|azxnsIA&Yn9&dRy;l>nieDEh499TQjTQNoe$YdT;#e6^IrpQ@8du6|7iSM pYnL&5QO#dG5lkr0^crX|H>>6gk~~r+X?ze6>&^dGnF_%i{2u{Ya2fyr literal 0 HcmV?d00001 diff --git a/images/ge1.jpg b/images/ge1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..624f16e25b914c6ef9b1622dcb2b0c2a44b8f6fa GIT binary patch literal 21080 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 G_x}$8gkLNG literal 0 HcmV?d00001 diff --git a/images/ge4.jpg b/images/ge4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b3a4b4acdd107d05d25958003b6366f65c29a922 GIT binary patch literal 23605 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 CQl0+* literal 0 HcmV?d00001 diff --git a/images/grid_mdp.jpg b/images/grid_mdp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fa77fa2768ec47d9f1ffa609650e862c38b24a88 GIT binary patch literal 13536 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≪%ac>58Zc1p=1NXs&le0v|8# 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 literal 0 HcmV?d00001 From 0b186252d66d23f3fb9a2cda64db932fe349b172 Mon Sep 17 00:00:00 2001 From: AngryCracker Date: Fri, 16 Feb 2018 17:20:53 +0530 Subject: [PATCH 5/5] Added section for sequential decision problems --- mdp.ipynb | 727 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 727 insertions(+) diff --git a/mdp.ipynb b/mdp.ipynb index 899414704..4a3f1f757 100644 --- a/mdp.ipynb +++ b/mdp.ipynb @@ -1257,6 +1257,733 @@ "---\n", "__Figure ??__ The policy iteration algorithm for calculating an optimal policy." ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## Sequential Decision Problems\n", + "\n", + "Now that we have the tools required to solve MDPs, let us see how Sequential Decision Problems can be solved step by step and how a few built-in tools in the GridMDP class help us better analyse the problem at hand. \n", + "As always, we will work with the grid world from **Figure 17.1** from the book.\n", + "![title](images/grid_mdp.jpg)\n", + "
This is the environment for our agent.\n", + "We assume for now that the environment is _fully observable_, so that the agent always knows where it is.\n", + "We also assume that the transitions are **Markovian**, that is, the probability of reaching state _s'_ from state _s_ only on _s_ and not on the history of earlier states.\n", + "Almost all stochastic decision problems can be reframed as a Markov Decision Process just by tweaking the definition of a _state_ for that particular problem.\n", + "
\n", + "However, the actions of our agent in this environment are unreliable.\n", + "In other words, the motion of our agent is stochastic. \n", + "More specifically, the agent does the intended action with a probability of _0.8_, but with probability _0.1_, it moves to the right and with probability _0.1_ it moves to the left of the intended direction.\n", + "The agent stays put if it bumps into a wall.\n", + "![title](images/grid_mdp_agent.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These properties of the agent are called the transition properties and are hardcoded into the GridMDP class as you can see below." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " Codestin Search App\n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
    def T(self, state, action):\n",
+       "        if action is None:\n",
+       "            return [(0.0, state)]\n",
+       "        else:\n",
+       "            return [(0.8, self.go(state, action)),\n",
+       "                    (0.1, self.go(state, turn_right(action))),\n",
+       "                    (0.1, self.go(state, turn_left(action)))]\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(GridMDP.T)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To completely define our task environment, we need to specify the utility function for the agent. \n", + "This is the function that gives the agent a rough estimate of how good being in a particular state is, or how much _reward_ an agent receives by being in that state.\n", + "The agent then tries to maximize the reward it gets.\n", + "As the decision problem is sequential, the utility function will depend on a sequence of states rather than on a single state.\n", + "For now, we simply stipulate that in each state s, the agent receives a finite reward _R(s)_.\n", + "\n", + "For any given state, the actions the agent can take are encoded as given below:\n", + "- Move Up: (0, 1)\n", + "- Move Down: (0, -1)\n", + "- Move Left: (-1, 0)\n", + "- Move Right: (1, 0)\n", + "- Do nothing: `None`\n", + "\n", + "We now wonder what a valid solution to the problem might look like. \n", + "We cannot have fixed action sequences as the environment is stochastic and we can eventually end up in an undesirable state.\n", + "Therefore, a solution must specify what the agent shoulddo for _any_ state the agent might reach.\n", + "
\n", + "Such a solution is known as a **policy** and is usually denoted by **π**.\n", + "
\n", + "The **optimal policy** is the policy that yields the highest expected utility an is usually denoted by **π* **.\n", + "
\n", + "The `GridMDP` class has a useful method `to_arrows` that outputs a grid showing the direction the agent should move, given a policy.\n", + "We will use this later to better understand the properties of the environment." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " Codestin Search App\n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
    def to_arrows(self, policy):\n",
+       "        chars = {\n",
+       "            (1, 0): '>', (0, 1): '^', (-1, 0): '<', (0, -1): 'v', None: '.'}\n",
+       "        return self.to_grid({s: chars[a] for (s, a) in policy.items()})\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(GridMDP.to_arrows)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This method directly encodes the actions that the agent can take (described above) to characters representing arrows and shows it in a grid format for human visalization purposes. \n", + "It converts the received policy from a `dictionary` to a grid using the `to_grid` method." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + " Codestin Search App\n", + " \n", + " \n", + "\n", + "\n", + "

\n", + "\n", + "
    def to_grid(self, mapping):\n",
+       "        """Convert a mapping from (x, y) to v into a [[..., v, ...]] grid."""\n",
+       "        return list(reversed([[mapping.get((x, y), None)\n",
+       "                               for x in range(self.cols)]\n",
+       "                              for y in range(self.rows)]))\n",
+       "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "psource(GridMDP.to_grid)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have all the tools required and a good understanding of the agent and the environment, we consider some cases and see how the agent should behave for each case." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Case 1\n", + "---\n", + "R(s) = -0.04 in all states except terminal states" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Note that this environment is also initialized in mdp.py by default\n", + "sequential_decision_environment = GridMDP([[-0.04, -0.04, -0.04, +1],\n", + " [-0.04, None, -0.04, -1],\n", + " [-0.04, -0.04, -0.04, -0.04]],\n", + " terminals=[(3, 2), (3, 1)])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will use the `best_policy` function to find the best policy for this environment.\n", + "But, as you can see, `best_policy` requires a utility function as well.\n", + "We already know that the utility function can be found by `value_iteration`.\n", + "Hence, our best policy is:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "pi = best_policy(sequential_decision_environment, value_iteration(sequential_decision_environment, .001))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can now use the `to_arrows` method to see how our agent should pick its actions in the environment." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> > > .\n", + "^ None ^ .\n", + "^ > ^ <\n" + ] + } + ], + "source": [ + "from utils import print_table\n", + "print_table(sequential_decision_environment.to_arrows(pi))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is exactly the output we expected\n", + "
\n", + "![title](images/-0.04.jpg)\n", + "
\n", + "Notice that, because the cost of taking a step is fairly small compared with the penalty for ending up in `(4, 2)` by accident, the optimal policy is conservative. \n", + "In state `(3, 1)` it recommends taking the long way round, rather than taking the shorter way and risking getting a large negative reward of -1 in `(4, 2)`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Case 2\n", + "---\n", + "R(s) = -0.4 in all states except in terminal states" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sequential_decision_environment = GridMDP([[-0.4, -0.4, -0.4, +1],\n", + " [-0.4, None, -0.4, -1],\n", + " [-0.4, -0.4, -0.4, -0.4]],\n", + " terminals=[(3, 2), (3, 1)])" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> > > .\n", + "^ None ^ .\n", + "^ > ^ <\n" + ] + } + ], + "source": [ + "pi = best_policy(sequential_decision_environment, value_iteration(sequential_decision_environment, .001))\n", + "from utils import print_table\n", + "print_table(sequential_decision_environment.to_arrows(pi))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is exactly the output we expected\n", + "![title](images/-0.4.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As the reward for each state is now more negative, life is certainly more unpleasant.\n", + "The agent takes the shortest route to the +1 state and is willing to risk falling into the -1 state by accident." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Case 3\n", + "---\n", + "R(s) = -4 in all states except terminal states" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sequential_decision_environment = GridMDP([[-4, -4, -4, +1],\n", + " [-4, None, -4, -1],\n", + " [-4, -4, -4, -4]],\n", + " terminals=[(3, 2), (3, 1)])" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> > > .\n", + "^ None > .\n", + "> > > ^\n" + ] + } + ], + "source": [ + "pi = best_policy(sequential_decision_environment, value_iteration(sequential_decision_environment, .001))\n", + "from utils import print_table\n", + "print_table(sequential_decision_environment.to_arrows(pi))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is exactly the output we expected\n", + "![title](images/-4.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The living reward for each state is now more negative than the most negative terminal. Life is so painful that the agent heads for the nearest exit as even the worst exit is less painful than the current state." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Case 4\n", + "---\n", + "R(s) = 4 in all states except terminal states" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sequential_decision_environment = GridMDP([[4, 4, 4, +1],\n", + " [4, None, 4, -1],\n", + " [4, 4, 4, 4]],\n", + " terminals=[(3, 2), (3, 1)])" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> > < .\n", + "> None < .\n", + "> > > v\n" + ] + } + ], + "source": [ + "pi = best_policy(sequential_decision_environment, value_iteration(sequential_decision_environment, .001))\n", + "from utils import print_table\n", + "print_table(sequential_decision_environment.to_arrows(pi))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this case, the output we expect is\n", + "![title](images/4.jpg)\n", + "
\n", + "As life is positively enjoyable and the agent avoids _both_ exits.\n", + "Even though the output we get is not exactly what we want, it is definitely not wrong.\n", + "The scenario here requires the agent to anything but reach a terminal state, as this is the only way the agent can maximize its reward (total reward tends to infinity), and the program does just that.\n", + "
\n", + "Currently, the GridMDP class doesn't support an explicit marker for a \"do whatever you like\" action or a \"don't care\" condition.\n", + "You can however, extend the class to do so.\n", + "
\n", + "For in-depth knowledge about sequential decision problems, refer **Section 17.1** in the AIMA book." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "## Appendix\n", + "\n", + "Surprisingly, it turns out that there are six other optimal policies for various ranges of R(s). \n", + "You can try to find them out for yourself.\n", + "See **Exercise 17.5**.\n", + "To help you with this, we have a GridMDP editor in `grid_mdp.py` in the GUI folder. \n", + "
\n", + "Here's a brief tutorial about how to use it\n", + "
\n", + "Let us use it to solve `Case 2` above\n", + "1. Run `python gui/grid_mdp.py` from the master directory.\n", + "2. Enter the dimensions of the grid (3 x 4 in this case), and click on `'Build a GridMDP'`\n", + "3. Click on `Initialize` in the `Edit` menu.\n", + "4. Set the reward as -0.4 and click `Apply`. Exit the dialog. \n", + "![title](images/ge0.jpg)\n", + "
\n", + "5. Select cell (1, 1) and check the `Wall` radio button. `Apply` and exit the dialog.\n", + "![title](images/ge1.jpg)\n", + "
\n", + "6. Select cells (4, 1) and (4, 2) and check the `Terminal` radio button for both. Set the rewards appropriately and click on `Apply`. Exit the dialog. Your window should look something like this.\n", + "![title](images/ge2.jpg)\n", + "
\n", + "7. You are all set up now. Click on `Build and Run` in the `Build` menu and watch the heatmap calculate the utility function.\n", + "![title](images/ge4.jpg)\n", + "
\n", + "Green shades indicate positive utilities and brown shades indicate negative utilities. \n", + "The values of the utility function and arrow diagram will pop up in separate dialogs after the algorithm converges." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": {