This commit is contained in:
Varuna Jayasiri
2021-06-21 19:27:15 +05:30
parent e2bbc63001
commit 4980394903
2 changed files with 92 additions and 90 deletions

View File

@ -88,17 +88,18 @@ This game is played repeatedly and a good strategy will optimize for the long te
</ul>
<p>He we extend the <code>InfoSet</code> class and <code>History</code> class defined in <a href="../index.html"><code>__init__.py</code></a>
with Kuhn Poker specifics.</p>
<p><a href="https://colab.research.google.com/github/lab-ml/nn/blob/master/labml_nn/cfr/kuhn/experiment.ipynb"><img alt="Open In Colab" src="https://colab.research.google.com/assets/colab-badge.svg" /></a></p>
<p><a href="https://colab.research.google.com/github/lab-ml/nn/blob/master/labml_nn/cfr/kuhn/experiment.ipynb"><img alt="Open In Colab" src="https://colab.research.google.com/assets/colab-badge.svg" /></a>
<a href="https://app.labml.ai/run/7c35d3fad29711eba588acde48001122"><img alt="View Run" src="https://img.shields.io/badge/labml-experiment-brightgreen" /></a></p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">37</span><span></span><span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">List</span><span class="p">,</span> <span class="n">cast</span><span class="p">,</span> <span class="n">Dict</span>
<span class="lineno">38</span>
<span class="lineno">39</span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="lineno">40</span>
<span class="lineno">41</span><span class="kn">from</span> <span class="nn">labml</span> <span class="kn">import</span> <span class="n">experiment</span>
<span class="lineno">42</span><span class="kn">from</span> <span class="nn">labml.configs</span> <span class="kn">import</span> <span class="n">option</span>
<span class="lineno">43</span><span class="kn">from</span> <span class="nn">labml_nn.cfr</span> <span class="kn">import</span> <span class="n">History</span> <span class="k">as</span> <span class="n">_History</span><span class="p">,</span> <span class="n">InfoSet</span> <span class="k">as</span> <span class="n">_InfoSet</span><span class="p">,</span> <span class="n">Action</span><span class="p">,</span> <span class="n">Player</span><span class="p">,</span> <span class="n">CFRConfigs</span>
<span class="lineno">44</span><span class="kn">from</span> <span class="nn">labml_nn.cfr.infoset_saver</span> <span class="kn">import</span> <span class="n">InfoSetSaver</span></pre></div>
<div class="highlight"><pre><span class="lineno">38</span><span></span><span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">List</span><span class="p">,</span> <span class="n">cast</span><span class="p">,</span> <span class="n">Dict</span>
<span class="lineno">39</span>
<span class="lineno">40</span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="lineno">41</span>
<span class="lineno">42</span><span class="kn">from</span> <span class="nn">labml</span> <span class="kn">import</span> <span class="n">experiment</span>
<span class="lineno">43</span><span class="kn">from</span> <span class="nn">labml.configs</span> <span class="kn">import</span> <span class="n">option</span>
<span class="lineno">44</span><span class="kn">from</span> <span class="nn">labml_nn.cfr</span> <span class="kn">import</span> <span class="n">History</span> <span class="k">as</span> <span class="n">_History</span><span class="p">,</span> <span class="n">InfoSet</span> <span class="k">as</span> <span class="n">_InfoSet</span><span class="p">,</span> <span class="n">Action</span><span class="p">,</span> <span class="n">Player</span><span class="p">,</span> <span class="n">CFRConfigs</span>
<span class="lineno">45</span><span class="kn">from</span> <span class="nn">labml_nn.cfr.infoset_saver</span> <span class="kn">import</span> <span class="n">InfoSetSaver</span></pre></div>
</div>
</div>
<div class='section' id='section-1'>
@ -109,7 +110,7 @@ with Kuhn Poker specifics.</p>
<p>Kuhn poker actions are pass (<code>p</code>) or bet (<code>b</code>)</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">47</span><span class="n">ACTIONS</span> <span class="o">=</span> <span class="n">cast</span><span class="p">(</span><span class="n">List</span><span class="p">[</span><span class="n">Action</span><span class="p">],</span> <span class="p">[</span><span class="s1">&#39;p&#39;</span><span class="p">,</span> <span class="s1">&#39;b&#39;</span><span class="p">])</span></pre></div>
<div class="highlight"><pre><span class="lineno">48</span><span class="n">ACTIONS</span> <span class="o">=</span> <span class="n">cast</span><span class="p">(</span><span class="n">List</span><span class="p">[</span><span class="n">Action</span><span class="p">],</span> <span class="p">[</span><span class="s1">&#39;p&#39;</span><span class="p">,</span> <span class="s1">&#39;b&#39;</span><span class="p">])</span></pre></div>
</div>
</div>
<div class='section' id='section-2'>
@ -120,7 +121,7 @@ with Kuhn Poker specifics.</p>
<p>The three cards in play are Ace, King and Queen</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">49</span><span class="n">CHANCES</span> <span class="o">=</span> <span class="n">cast</span><span class="p">(</span><span class="n">List</span><span class="p">[</span><span class="n">Action</span><span class="p">],</span> <span class="p">[</span><span class="s1">&#39;A&#39;</span><span class="p">,</span> <span class="s1">&#39;K&#39;</span><span class="p">,</span> <span class="s1">&#39;Q&#39;</span><span class="p">])</span></pre></div>
<div class="highlight"><pre><span class="lineno">50</span><span class="n">CHANCES</span> <span class="o">=</span> <span class="n">cast</span><span class="p">(</span><span class="n">List</span><span class="p">[</span><span class="n">Action</span><span class="p">],</span> <span class="p">[</span><span class="s1">&#39;A&#39;</span><span class="p">,</span> <span class="s1">&#39;K&#39;</span><span class="p">,</span> <span class="s1">&#39;Q&#39;</span><span class="p">])</span></pre></div>
</div>
</div>
<div class='section' id='section-3'>
@ -131,7 +132,7 @@ with Kuhn Poker specifics.</p>
<p>There are two players</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">51</span><span class="n">PLAYERS</span> <span class="o">=</span> <span class="n">cast</span><span class="p">(</span><span class="n">List</span><span class="p">[</span><span class="n">Player</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span></pre></div>
<div class="highlight"><pre><span class="lineno">52</span><span class="n">PLAYERS</span> <span class="o">=</span> <span class="n">cast</span><span class="p">(</span><span class="n">List</span><span class="p">[</span><span class="n">Player</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span></pre></div>
</div>
</div>
<div class='section' id='section-4'>
@ -142,7 +143,7 @@ with Kuhn Poker specifics.</p>
<h2><a href="../index.html#InfoSet">Information set</a></h2>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">54</span><span class="k">class</span> <span class="nc">InfoSet</span><span class="p">(</span><span class="n">_InfoSet</span><span class="p">):</span></pre></div>
<div class="highlight"><pre><span class="lineno">55</span><span class="k">class</span> <span class="nc">InfoSet</span><span class="p">(</span><span class="n">_InfoSet</span><span class="p">):</span></pre></div>
</div>
</div>
<div class='section' id='section-5'>
@ -153,8 +154,8 @@ with Kuhn Poker specifics.</p>
<p>Does not support save/load</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">59</span> <span class="nd">@staticmethod</span>
<span class="lineno">60</span> <span class="k">def</span> <span class="nf">from_dict</span><span class="p">(</span><span class="n">data</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="s1">&#39;InfoSet&#39;</span><span class="p">:</span></pre></div>
<div class="highlight"><pre><span class="lineno">60</span> <span class="nd">@staticmethod</span>
<span class="lineno">61</span> <span class="k">def</span> <span class="nf">from_dict</span><span class="p">(</span><span class="n">data</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="s1">&#39;InfoSet&#39;</span><span class="p">:</span></pre></div>
</div>
</div>
<div class='section' id='section-6'>
@ -165,7 +166,7 @@ with Kuhn Poker specifics.</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">62</span> <span class="k">pass</span></pre></div>
<div class="highlight"><pre><span class="lineno">63</span> <span class="k">pass</span></pre></div>
</div>
</div>
<div class='section' id='section-7'>
@ -176,7 +177,7 @@ with Kuhn Poker specifics.</p>
<p>Return the list of actions. Terminal states are handled by <code>History</code> class.</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">64</span> <span class="k">def</span> <span class="nf">actions</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Action</span><span class="p">]:</span></pre></div>
<div class="highlight"><pre><span class="lineno">65</span> <span class="k">def</span> <span class="nf">actions</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Action</span><span class="p">]:</span></pre></div>
</div>
</div>
<div class='section' id='section-8'>
@ -187,7 +188,7 @@ with Kuhn Poker specifics.</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">68</span> <span class="k">return</span> <span class="n">ACTIONS</span></pre></div>
<div class="highlight"><pre><span class="lineno">69</span> <span class="k">return</span> <span class="n">ACTIONS</span></pre></div>
</div>
</div>
<div class='section' id='section-9'>
@ -198,7 +199,7 @@ with Kuhn Poker specifics.</p>
<p>Human readable string representation - it gives the betting probability</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">70</span> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></pre></div>
<div class="highlight"><pre><span class="lineno">71</span> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></pre></div>
</div>
</div>
<div class='section' id='section-10'>
@ -209,10 +210,10 @@ with Kuhn Poker specifics.</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">74</span> <span class="n">total</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cumulative_strategy</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
<span class="lineno">75</span> <span class="n">total</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">total</span><span class="p">,</span> <span class="mf">1e-6</span><span class="p">)</span>
<span class="lineno">76</span> <span class="n">bet</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cumulative_strategy</span><span class="p">[</span><span class="n">cast</span><span class="p">(</span><span class="n">Action</span><span class="p">,</span> <span class="s1">&#39;b&#39;</span><span class="p">)]</span> <span class="o">/</span> <span class="n">total</span>
<span class="lineno">77</span> <span class="k">return</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">bet</span> <span class="o">*</span> <span class="mi">100</span><span class="si">:</span><span class="s1"> .1f</span><span class="si">}</span><span class="s1">%&#39;</span></pre></div>
<div class="highlight"><pre><span class="lineno">75</span> <span class="n">total</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cumulative_strategy</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
<span class="lineno">76</span> <span class="n">total</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">total</span><span class="p">,</span> <span class="mf">1e-6</span><span class="p">)</span>
<span class="lineno">77</span> <span class="n">bet</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cumulative_strategy</span><span class="p">[</span><span class="n">cast</span><span class="p">(</span><span class="n">Action</span><span class="p">,</span> <span class="s1">&#39;b&#39;</span><span class="p">)]</span> <span class="o">/</span> <span class="n">total</span>
<span class="lineno">78</span> <span class="k">return</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">bet</span> <span class="o">*</span> <span class="mi">100</span><span class="si">:</span><span class="s1"> .1f</span><span class="si">}</span><span class="s1">%&#39;</span></pre></div>
</div>
</div>
<div class='section' id='section-11'>
@ -228,7 +229,7 @@ with Kuhn Poker specifics.</p>
* Fourth character is the action by the second player</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">80</span><span class="k">class</span> <span class="nc">History</span><span class="p">(</span><span class="n">_History</span><span class="p">):</span></pre></div>
<div class="highlight"><pre><span class="lineno">81</span><span class="k">class</span> <span class="nc">History</span><span class="p">(</span><span class="n">_History</span><span class="p">):</span></pre></div>
</div>
</div>
<div class='section' id='section-12'>
@ -239,7 +240,7 @@ with Kuhn Poker specifics.</p>
<p>History</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">93</span> <span class="n">history</span><span class="p">:</span> <span class="nb">str</span></pre></div>
<div class="highlight"><pre><span class="lineno">94</span> <span class="n">history</span><span class="p">:</span> <span class="nb">str</span></pre></div>
</div>
</div>
<div class='section' id='section-13'>
@ -250,7 +251,7 @@ with Kuhn Poker specifics.</p>
<p>Initialize with a given history string</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">95</span> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">history</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">):</span></pre></div>
<div class="highlight"><pre><span class="lineno">96</span> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">history</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">):</span></pre></div>
</div>
</div>
<div class='section' id='section-14'>
@ -261,7 +262,7 @@ with Kuhn Poker specifics.</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">99</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span> <span class="o">=</span> <span class="n">history</span></pre></div>
<div class="highlight"><pre><span class="lineno">100</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span> <span class="o">=</span> <span class="n">history</span></pre></div>
</div>
</div>
<div class='section' id='section-15'>
@ -272,7 +273,7 @@ with Kuhn Poker specifics.</p>
<p>Whether the history is terminal (game over).</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">101</span> <span class="k">def</span> <span class="nf">is_terminal</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></pre></div>
<div class="highlight"><pre><span class="lineno">102</span> <span class="k">def</span> <span class="nf">is_terminal</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></pre></div>
</div>
</div>
<div class='section' id='section-16'>
@ -283,8 +284,8 @@ with Kuhn Poker specifics.</p>
<p>Players are yet to take actions</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">106</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">2</span><span class="p">:</span>
<span class="lineno">107</span> <span class="k">return</span> <span class="kc">False</span></pre></div>
<div class="highlight"><pre><span class="lineno">107</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">2</span><span class="p">:</span>
<span class="lineno">108</span> <span class="k">return</span> <span class="kc">False</span></pre></div>
</div>
</div>
<div class='section' id='section-17'>
@ -295,8 +296,8 @@ with Kuhn Poker specifics.</p>
<p>Last player to play passed (game over)</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">109</span> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;p&#39;</span><span class="p">:</span>
<span class="lineno">110</span> <span class="k">return</span> <span class="kc">True</span></pre></div>
<div class="highlight"><pre><span class="lineno">110</span> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;p&#39;</span><span class="p">:</span>
<span class="lineno">111</span> <span class="k">return</span> <span class="kc">True</span></pre></div>
</div>
</div>
<div class='section' id='section-18'>
@ -307,8 +308,8 @@ with Kuhn Poker specifics.</p>
<p>Both players called (bet) (game over)</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">112</span> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">:]</span> <span class="o">==</span> <span class="s1">&#39;bb&#39;</span><span class="p">:</span>
<span class="lineno">113</span> <span class="k">return</span> <span class="kc">True</span></pre></div>
<div class="highlight"><pre><span class="lineno">113</span> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">:]</span> <span class="o">==</span> <span class="s1">&#39;bb&#39;</span><span class="p">:</span>
<span class="lineno">114</span> <span class="k">return</span> <span class="kc">True</span></pre></div>
</div>
</div>
<div class='section' id='section-19'>
@ -319,8 +320,8 @@ with Kuhn Poker specifics.</p>
<p>Any other combination</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">115</span> <span class="k">else</span><span class="p">:</span>
<span class="lineno">116</span> <span class="k">return</span> <span class="kc">False</span></pre></div>
<div class="highlight"><pre><span class="lineno">116</span> <span class="k">else</span><span class="p">:</span>
<span class="lineno">117</span> <span class="k">return</span> <span class="kc">False</span></pre></div>
</div>
</div>
<div class='section' id='section-20'>
@ -331,7 +332,7 @@ with Kuhn Poker specifics.</p>
<p>Calculate the terminal utility for player $1$, $u_1(z)$</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">118</span> <span class="k">def</span> <span class="nf">_terminal_utility_p1</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">float</span><span class="p">:</span></pre></div>
<div class="highlight"><pre><span class="lineno">119</span> <span class="k">def</span> <span class="nf">_terminal_utility_p1</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">float</span><span class="p">:</span></pre></div>
</div>
</div>
<div class='section' id='section-21'>
@ -342,7 +343,7 @@ with Kuhn Poker specifics.</p>
<p>$+1$ if Player 1 has a better card and $-1$ otherwise</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">123</span> <span class="n">winner</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">*</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span></pre></div>
<div class="highlight"><pre><span class="lineno">124</span> <span class="n">winner</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">*</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span></pre></div>
</div>
</div>
<div class='section' id='section-22'>
@ -353,8 +354,8 @@ with Kuhn Poker specifics.</p>
<p>Second player passed</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">126</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">:]</span> <span class="o">==</span> <span class="s1">&#39;bp&#39;</span><span class="p">:</span>
<span class="lineno">127</span> <span class="k">return</span> <span class="mi">1</span></pre></div>
<div class="highlight"><pre><span class="lineno">127</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">:]</span> <span class="o">==</span> <span class="s1">&#39;bp&#39;</span><span class="p">:</span>
<span class="lineno">128</span> <span class="k">return</span> <span class="mi">1</span></pre></div>
</div>
</div>
<div class='section' id='section-23'>
@ -365,8 +366,8 @@ with Kuhn Poker specifics.</p>
<p>Both players called, the player with better card wins $2$ chips</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">129</span> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">:]</span> <span class="o">==</span> <span class="s1">&#39;bb&#39;</span><span class="p">:</span>
<span class="lineno">130</span> <span class="k">return</span> <span class="n">winner</span> <span class="o">*</span> <span class="mi">2</span></pre></div>
<div class="highlight"><pre><span class="lineno">130</span> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">:]</span> <span class="o">==</span> <span class="s1">&#39;bb&#39;</span><span class="p">:</span>
<span class="lineno">131</span> <span class="k">return</span> <span class="n">winner</span> <span class="o">*</span> <span class="mi">2</span></pre></div>
</div>
</div>
<div class='section' id='section-24'>
@ -377,8 +378,8 @@ with Kuhn Poker specifics.</p>
<p>First player passed, the player with better card wins $1$ chip</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">132</span> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;p&#39;</span><span class="p">:</span>
<span class="lineno">133</span> <span class="k">return</span> <span class="n">winner</span></pre></div>
<div class="highlight"><pre><span class="lineno">133</span> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;p&#39;</span><span class="p">:</span>
<span class="lineno">134</span> <span class="k">return</span> <span class="n">winner</span></pre></div>
</div>
</div>
<div class='section' id='section-25'>
@ -389,8 +390,8 @@ with Kuhn Poker specifics.</p>
<p>History is non-terminal</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">135</span> <span class="k">else</span><span class="p">:</span>
<span class="lineno">136</span> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">()</span></pre></div>
<div class="highlight"><pre><span class="lineno">136</span> <span class="k">else</span><span class="p">:</span>
<span class="lineno">137</span> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">()</span></pre></div>
</div>
</div>
<div class='section' id='section-26'>
@ -401,7 +402,7 @@ with Kuhn Poker specifics.</p>
<p>Get the terminal utility for player $i$</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">138</span> <span class="k">def</span> <span class="nf">terminal_utility</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="n">Player</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">float</span><span class="p">:</span></pre></div>
<div class="highlight"><pre><span class="lineno">139</span> <span class="k">def</span> <span class="nf">terminal_utility</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">:</span> <span class="n">Player</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">float</span><span class="p">:</span></pre></div>
</div>
</div>
<div class='section' id='section-27'>
@ -412,8 +413,8 @@ with Kuhn Poker specifics.</p>
<p>If $i$ is Player 1</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">143</span> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="n">PLAYERS</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
<span class="lineno">144</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_terminal_utility_p1</span><span class="p">()</span></pre></div>
<div class="highlight"><pre><span class="lineno">144</span> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="n">PLAYERS</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
<span class="lineno">145</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_terminal_utility_p1</span><span class="p">()</span></pre></div>
</div>
</div>
<div class='section' id='section-28'>
@ -424,8 +425,8 @@ with Kuhn Poker specifics.</p>
<p>Otherwise, $u_2(z) = -u_1(z)$</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">146</span> <span class="k">else</span><span class="p">:</span>
<span class="lineno">147</span> <span class="k">return</span> <span class="o">-</span><span class="mi">1</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">_terminal_utility_p1</span><span class="p">()</span></pre></div>
<div class="highlight"><pre><span class="lineno">147</span> <span class="k">else</span><span class="p">:</span>
<span class="lineno">148</span> <span class="k">return</span> <span class="o">-</span><span class="mi">1</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">_terminal_utility_p1</span><span class="p">()</span></pre></div>
</div>
</div>
<div class='section' id='section-29'>
@ -436,7 +437,7 @@ with Kuhn Poker specifics.</p>
<p>The first two events are card dealing; i.e. chance events</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">149</span> <span class="k">def</span> <span class="nf">is_chance</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span></pre></div>
<div class="highlight"><pre><span class="lineno">150</span> <span class="k">def</span> <span class="nf">is_chance</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span></pre></div>
</div>
</div>
<div class='section' id='section-30'>
@ -447,7 +448,7 @@ with Kuhn Poker specifics.</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">153</span> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">2</span></pre></div>
<div class="highlight"><pre><span class="lineno">154</span> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">2</span></pre></div>
</div>
</div>
<div class='section' id='section-31'>
@ -458,7 +459,7 @@ with Kuhn Poker specifics.</p>
<p>Add an action to the history and return a new history</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">155</span> <span class="k">def</span> <span class="fm">__add__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">Action</span><span class="p">):</span></pre></div>
<div class="highlight"><pre><span class="lineno">156</span> <span class="k">def</span> <span class="fm">__add__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">:</span> <span class="n">Action</span><span class="p">):</span></pre></div>
</div>
</div>
<div class='section' id='section-32'>
@ -469,7 +470,7 @@ with Kuhn Poker specifics.</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">159</span> <span class="k">return</span> <span class="n">History</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">history</span> <span class="o">+</span> <span class="n">other</span><span class="p">)</span></pre></div>
<div class="highlight"><pre><span class="lineno">160</span> <span class="k">return</span> <span class="n">History</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">history</span> <span class="o">+</span> <span class="n">other</span><span class="p">)</span></pre></div>
</div>
</div>
<div class='section' id='section-33'>
@ -480,7 +481,7 @@ with Kuhn Poker specifics.</p>
<p>Current player</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">161</span> <span class="k">def</span> <span class="nf">player</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Player</span><span class="p">:</span></pre></div>
<div class="highlight"><pre><span class="lineno">162</span> <span class="k">def</span> <span class="nf">player</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Player</span><span class="p">:</span></pre></div>
</div>
</div>
<div class='section' id='section-34'>
@ -491,7 +492,7 @@ with Kuhn Poker specifics.</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">165</span> <span class="k">return</span> <span class="n">cast</span><span class="p">(</span><span class="n">Player</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">)</span> <span class="o">%</span> <span class="mi">2</span><span class="p">)</span></pre></div>
<div class="highlight"><pre><span class="lineno">166</span> <span class="k">return</span> <span class="n">cast</span><span class="p">(</span><span class="n">Player</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">)</span> <span class="o">%</span> <span class="mi">2</span><span class="p">)</span></pre></div>
</div>
</div>
<div class='section' id='section-35'>
@ -502,7 +503,7 @@ with Kuhn Poker specifics.</p>
<p>Sample a chance action</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">167</span> <span class="k">def</span> <span class="nf">sample_chance</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Action</span><span class="p">:</span></pre></div>
<div class="highlight"><pre><span class="lineno">168</span> <span class="k">def</span> <span class="nf">sample_chance</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Action</span><span class="p">:</span></pre></div>
</div>
</div>
<div class='section' id='section-36'>
@ -513,7 +514,7 @@ with Kuhn Poker specifics.</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">171</span> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span></pre></div>
<div class="highlight"><pre><span class="lineno">172</span> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span></pre></div>
</div>
</div>
<div class='section' id='section-37'>
@ -524,8 +525,8 @@ with Kuhn Poker specifics.</p>
<p>Randomly pick a card</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">173</span> <span class="n">r</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">CHANCES</span><span class="p">))</span>
<span class="lineno">174</span> <span class="n">chance</span> <span class="o">=</span> <span class="n">CHANCES</span><span class="p">[</span><span class="n">r</span><span class="p">]</span></pre></div>
<div class="highlight"><pre><span class="lineno">174</span> <span class="n">r</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">CHANCES</span><span class="p">))</span>
<span class="lineno">175</span> <span class="n">chance</span> <span class="o">=</span> <span class="n">CHANCES</span><span class="p">[</span><span class="n">r</span><span class="p">]</span></pre></div>
</div>
</div>
<div class='section' id='section-38'>
@ -536,10 +537,10 @@ with Kuhn Poker specifics.</p>
<p>See if the card was dealt before</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">176</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">:</span>
<span class="lineno">177</span> <span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="n">chance</span><span class="p">:</span>
<span class="lineno">178</span> <span class="n">chance</span> <span class="o">=</span> <span class="kc">None</span>
<span class="lineno">179</span> <span class="k">break</span></pre></div>
<div class="highlight"><pre><span class="lineno">177</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">:</span>
<span class="lineno">178</span> <span class="k">if</span> <span class="n">c</span> <span class="o">==</span> <span class="n">chance</span><span class="p">:</span>
<span class="lineno">179</span> <span class="n">chance</span> <span class="o">=</span> <span class="kc">None</span>
<span class="lineno">180</span> <span class="k">break</span></pre></div>
</div>
</div>
<div class='section' id='section-39'>
@ -550,8 +551,8 @@ with Kuhn Poker specifics.</p>
<p>Return the card if it was not dealt before</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">182</span> <span class="k">if</span> <span class="n">chance</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="lineno">183</span> <span class="k">return</span> <span class="n">cast</span><span class="p">(</span><span class="n">Action</span><span class="p">,</span> <span class="n">chance</span><span class="p">)</span></pre></div>
<div class="highlight"><pre><span class="lineno">183</span> <span class="k">if</span> <span class="n">chance</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="lineno">184</span> <span class="k">return</span> <span class="n">cast</span><span class="p">(</span><span class="n">Action</span><span class="p">,</span> <span class="n">chance</span><span class="p">)</span></pre></div>
</div>
</div>
<div class='section' id='section-40'>
@ -562,7 +563,7 @@ with Kuhn Poker specifics.</p>
<p>Human readable representation</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">185</span> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></pre></div>
<div class="highlight"><pre><span class="lineno">186</span> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></pre></div>
</div>
</div>
<div class='section' id='section-41'>
@ -573,7 +574,7 @@ with Kuhn Poker specifics.</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">189</span> <span class="k">return</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">)</span></pre></div>
<div class="highlight"><pre><span class="lineno">190</span> <span class="k">return</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">)</span></pre></div>
</div>
</div>
<div class='section' id='section-42'>
@ -585,7 +586,7 @@ with Kuhn Poker specifics.</p>
This is a string of actions only visible to the current player.</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">191</span> <span class="k">def</span> <span class="nf">info_set_key</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span></pre></div>
<div class="highlight"><pre><span class="lineno">192</span> <span class="k">def</span> <span class="nf">info_set_key</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span></pre></div>
</div>
</div>
<div class='section' id='section-43'>
@ -596,7 +597,7 @@ This is a string of actions only visible to the current player.</p>
<p>Get current player</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">197</span> <span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">player</span><span class="p">()</span></pre></div>
<div class="highlight"><pre><span class="lineno">198</span> <span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">player</span><span class="p">()</span></pre></div>
</div>
</div>
<div class='section' id='section-44'>
@ -607,7 +608,7 @@ This is a string of actions only visible to the current player.</p>
<p>Current player sees her card and the betting actions</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">199</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span></pre></div>
<div class="highlight"><pre><span class="lineno">200</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span></pre></div>
</div>
</div>
<div class='section' id='section-45'>
@ -618,7 +619,7 @@ This is a string of actions only visible to the current player.</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">201</span> <span class="k">def</span> <span class="nf">new_info_set</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">InfoSet</span><span class="p">:</span></pre></div>
<div class="highlight"><pre><span class="lineno">202</span> <span class="k">def</span> <span class="nf">new_info_set</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">InfoSet</span><span class="p">:</span></pre></div>
</div>
</div>
<div class='section' id='section-46'>
@ -629,7 +630,7 @@ This is a string of actions only visible to the current player.</p>
<p>Create a new information set object</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">203</span> <span class="k">return</span> <span class="n">InfoSet</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">info_set_key</span><span class="p">())</span></pre></div>
<div class="highlight"><pre><span class="lineno">204</span> <span class="k">return</span> <span class="n">InfoSet</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">info_set_key</span><span class="p">())</span></pre></div>
</div>
</div>
<div class='section' id='section-47'>
@ -640,7 +641,7 @@ This is a string of actions only visible to the current player.</p>
<p>A function to create an empty history object</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">206</span><span class="k">def</span> <span class="nf">create_new_history</span><span class="p">():</span></pre></div>
<div class="highlight"><pre><span class="lineno">207</span><span class="k">def</span> <span class="nf">create_new_history</span><span class="p">():</span></pre></div>
</div>
</div>
<div class='section' id='section-48'>
@ -651,7 +652,7 @@ This is a string of actions only visible to the current player.</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">208</span> <span class="k">return</span> <span class="n">History</span><span class="p">()</span></pre></div>
<div class="highlight"><pre><span class="lineno">209</span> <span class="k">return</span> <span class="n">History</span><span class="p">()</span></pre></div>
</div>
</div>
<div class='section' id='section-49'>
@ -662,7 +663,7 @@ This is a string of actions only visible to the current player.</p>
<p>Configurations extends the CFR configurations class</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">211</span><span class="k">class</span> <span class="nc">Configs</span><span class="p">(</span><span class="n">CFRConfigs</span><span class="p">):</span></pre></div>
<div class="highlight"><pre><span class="lineno">212</span><span class="k">class</span> <span class="nc">Configs</span><span class="p">(</span><span class="n">CFRConfigs</span><span class="p">):</span></pre></div>
</div>
</div>
<div class='section' id='section-50'>
@ -673,7 +674,7 @@ This is a string of actions only visible to the current player.</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">215</span> <span class="k">pass</span></pre></div>
<div class="highlight"><pre><span class="lineno">216</span> <span class="k">pass</span></pre></div>
</div>
</div>
<div class='section' id='section-51'>
@ -684,8 +685,8 @@ This is a string of actions only visible to the current player.</p>
<p>Set the <code>create_new_history</code> method for Kuhn Poker</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">218</span><span class="nd">@option</span><span class="p">(</span><span class="n">Configs</span><span class="o">.</span><span class="n">create_new_history</span><span class="p">)</span>
<span class="lineno">219</span><span class="k">def</span> <span class="nf">_cnh</span><span class="p">():</span></pre></div>
<div class="highlight"><pre><span class="lineno">219</span><span class="nd">@option</span><span class="p">(</span><span class="n">Configs</span><span class="o">.</span><span class="n">create_new_history</span><span class="p">)</span>
<span class="lineno">220</span><span class="k">def</span> <span class="nf">_cnh</span><span class="p">():</span></pre></div>
</div>
</div>
<div class='section' id='section-52'>
@ -696,7 +697,7 @@ This is a string of actions only visible to the current player.</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">223</span> <span class="k">return</span> <span class="n">create_new_history</span></pre></div>
<div class="highlight"><pre><span class="lineno">224</span> <span class="k">return</span> <span class="n">create_new_history</span></pre></div>
</div>
</div>
<div class='section' id='section-53'>
@ -707,7 +708,7 @@ This is a string of actions only visible to the current player.</p>
<h3>Run the experiment</h3>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">226</span><span class="k">def</span> <span class="nf">main</span><span class="p">():</span></pre></div>
<div class="highlight"><pre><span class="lineno">227</span><span class="k">def</span> <span class="nf">main</span><span class="p">():</span></pre></div>
</div>
</div>
<div class='section' id='section-54'>
@ -721,7 +722,7 @@ other destinations such as Tensorboard can be relatively time consuming.
SQLite is enough for our analytics.</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">235</span> <span class="n">experiment</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;kuhn_poker&#39;</span><span class="p">,</span> <span class="n">writers</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;sqlite&#39;</span><span class="p">})</span></pre></div>
<div class="highlight"><pre><span class="lineno">236</span> <span class="n">experiment</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;kuhn_poker&#39;</span><span class="p">,</span> <span class="n">writers</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;sqlite&#39;</span><span class="p">})</span></pre></div>
</div>
</div>
<div class='section' id='section-55'>
@ -732,7 +733,7 @@ SQLite is enough for our analytics.</p>
<p>Initialize configuration</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">237</span> <span class="n">conf</span> <span class="o">=</span> <span class="n">Configs</span><span class="p">()</span></pre></div>
<div class="highlight"><pre><span class="lineno">238</span> <span class="n">conf</span> <span class="o">=</span> <span class="n">Configs</span><span class="p">()</span></pre></div>
</div>
</div>
<div class='section' id='section-56'>
@ -743,7 +744,7 @@ SQLite is enough for our analytics.</p>
<p>Load configuration</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">239</span> <span class="n">experiment</span><span class="o">.</span><span class="n">configs</span><span class="p">(</span><span class="n">conf</span><span class="p">)</span></pre></div>
<div class="highlight"><pre><span class="lineno">240</span> <span class="n">experiment</span><span class="o">.</span><span class="n">configs</span><span class="p">(</span><span class="n">conf</span><span class="p">)</span></pre></div>
</div>
</div>
<div class='section' id='section-57'>
@ -754,7 +755,7 @@ SQLite is enough for our analytics.</p>
<p>Set models for saving</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">241</span> <span class="n">experiment</span><span class="o">.</span><span class="n">add_model_savers</span><span class="p">({</span><span class="s1">&#39;info_sets&#39;</span><span class="p">:</span> <span class="n">InfoSetSaver</span><span class="p">(</span><span class="n">conf</span><span class="o">.</span><span class="n">cfr</span><span class="o">.</span><span class="n">info_sets</span><span class="p">)})</span></pre></div>
<div class="highlight"><pre><span class="lineno">242</span> <span class="n">experiment</span><span class="o">.</span><span class="n">add_model_savers</span><span class="p">({</span><span class="s1">&#39;info_sets&#39;</span><span class="p">:</span> <span class="n">InfoSetSaver</span><span class="p">(</span><span class="n">conf</span><span class="o">.</span><span class="n">cfr</span><span class="o">.</span><span class="n">info_sets</span><span class="p">)})</span></pre></div>
</div>
</div>
<div class='section' id='section-58'>
@ -765,7 +766,7 @@ SQLite is enough for our analytics.</p>
<p>Start the experiment</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">243</span> <span class="k">with</span> <span class="n">experiment</span><span class="o">.</span><span class="n">start</span><span class="p">():</span></pre></div>
<div class="highlight"><pre><span class="lineno">244</span> <span class="k">with</span> <span class="n">experiment</span><span class="o">.</span><span class="n">start</span><span class="p">():</span></pre></div>
</div>
</div>
<div class='section' id='section-59'>
@ -776,7 +777,7 @@ SQLite is enough for our analytics.</p>
<p>Start iterating</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">245</span> <span class="n">conf</span><span class="o">.</span><span class="n">cfr</span><span class="o">.</span><span class="n">iterate</span><span class="p">()</span></pre></div>
<div class="highlight"><pre><span class="lineno">246</span> <span class="n">conf</span><span class="o">.</span><span class="n">cfr</span><span class="o">.</span><span class="n">iterate</span><span class="p">()</span></pre></div>
</div>
</div>
<div class='section' id='section-60'>
@ -787,8 +788,8 @@ SQLite is enough for our analytics.</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="lineno">249</span><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
<span class="lineno">250</span> <span class="n">main</span><span class="p">()</span></pre></div>
<div class="highlight"><pre><span class="lineno">250</span><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
<span class="lineno">251</span> <span class="n">main</span><span class="p">()</span></pre></div>
</div>
</div>
</div>

View File

@ -32,6 +32,7 @@ He we extend the `InfoSet` class and `History` class defined in [`__init__.py`](
with Kuhn Poker specifics.
[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/lab-ml/nn/blob/master/labml_nn/cfr/kuhn/experiment.ipynb)
[![View Run](https://img.shields.io/badge/labml-experiment-brightgreen)](https://app.labml.ai/run/7c35d3fad29711eba588acde48001122)
"""
from typing import List, cast, Dict