bspeice.github.io/the-unfair-casino.html

2869 lines
210 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Or, how to get thrown out of a casino because you&#39;re a mathematician. In the ongoing eternal cycle of mathematicians asking generally useless questions about probability, I dreamt up another one. ...">
<meta name="keywords" content="casino, em, machine learning, probability, simulated annealing">
<link rel="icon" href="https://bspeice.github.io/favicon.ico">
<title>The Unfair Casino - Bradlee Speice</title>
<!-- Stylesheets -->
<link href="https://bspeice.github.io/theme/css/bootstrap.min.css" rel="stylesheet">
<link href="https://bspeice.github.io/theme/css/fonts.css" rel="stylesheet">
<link href="https://bspeice.github.io/theme/css/nest.css" rel="stylesheet">
<link href="https://bspeice.github.io/theme/css/pygment.css" rel="stylesheet">
<!-- /Stylesheets -->
<!-- RSS Feeds -->
<link href="https://bspeice.github.io/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Bradlee Speice Full Atom Feed" />
<link href="https://bspeice.github.io/feeds/blog.atom.xml" type="application/atom+xml" rel="alternate" title="Bradlee Speice Categories Atom Feed" />
<!-- /RSS Feeds -->
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-74711362-1', 'auto');
ga('send', 'pageview');
</script>
<!-- /Google Analytics -->
</head>
<body>
<!-- Header -->
<div class="header-container gradient">
<!-- Static navbar -->
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="https://bspeice.github.io/"><img class="mr20" src="https://bspeice.github.io/images/logo.svg" alt="logo">Bradlee Speice</a>
</div>
<div class="nav pull-right">
</div>
</div>
</div>
<!-- /Static navbar -->
<!-- Header -->
<!-- Header -->
<div class="container header-wrapper">
<div class="row">
<div class="col-lg-12">
<div class="header-content">
<h1 class="header-title">The Unfair Casino</h1>
<p class="header-date"> <a href="https://bspeice.github.io/author/bradlee-speice.html">Bradlee Speice</a>, Sun 15 May 2016, <a href="https://bspeice.github.io/category/blog.html">Blog</a></p>
<div class="header-underline"></div>
<div class="clearfix"></div>
<p class="pull-right header-tags">
<span class="glyphicon glyphicon-tags mr5" aria-hidden="true"></span>
<a href="https://bspeice.github.io/tag/casino.html">casino</a>, <a href="https://bspeice.github.io/tag/em.html">em</a>, <a href="https://bspeice.github.io/tag/machine-learning.html">machine learning</a>, <a href="https://bspeice.github.io/tag/probability.html">probability</a>, <a href="https://bspeice.github.io/tag/simulated-annealing.html">simulated annealing</a> </p>
</div>
</div>
</div>
</div>
<!-- /Header -->
<!-- /Header -->
</div>
<!-- /Header -->
<!-- Content -->
<div class="container content">
<p>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Or, how to get thrown out of a casino because you're a mathematician.</p>
<hr>
<p>In the ongoing eternal cycle of mathematicians asking generally useless questions about probability, I dreamt up another one. The scenario is as follows:</p>
<p><strong>You're playing a game with two die, and you do not get to see what the outcome of the die are on each roll. All you get to see is their sum. Given an arbitrarily long list of the sum of two rolls, can you determine if one or both die are loaded, and what those loadings are?</strong></p>
<h1 id="Proving-we-can-detect-cheating">Proving we can detect cheating<a class="anchor-link" href="#Proving-we-can-detect-cheating">&#182;</a></h1><p>My first question is simply, is this possible? There's a lot of trivial cases that make it obvious that there's cheating going on. But there are some edge cases that might give us more difficulty. First though, let's get a picture of what the fair distribution looks like. In principle, we can only detect cheating if the distribution of the fair die differs from the distribution of the loaded die.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[1]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
<span class="o">%</span><span class="k">matplotlib</span> inline
<span class="n">fair_1</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="mi">1</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">10000</span><span class="p">)</span>
<span class="n">fair_2</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="mi">1</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">10000</span><span class="p">)</span>
<span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">(</span><span class="n">fair_1</span> <span class="o">+</span> <span class="n">fair_2</span><span class="p">)</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="s1">&#39;hist&#39;</span><span class="p">,</span> <span class="n">bins</span><span class="o">=</span><span class="mi">11</span><span class="p">);</span>
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s1">&#39;Fair Distribution&#39;</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area"><div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
P71BWn/o4C2PAAAAAElFTkSuQmCC
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>This distribution makes sense: there are many ways to make a 7 (the most frequent observed value) and very few ways to make a 12 or 2; an important symmetry. As a special note, you can notice that the sum of two fair dice is a discrete case of the <a href="https://en.wikipedia.org/wiki/Triangular_distribution">Triangle Distribution</a>, which is itself a special case of the <a href="https://en.wikipedia.org/wiki/Irwin%E2%80%93Hall_distribution">Irwin-Hall Distribution</a>.</p>
<h1 id="The-Edge-Cases">The Edge Cases<a class="anchor-link" href="#The-Edge-Cases">&#182;</a></h1><p>Given that we understand how the results of two fair dice are distributed, let's see some of the interesting edge cases that come up. This will give us assurance that when a casino is cheating, it is detectable (given sufficient data). To make this as hard as possible, we will think of scenarios where the expected value of the sum of loaded dice is the same as the expected value of the sum of fair dice.</p>
<h3 id="Edge-Case-1">Edge Case 1<a class="anchor-link" href="#Edge-Case-1">&#182;</a></h3><p>What happens when one die is biased low, and one die is biased high? That is, where:</p>
\begin{align}
\begin{array}{cc}
D_1 = \left\{
\begin{array}{lr}
1 & w.p. 1/3\\
2 & w.p. 1/3\\
3 & w.p. 1/12\\
4 & w.p. 1/12\\
5 & w.p. 1/12\\
6 & w.p. 1/12
\end{array}
\right. &
D_2 = \left\{
\begin{array}{lr}
1 & w.p. 1/12\\
2 & w.p. 1/12\\
3 & w.p. 1/12\\
4 & w.p. 1/12\\
5 & w.p. 1/3\\
6 & w.p. 1/3
\end{array}
\right. \\
\mathbb{E}[D_1] = 2.5 & \mathbb{E}[D_2] = 4.5
\end{array}\\
\mathbb{E}[D_1 + D_2] = 7 = \mathbb{E}[D_{fair} + D_{fair}]
\end{align}
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[2]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span class="k">def</span> <span class="nf">unfair_die</span><span class="p">(</span><span class="n">p_vals</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
<span class="n">x</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">multinomial</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">p_vals</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span><span class="o">.</span><span class="n">nonzero</span><span class="p">()[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span>
<span class="n">d1</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="o">/</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">]</span>
<span class="n">d2</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">3</span><span class="p">]</span>
<span class="n">x1</span> <span class="o">=</span> <span class="n">unfair_die</span><span class="p">(</span><span class="n">d1</span><span class="p">,</span> <span class="mi">10000</span><span class="p">)</span>
<span class="n">x2</span> <span class="o">=</span> <span class="n">unfair_die</span><span class="p">(</span><span class="n">d2</span><span class="p">,</span> <span class="mi">10000</span><span class="p">)</span>
<span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">(</span><span class="n">x1</span> <span class="o">+</span> <span class="n">x2</span><span class="p">)</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="s1">&#39;hist&#39;</span><span class="p">,</span> <span class="n">bins</span><span class="o">=</span><span class="mi">11</span><span class="p">);</span>
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s1">&#39;$D_1$ biased low, $D_2$ biased high&#39;</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area"><div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>We can see that while the 7 value remains the most likely (as expected), the distribution is not so nicely shaped any more.</p>
<p><strong>Edge Case 2:</strong> When one die is loaded low, and one is loaded high, we've seen how we can detect them. How about when two die are loaded both low and high? That is, we have the following distribution:</p>
\begin{align}
\begin{array}{cc}
D_1 = \left\{
\begin{array}{lr}
1 & w.p. 1/3\\
2 & w.p. 1/12\\
3 & w.p. 1/12\\
4 & w.p. 1/12\\
5 & w.p. 1/12\\
6 & w.p. 1/3
\end{array}
\right. &
D_2 = \left\{
\begin{array}{lr}
1 & w.p. 1/3\\
2 & w.p. 1/12\\
3 & w.p. 1/12\\
4 & w.p. 1/12\\
5 & w.p. 1/12\\
6 & w.p. 1/3
\end{array}
\right. \\
\mathbb{E}[D_1] = 3.5 & \mathbb{E}[D_2] = 3.5
\end{array}\\
\mathbb{E}[D_1 + D_2] = 7 = \mathbb{E}[D_{fair} + D_{fair}]
\end{align}<p>We can see even that the expected value of each individual die is the same as the fair die! However, the distribution (if we are doing this correctly) should still be skewed:</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[3]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span class="n">d1</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="o">/</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">3</span><span class="p">]</span>
<span class="n">d2</span> <span class="o">=</span> <span class="n">d1</span>
<span class="n">x1</span> <span class="o">=</span> <span class="n">unfair_die</span><span class="p">(</span><span class="n">d1</span><span class="p">,</span> <span class="mi">10000</span><span class="p">)</span>
<span class="n">x2</span> <span class="o">=</span> <span class="n">unfair_die</span><span class="p">(</span><span class="n">d2</span><span class="p">,</span> <span class="mi">10000</span><span class="p">)</span>
<span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">(</span><span class="n">x1</span> <span class="o">+</span> <span class="n">x2</span><span class="p">)</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="s1">&#39;hist&#39;</span><span class="p">,</span> <span class="n">bins</span><span class="o">=</span><span class="mi">11</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">&quot;$D_1$ and $D_2$ biased to 1 and 6&quot;</span><span class="p">);</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area"><div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAEMCAYAAADqG+D0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
AAALEgAACxIB0t1+/AAAGuhJREFUeJzt3X2UXXV97/H3ByIC8lAskmCigNUg4ANGDSrLdkB50Cqg
vSLiKuLTcikCVXsvhNpL7JPStRTQXlxVEQMXmgv4BJZCYOHUZXslEUGQ5EJaDZBABhVEKQgJ+dw/
9m/gOJmHM3uyz54583mtdVb2+Z398N1nJvM5v9/eZ2/ZJiIiYrK2a7uAiIiYmRIgERFRSwIkIiJq
SYBEREQtCZCIiKglARIREbUkQCIiopYESMw4ki6S9Fc92M7PJB0+zus/kfSHTdfRsb2e7Hev9et+
zQYJkIiabL/E9vfarmPYRIHXxfKnSFol6beSvrota5sKSSdIWi3pEUlrJR3adk1RmdN2ATH9SXod
8NfA48CVwI7AS4HbbH+xzdrGMhNrngY2UL1nRwE7tVwLAJKOAD4NHG97laS9264pnpYeSEzI9r8D
m4HzbH/V9gW2Pwy8U9JAN+uQdIak/5D06zL0c9yI138m6ROSfizpIUn/JGmH8torJN0s6WFJy6nC
oPGai8WS7pD0S0kXDtfUUfPhXe7fGZLWl9fXSDqstO8t6UpJD0j6T0mndizT9X5Luhh4PnB12caf
S3qxpO+W9/N2SW+d4D37lu2rgAcnelPG29/xfpaT3S9gKfBXtleVGu+3ff9E9UVvJEBiQpKeARwC
fH/ESz8Ajtt6iVH9B3Co7d2ATwH/W9LcEfO8AzgS2A94OXBy2fY3gWXAs4ErgD/pUc0AJwJHAH8A
7A98coz5xtw/SQuBU4BXltePAtZJEnA1cAuwN/AG4HRJR0x2v22fBNwDvKVs47yy7muB5wCnAZdK
etEk9n08E/08t/pZwlM/l672S9J2wKuAvcrQ1T2SviDpmdtoH2KKEiDRjUOAO2w/OqJ9b+DJblZg
++u2h8r0FcBaYPGI2c63PWT7V1R//A4GXgPMsf1520/a/jqwqhc1F1+wfV+p6W+pAmUrE+zfk8AO
wEskzbF9j+2fAa8G9rT9t2Xf1gFfAd41hf1W+fe1wLNsn2N7s+3vAt8p656yLn6eo/0sh+vqdr/m
As+gCphDyzpewdghHj2WAIluHA58t7OhfHo+DLhV0tslLRlvBZJOknRLGdJ4CDgI2HPEbEMd048C
uwDPpRqb73T3FGselPRCSW+T9D8lLRpnPetHbHfUMfjx9s/2fwJ/RjUc84Cky8pY/j7AfEkPlsdD
wBJgryns97C9gXtHWX7+JNYxpi5+nqP9LIfr6na/Hiv/ft72A7YfBD4HvHlq1ce2kgCJbhzGiD/G
wJuAB2xfAtxM9UlxVJKeD3wJ+IjtPWzvAdzB05+Wx3M/sGBE2/OnWPPVwFup/pCdC/z5OOt5Xsf0
PsB9I2foZv9sL7f9+o7aP0P1B/6ntp9dHnvY3t32W6j2e+Qf+4n2u/PeDPeNqH14+ZF/vCdtG/w8
u9qv0ntZP7J5kuVGgxIgMS5JOwGLgH/raNsX+ATw37pczbOALcAvJG0n6b3AS7pc9v8CmySdKmmO
pLez9dDXpGu2fa7tlVTh9LNxVneKpPmSng2cBSyf7P5JWijpsHIg+QmqT9ZPAiuB30j6H5J2lLS9
pIMkvars9+bJ7DewEXhBmb4JeLSse045ceAtY9Q/XOf2knYEtgfmSHqmpO0nu78TmOx+XQScKuk5
kvYAPkY1JBbTQAIkxiTp1cA5wG+AEyV9QNIngA8C7yhj9hOyvQb4LNUB7I1Uwx0jD26P+snS9iaq
MfD3Ar+kOjj79W1Y83FUxzZG3TxwGbCC6qDx2hHzusv9eyZVj+PnVD2D5wBn2d5C9Uf9YKoQewD4
MrBb2e+3d7vfxWeAv5T0IHAqVS/rzcAvgH8A/tT2XeMs/0mq4aYzgHeX6b/Y6k2ZeH/H7CXU2K+/
Bn4I3EXVy7kZ+Ltx5o8eUu5IGFMlaR/gZNufaruWySintQ4C82yvbbmciBmn0R5I6QLfVA623S7p
7NK+h6QVku6UdJ2k3TuWWVJO2Vsj6ciO9kWSbpN0l6Tzmqw7uidpF6phoVdKOqjterol6W3AX1J9
+j2+5XIiZqTGeyCSdrb9aBlL/Teq89H/BPil7b+XdAawh+0zJR0IXEp1euMC4AbgRbYt6Sbgo+Xb
qNdQnSZ4XaPFR0TEmBo/BtJxHv4zqS6dYuBYqi8SUf4d/mLXMcDyct76Osq55ZLmAbsOfxsVuJjJ
fRksIiK2scYDpJylcQvVwbbrSwjM7fgS0kaq896hOr2v89z1DaVtPr97Ot96ttH57BERUU8veiBb
bL+CakhqcRknHzluliP5EREzTM+uxmv715IGgaOBIUlzbQ+V4akHymwb+N0vPy0obWO1b0VSwigi
ogbb3XwZ9ClNn4W15/AZVuXLXUcAa4CrKBdXA94DfLtMXwWcIGkHSfsBLwRWlmGuhyUtLpejOKlj
ma3YzsPm7LPPbr2G6fLIe5H3Iu/F+I86mu6B7A0sK1fV3A74P7avkfQD4HJJ76O6Ds7xALZXS7oc
WA1sorpUwvCenQJ8jerSz9fYvrbh2iMiYhyNBojt26kuKTGy/UHgjWMs82mqG8iMbL+Z6oZAEREx
DeRSJn1sYGCg7RKmjbwXT8t78bS8F1PTd5cykeR+26eIiKZJwtPpIHpERPSvBEhERNSSAImIiFoS
IBERUUsCJCIiakmARERELQmQiIioJQESERG1JEAiIqKWBEhERNSSAImIiFoSIBERUUsCJCIiakmA
RERELQmQiIioJQESERG1JEAiIqKWBEhERNSSAImIiFoSIBERUUsCJCIiakmARERELQmQiIioJQES
ERG1JEAiIqKWBEhERNTSaIBIWiDpRkl3SLpd0qml/WxJ6yX9qDyO7lhmiaS1ktZIOrKjfZGk2yTd
Jem8JuuOiIiJyXZzK5fmAfNs3yppF+Bm4FjgncBvbH9uxPwHAJcBrwYWADcAL7JtSTcBH7W9StI1
wPm2rxtlm25ynyIi+pEkbGsyyzTaA7G90fatZfoRYA0wv7w8WqHHAsttb7a9DlgLLC5BtKvtVWW+
i4Hjmqw9IiLG17NjIJL2BQ4GbipNH5V0q6SvSNq9tM0H7u1YbENpmw+s72hfz9NBFNEz8+bti6Se
P+bN27ftXY/YSk8CpAxfXQmcXnoiFwAvsH0wsBH4bC/qiJiqoaG7Aff8UW03YnqZ0/QGJM2hCo9L
bH8bwPbPO2b5MnB1md4APK/jtQWlbaz2US1duvSp6YGBAQYGBmrXHxHRjwYHBxkcHJzSOho9iA4g
6WLgF7Y/3tE2z/bGMv0x4NW2T5R0IHApcAjVENX1PH0Q/QfAacAq4J+Bz9u+dpTt5SB6NEYSVa+g
51smv9fRpDoH0RvtgUg6FHg3cLukW6j+550FnCjpYGALsA74EIDt1ZIuB1YDm4CPdKTBKcDXgB2B
a0YLj4iI6J3GeyC9lh5INCk9kOhX0+403oiI6F8JkIiIqCUBEhERtSRAIiKilgRIRETUkgCJiIha
EiAREVFLAiQiImpJgERERC0JkIiIqCUBEhERtSRAIiKilgRIRETUkgCJiIhaEiAREVFLAiQiImpJ
gERERC0JkIiIqCUBEhERtSRAIiKilgRIRETUkgCJiIhaEiAREVFLAiQiImpJgERERC0JkIiIqCUB
EhERtSRAIiKilgRIRETU0miASFog6UZJd0i6XdJppX0PSSsk3SnpOkm7dyyzRNJaSWskHdnRvkjS
bZLuknRek3VHRMTEmu6BbAY+bvsg4LXAKZJeDJwJ3GB7f+BGYAmApAOB44EDgDcBF0hSWdcXgffb
XggslHRUw7VHRMQ4Gg0Q2xtt31qmHwHWAAuAY4FlZbZlwHFl+hhgue3NttcBa4HFkuYBu9peVea7
uGOZiIhoQc+OgUjaFzgY+AEw1/YQVCED7FVmmw/c27HYhtI2H1jf0b6+tEVEREvm9GIjknYBrgRO
t/2IJI+YZeTzKVm6dOlT0wMDAwwMDGzL1UdEzHiDg4MMDg5OaR2yt+nf7q03IM0BvgP8i+3zS9sa
YMD2UBme+q7tAySdCdj2OWW+a4GzgbuH5yntJwB/ZPvDo2zPTe9TzF7VIbk2fr9Efq+jSZKwrYnn
fFovhrC+CqweDo/iKuDkMv0e4Nsd7SdI2kHSfsALgZVlmOthSYvLQfWTOpaJiIgWNNoDkXQo8D3g
dqqPbQbOAlYClwPPo+pdHG/7V2WZJcD7gU1UQ14rSvsrga8BOwLX2D59jG2mBxKNSQ8k+lWdHkjj
Q1i9lgCJJiVAol9N1yGsiIjoQwmQiIioJQESERG1JEAiIqKWBEhERNSSAImIiFoSIBERUUsCJCIi
aukqQCS9tOlCIiJiZum2B3KBpJWSPtJ598CIiJi9ugoQ268H3k117aqbJV0m6YhGK4uIiGltUtfC
krQ91Z0APw/8GhBwlu1vNFPe5OVaWNGkXAsr+lVj18KS9DJJ51LdkvZw4K3l3hyHA+dOutKIiJjx
uuqBSPpX4CvAlbYfG/Han9q+pKH6Ji09kGhSeiDRrxq7nHu5Je1jtp8sz7cDdrT9aK1KG5QAiSYl
QKJfNXk59xuAnTqe71zaIiJiluo2QHa0/cjwkzK9czMlRUTETNBtgPyXpEXDT8rtZR8bZ/6IiOhz
c7qc78+AKyTdR3Xq7jzgnY1VFRER017X3wOR9Axg//L0TtubGqtqCnIQPZqUg+jRrxo7C6us/HXA
vnT0WmxfPJmN9UICJJqUAIl+VSdAuhrCknQJ8AfArcCTpdnAtAuQiIjojW6PgbwKODAf7SMiYli3
Z2H9hOrAeUREBNB9D2RPYLWklcDjw422j2mkqoiImPa6DZClTRYREREzz2TOwtoHeJHtGyTtDGxv
+zeNVldDzsKKJuUsrOhXTV7O/YPAlcA/lqb5wLcmV15ERPSTbg+inwIcSnUTKWyvBfaaaCFJF0oa
knRbR9vZktZL+lF5HN3x2hJJayWtkXRkR/siSbdJukvSed3uXERENKfbAHnc9hPDTyTNobt+/EXA
UaO0f872ovK4tqzzAOB44ADgTVT3YR/uTn0ReL/thcBCSaOtMyIieqjbAPlXSWcBO5V7oV8BXD3R
Qra/Dzw0ykujjbMdCyy3vdn2OmAtsFjSPGBX26vKfBdT3VY3IiJa1G2AnAn8HLgd+BBwDfDJKWz3
o5JulfQVSbuXtvnAvR3zbCht84H1He3rS1tERLSoq9N4bW8BvlweU3UB8Fe2LelvgM8CH9gG633K
0qVLn5oeGBhgYGBgW64+ImLGGxwcZHBwcErr6PaWtj9jlGMetl/QxbL7AFfbftl4r0k6s1qlzymv
XQucDdwNfNf2AaX9BOCPbH94jO3lNN5oTE7jjX7V2MUUqa6FNWxH4B3As7uti45jHpLm2d5Ynr6d
6jIpAFcBl0o6l2qI6oXAytJTeVjSYmAVcBLw+S63HRERDen6i4RbLSjdbPuVE8xzGTAA/D4wRNWj
OAw4GNgCrAM+ZHuozL8EeD+wCTjd9orS/krga1ThdY3t08fZZnog0Zj0QKJfNXY/kM7b2VIdeH8V
8GHbL59cic1LgESTEiDRr5ocwvpsx/Rmqp7D8ZPZUERE9JfaQ1jTVXog0aT0QKJfNXlHwo+P97rt
z01moxERMfNN5iysV1OdKQXwVmAl1bfFIyJiFur2IPr3gD8evny7pF2Bf7b9hw3XN2kZwoomZQgr
+lVjl3MH5gJPdDx/orRFRMQs1e0Q1sXASknfLM+PA5Y1U1JERMwEk7kj4SLg9eXp92zf0lhVU5Ah
rGhShrCiXzU5hAWwM/Br2+cD6yXtN6nqIiKir3R7EP1sqjOx9re9UNJzgStsH9p0gZOVHkg0KT2Q
6FdN9kDeBhwD/BeA7fuAXSdXXkRE9JNuA+SJ8rHeAJKe1VxJERExE3QbIJdL+kfg9yR9ELiBbXNz
qYiImKEmcxbWEcCRVPf2uM729U0WVleOgUSTcgwk+lUjl3OXtD1wg+3DplJcryRAokkJkOhXjRxE
t/0ksEXS7rUri4iIvtPtN9EfAW6XdD3lTCwA26c1UlVEREx73QbIN8ojIiICmOAYiKTn276nh/VM
WY6BRJNyDCT6VRPHQL7VsfKv16oqIiL60kQB0plGL2iykIiImFkmChCPMR0REbPcRMdAnqQ660rA
TsCjwy8Btr1b4xVOUo6BRJNyDCT6VZ1jIOOehWV7+6mVFBER3Zo3b1+Ghu5uu4yudX0pk5kiPZBo
Unog0aT2fr+g/I5tux7ITLVixYqeb3PRokXsueeePd9uRERb+rIHsvvuR/R0m088cR/HHHMIy5df
2NPtRu+lBxJNSg9kGnj44V73QC7ht7/tfa8nIqJNk7kn+qRJulDSkKTbOtr2kLRC0p2Sruu8SKOk
JZLWSloj6ciO9kWSbpN0l6Tzmqw5IiK602iAABcBR41oO5Pq8vD7AzcCSwAkHQgcDxwAvAm4QFV/
DuCLwPttLwQWShq5zoiI6LFGA8T294GHRjQfCywr08uA48r0McBy25ttrwPWAoslzQN2tb2qzHdx
xzIREdGSpnsgo9nL9hCA7Y3AXqV9PnBvx3wbStt8YH1H+/rSFhERLZoOB9EbOOVgacf0QHlERMTT
BsujvjYCZEjSXNtDZXjqgdK+AXhex3wLSttY7eNYuq1qjYjoUwP87ofrT016Db0YwhK/e1Xfq4CT
y/R7gG93tJ8gaQdJ+wEvBFaWYa6HJS0uB9VP6lgmIiJa0mgPRNJlVBH3+5LuAc4GPgNcIel9wN1U
Z15he7Wky4HVwCbgIx3XJDkF+BqwI3CN7WubrDsiIibWaIDYPnGMl944xvyfBj49SvvNwEu3YWkR
ETFFbZyFFRERfSABEhERtSRAIiKilgRIRETUkgCJiIhaEiAREVFLAiQiImpJgERERC0JkIiIqCUB
EhERtSRAIiKilgRIRETUkgCJiIhapsMdCSMmZd68fRkaurvtMiJmvQRIzDhVeDRwJ+SuaOJZGvFM
qvup9d7cufuwceO6VrYd01sCJGJGeJy2QnNoqK3QjOkux0AiIqKWBEhERNSSAImIiFoSIBERUUsO
okdtOZ02YnZLgERt7Z1Om7OCIqaDBEhETKCd76Bst93ObNnyaM+3C/nuS7cSIH0gQ0nRrHa+g7Jl
i1rZLuS7L91KgPSBDCVFRBtyFlZERNSSHkhExFbau/bYTJIA2UauvfY7+YWL6BttXXtsZv0NaW0I
S9I6ST+WdIuklaVtD0krJN0p6TpJu3fMv0TSWklrJB3ZVt1jefzxX1H9wrXxiIjovTaPgWwBBmy/
wvbi0nYmcIPt/YEbgSUAkg4EjgcOAN4EXKB83I+IaFWbAaJRtn8ssKxMLwOOK9PHAMttb7a9DlgL
LCYiIlrTZoAYuF7SKkkfKG1zbQ8B2N4I7FXa5wP3diy7obRFRERL2jyIfqjt+yU9B1gh6U62HtDP
AH9ExDTVWoDYvr/8+3NJ36IakhqSNNf2kKR5wANl9g3A8zoWX1DaxrC0Y3qgPCIi4mmD5VGf7N5/
yJe0M7Cd7UckPQtYAXwKeAPwoO1zJJ0B7GH7zHIQ/VLgEKqhq+uBF3mU4iW59x2XS4CTaPc+3W2d
cjibttvmtrPPs2Pb7e6z7UmdnNRWD2Qu8M3qjz1zgEttr5D0Q+BySe8D7qY68wrbqyVdDqwGNgEf
GS08IiKid1rpgTQpPZBstz+3nX2eHdueWT2QXAsrIiJqSYBEREQtCZCIiKglARIREbUkQCIiopYE
SERE1JIAiYiIWhIgERFRSwIkIiJqSYBEREQtCZCIiKglARIREbUkQCIiopYESERE1JIAiYiIWhIg
ERFRSwIkIiJqSYBEREQtCZCIiKglARIREbUkQCIiopYESERE1JIAiYiIWhIgERFRSwIkIiJqSYBE
REQtCZCIiKglARIREbXMqACRdLSk/yfpLklntF1PRMRsNmMCRNJ2wD8ARwEHAe+S9OJ2q5ruBtsu
YBoZbLuAaWSw7QKmkcG2C5jRZkyAAIuBtbbvtr0JWA4c23JN09xg2wVMI4NtFzCNDLZdwDQy2HYB
M9pMCpD5wL0dz9eXtoiIaMGctgtowm67vbWn29u0aT2PPdbTTUZEtE62266hK5JeAyy1fXR5fiZg
2+eMmG9m7FBExDRjW5OZfyYFyPbAncAbgPuBlcC7bK9ptbCIiFlqxgxh2X5S0keBFVTHbi5MeERE
tGfG9EAiImJ6mUlnYY1J0gJJN0q6Q9Ltkk5ru6a2SdpO0o8kXdV2LW2StLukKyStKb8fh7RdU1sk
fUzSTyTdJulSSTu0XVOvSLpQ0pCk2zra9pC0QtKdkq6TtHubNfbKGO/F35f/I7dK+rqk3bpZV18E
CLAZ+Ljtg4DXAqfkS4acDqxuu4hp4HzgGtsHAC8HZuWwp6TnAqcCi2y/jGr4+oR2q+qpi6i+hNzp
TOAG2/sDNwJLel5VO0Z7L1YAB9k+GFhLl+9FXwSI7Y22by3Tj1D9kZi13xGRtAB4M/CVtmtpU/kU
9XrbFwHY3mz71y2X1abtgWdJmgPsDNzXcj09Y/v7wEMjmo8FlpXpZcBxPS2qJaO9F7ZvsL2lPP0B
sKCbdfVFgHSStC9wMHBTu5W06lzgvwOz/QDXfsAvJF1UhvO+JGmntotqg+37gM8C9wAbgF/ZvqHd
qlq3l+0hqD6EAnu1XM908T7gX7qZsa8CRNIuwJXA6aUnMutI+mNgqPTIVB6z1RxgEfC/bC8CHqUa
tph1JP0e1SfufYDnArtIOrHdqqad2f6BC0l/AWyyfVk38/dNgJRu+ZXAJba/3XY9LToUOEbST4F/
Ag6TdHHLNbVlPXCv7R+W51dSBcps9Ebgp7YftP0k8A3gdS3X1LYhSXMBJM0DHmi5nlZJOplq6Lvr
DxZ9EyDAV4HVts9vu5A22T7L9vNtv4DqIOmNtk9qu642lOGJeyUtLE1vYPaeWHAP8BpJO0oS1Xsx
204oGNkjvwo4uUy/B5hNHzx/572QdDTVsPcxth/vdiV9ESCSDgXeDRwu6ZYy3n1023XFtHAacKmk
W6nOwvq7lutphe2VVD2wW4AfU/3x+FKrRfWQpMuAfwcWSrpH0nuBzwBHSBq+wsVn2qyxV8Z4L74A
7AJcX/5+XtDVuvJFwoiIqKMveiAREdF7CZCIiKglARIREbUkQCIiopYESERE1JIAiYiIWhIgERFR
SwIkIiJq+f8KwJfCiHKoPQAAAABJRU5ErkJggg==
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>In a very un-subtle way, we have of course made the values 2 and 12 far more likely.</p>
<h1 id="Detection-Conclusion">Detection Conclusion<a class="anchor-link" href="#Detection-Conclusion">&#182;</a></h1><p>There are some trivial examples of cheating that are easy to detect: whenever the expected value of the sum of two fair dice deviates from the expected value for the sum of two fair dice, we can immediately conclude that there is cheating at stake.</p>
<p>The interesting edge cases occur when the expected value of the sum of loaded dice matches the expected value of the sum of fair dice. Considering the above examples (and a couple more I ran through in developing this), we have seen that in every circumstance having two unfair dice leads to a distribution of results different from the fair results.</p>
<p>We can thus finally state: <strong>just by looking at the distribution of results from this game, we can immediately conclude whether there is cheating.</strong></p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Simulated-Annealing">Simulated Annealing<a class="anchor-link" href="#Simulated-Annealing">&#182;</a></h1><p>What we really would like to do though, is see if there is any way to determine how exactly the dice are loaded. This is significantly more complicated, but we can borrow some algorithms from Machine Learning to figure out exactly how to perform this process. I'm using the Simulated Annealing algorithm, and I discuss why this works and why I chose it over some of the alternatives in the <a href="#Justification-of-Simulated-Annealing">justification</a>. If you don't care about how I set up the model and just want to see the code, check out <a href="#The-actual-code">the actual code</a>.</p>
<p><a href="https://en.wikipedia.org/wiki/Simulated_annealing">Simulated Annealing</a> is a variation of the <a href="https://en.wikipedia.org/wiki/Metropolis%E2%80%93Hastings_algorithm">Metropolis-Hastings Algorithm</a>, but the important thing for us is: Simulated Annealing allows us to quickly optimize high-dimensional problems. But what exactly are we trying to optimize? Ideally, we want a function that can tell us whether one distribution for the dice better explains the results than another distribution. This is known as the <strong>likelihood</strong> function.</p>
<h2 id="Deriving-the-Likelihood-function">Deriving the Likelihood function<a class="anchor-link" href="#Deriving-the-Likelihood-function">&#182;</a></h2><p>To derive our likelihood function, we want to know: <strong>what is the probability of seeing a specific result given those hidden parameters?</strong> This is actually a surprisingly difficult problem. While we can do a lot of calculations by hand, we need a more general solution since we will be working with very some interesting die distributions.</p>
<p>We first note that the sum of two dice can take on 11 different values - 2 through 12. This implies that each individual sum follows a <a href="https://en.wikipedia.org/wiki/Categorical_distribution">Categorical distribution</a>. That is:</p>
\begin{align}
\mathcal{L(x)} = \left\{
\begin{array}{lr}
p_2 & x = 2\\
p_3 & x = 3\\
\ldots & \\
p_{11} & x = 11\\
p_{12} & x = 12
\end{array}
\right.
\end{align}<p>Where each $p_i$ is the probability of seeing that specific result. However, we need to calculate what each probability is! I'll save you the details, but <a href="http://math.stackexchange.com/a/1646360/320784">this author</a> explains how to do it.</p>
<p>Now, we would like to know the likelihood of our entire data-set. This is trivial:</p>
\begin{align}
\mathcal{L(\mathbf{X})} &= \prod_{i=1}^n L(x)
\end{align}<p>However, it's typically much easier to work with the $\log(\mathcal{L})$ function instead. This is critically important from a computational perspective: when you multiply so many small numbers together (i.e. the product of $L(x)$ terms) the computer suffers from rounding error; if we don't control for this, we will find that no matter the distributions we choose for each die, the "likelihood" will be close to zero because the computer is not precise enough.</p>
\begin{align}
\log(\mathcal{L}) &= \sum_{i=1}^n \log(L)
\end{align}<h2 id="The-process-of-Simulated-Annealing">The process of Simulated Annealing<a class="anchor-link" href="#The-process-of-Simulated-Annealing">&#182;</a></h2><p>The means by which we optimize our likelihood function is the simulated annealing algorithm. The way it works is as follows:</p>
<ol>
<li><p>Start with a random guess for the parameters we are trying to optimize. In our case we are trying to guess the distribution of two dice, and so we "optimize" until we have a distribution that matches the data.</p>
</li>
<li><p>For each iteration of the algorithm:</p>
<ol>
<li>Generate a new "proposed" set of parameters based on the current parameters -
i.e. slightly modify the current parameters to get a new set of parameters.</li>
<li>Calculate the value of $\log(\mathcal{L})$ for each set of parameters. If the function value for the
proposed parameter set is higher than for the current, automatically switch to the new parameter set
and continue the next iteration.</li>
<li>Given the new parameter set performs worse, determine a probability of switching to the new parameter set anyways: $\mathcal{P}(p_{current}, p_{proposed})$</li>
<li>Switch to the new parameter set with probability $\mathcal{P}$. If you fail to switch, begin the next iteration.</li>
</ol>
</li>
<li><p>The algorithm is complete after we fail to make a transition $n$ times in a row.</p>
</li>
</ol>
<p>If everything goes according to plan, we will have a value that is close to the true distribution of each die.</p>
<h1 id="The-actual-code">The actual code<a class="anchor-link" href="#The-actual-code">&#182;</a></h1><p>We start by defining the score function. This will tell us how well the proposed die densities actually explain the results.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[5]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">from</span> <span class="nn">numpy</span> <span class="k">import</span> <span class="n">polynomial</span>
<span class="k">def</span> <span class="nf">density_coef</span><span class="p">(</span><span class="n">d1_density</span><span class="p">,</span> <span class="n">d2_density</span><span class="p">):</span>
<span class="c1"># Calculating the probabilities of each outcome was taken</span>
<span class="c1"># from this author: http://math.stackexchange.com/a/1710392/320784</span>
<span class="n">d1_p</span> <span class="o">=</span> <span class="n">polynomial</span><span class="o">.</span><span class="n">Polynomial</span><span class="p">(</span><span class="n">d1_density</span><span class="p">)</span>
<span class="n">d2_p</span> <span class="o">=</span> <span class="n">polynomial</span><span class="o">.</span><span class="n">Polynomial</span><span class="p">(</span><span class="n">d2_density</span><span class="p">)</span>
<span class="n">coefs</span> <span class="o">=</span> <span class="p">(</span><span class="n">d1_p</span> <span class="o">*</span> <span class="n">d2_p</span><span class="p">)</span><span class="o">.</span><span class="n">coef</span>
<span class="k">return</span> <span class="n">coefs</span>
<span class="k">def</span> <span class="nf">score</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">d1_density</span><span class="p">,</span> <span class="n">d2_density</span><span class="p">):</span>
<span class="c1"># We&#39;ve now got the probabilities of each event, but we need</span>
<span class="c1"># to shift the array a bit so we can use the x values to actually</span>
<span class="c1"># index into it. This will allow us to do all the calculations</span>
<span class="c1"># incredibly quickly</span>
<span class="n">coefs</span> <span class="o">=</span> <span class="n">density_coef</span><span class="p">(</span><span class="n">d1_density</span><span class="p">,</span> <span class="n">d2_density</span><span class="p">)</span>
<span class="n">coefs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">hstack</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">coefs</span><span class="p">))</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">coefs</span><span class="p">[</span><span class="n">x</span><span class="p">])</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Afterward, we need to write something to permute the proposal densities. We make random modifications, and eventually the best one survives.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[6]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span class="k">def</span> <span class="nf">permute</span><span class="p">(</span><span class="n">d1_density</span><span class="p">,</span> <span class="n">d2_density</span><span class="p">):</span>
<span class="c1"># To ensure we have legitimate densities, we will randomly</span>
<span class="c1"># increase one die face probability by `change`,</span>
<span class="c1"># and decrease one by `change`.</span>
<span class="c1"># This means there are something less than (1/`change`)^12 possibilities</span>
<span class="c1"># we are trying to search over.</span>
<span class="n">change</span> <span class="o">=</span> <span class="o">.</span><span class="mi">01</span>
<span class="n">d1_index1</span><span class="p">,</span> <span class="n">d1_index2</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="mi">0</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">d2_index1</span><span class="p">,</span> <span class="n">d2_index2</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="mi">0</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="c1"># Also make sure to copy. I&#39;ve had some weird aliasing issues</span>
<span class="c1"># in the past that made everything blow up.</span>
<span class="n">new_d1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">d1_density</span><span class="p">))</span>
<span class="n">new_d2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">d2_density</span><span class="p">))</span>
<span class="c1"># While this doesn&#39;t account for the possibility that some</span>
<span class="c1"># values go negative, in practice this never happens</span>
<span class="n">new_d1</span><span class="p">[</span><span class="n">d1_index1</span><span class="p">]</span> <span class="o">+=</span> <span class="n">change</span>
<span class="n">new_d1</span><span class="p">[</span><span class="n">d1_index2</span><span class="p">]</span> <span class="o">-=</span> <span class="n">change</span>
<span class="n">new_d2</span><span class="p">[</span><span class="n">d2_index1</span><span class="p">]</span> <span class="o">+=</span> <span class="n">change</span>
<span class="n">new_d2</span><span class="p">[</span><span class="n">d2_index2</span><span class="p">]</span> <span class="o">-=</span> <span class="n">change</span>
<span class="k">return</span> <span class="n">new_d1</span><span class="p">,</span> <span class="n">new_d2</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Now we've got the main algorithm code to do. This is what brings all the pieces together.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[7]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span class="k">def</span> <span class="nf">optimize</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">conv_count</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">max_iter</span><span class="o">=</span><span class="mi">1</span><span class="n">e4</span><span class="p">):</span>
<span class="n">switch_failures</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">iter_count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="c1"># Start with guessing fair dice</span>
<span class="n">cur_d1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">repeat</span><span class="p">(</span><span class="mi">1</span><span class="o">/</span><span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
<span class="n">cur_d2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">repeat</span><span class="p">(</span><span class="mi">1</span><span class="o">/</span><span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
<span class="n">cur_score</span> <span class="o">=</span> <span class="n">score</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">cur_d1</span><span class="p">,</span> <span class="n">cur_d2</span><span class="p">)</span>
<span class="c1"># Keep track of our best guesses - may not be</span>
<span class="c1"># what we end with</span>
<span class="n">max_score</span> <span class="o">=</span> <span class="n">cur_score</span>
<span class="n">max_d1</span> <span class="o">=</span> <span class="n">cur_d1</span>
<span class="n">max_d2</span> <span class="o">=</span> <span class="n">cur_d2</span>
<span class="c1"># Optimization stops when we have failed to switch `conv_count`</span>
<span class="c1"># times (presumably because we have a great guess), or we reach</span>
<span class="c1"># the maximum number of iterations.</span>
<span class="k">while</span> <span class="n">switch_failures</span> <span class="o">&lt;</span> <span class="n">conv_count</span> <span class="ow">and</span> <span class="n">iter_count</span> <span class="o">&lt;</span> <span class="n">max_iter</span><span class="p">:</span>
<span class="n">iter_count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">iter_count</span> <span class="o">%</span> <span class="p">(</span><span class="n">max_iter</span> <span class="o">/</span> <span class="mi">10</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Iteration: {}; Current score (higher is better): {}&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">iter_count</span><span class="p">,</span> <span class="n">cur_score</span><span class="p">))</span>
<span class="n">new_d1</span><span class="p">,</span> <span class="n">new_d2</span> <span class="o">=</span> <span class="n">permute</span><span class="p">(</span><span class="n">cur_d1</span><span class="p">,</span> <span class="n">cur_d2</span><span class="p">)</span>
<span class="n">new_score</span> <span class="o">=</span> <span class="n">score</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">new_d1</span><span class="p">,</span> <span class="n">new_d2</span><span class="p">)</span>
<span class="k">if</span> <span class="n">new_score</span> <span class="o">&gt;</span> <span class="n">max_score</span><span class="p">:</span>
<span class="n">max_score</span> <span class="o">=</span> <span class="n">new_score</span>
<span class="n">max_d1</span> <span class="o">=</span> <span class="n">new_d1</span>
<span class="n">max_d2</span> <span class="o">=</span> <span class="n">new_d2</span>
<span class="k">if</span> <span class="n">new_score</span> <span class="o">&gt;</span> <span class="n">cur_score</span><span class="p">:</span>
<span class="c1"># If the new permutation beats the old one,</span>
<span class="c1"># automatically select it.</span>
<span class="n">cur_score</span> <span class="o">=</span> <span class="n">new_score</span>
<span class="n">cur_d1</span> <span class="o">=</span> <span class="n">new_d1</span>
<span class="n">cur_d2</span> <span class="o">=</span> <span class="n">new_d2</span>
<span class="n">switch_failures</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># We didn&#39;t beat the current score, but allow</span>
<span class="c1"># for possibly switching anyways.</span>
<span class="n">accept_prob</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">new_score</span> <span class="o">-</span> <span class="n">cur_score</span><span class="p">)</span>
<span class="n">coin_toss</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">rand</span><span class="p">()</span>
<span class="k">if</span> <span class="n">coin_toss</span> <span class="o">&lt;</span> <span class="n">accept_prob</span><span class="p">:</span>
<span class="c1"># We randomly switch to the new distribution</span>
<span class="n">cur_score</span> <span class="o">=</span> <span class="n">new_score</span>
<span class="n">cur_d1</span> <span class="o">=</span> <span class="n">new_d1</span>
<span class="n">cur_d2</span> <span class="o">=</span> <span class="n">new_d2</span>
<span class="n">switch_failures</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">switch_failures</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="c1"># Return both our best guess, and the ending guess</span>
<span class="k">return</span> <span class="n">max_d1</span><span class="p">,</span> <span class="n">max_d2</span><span class="p">,</span> <span class="n">cur_d1</span><span class="p">,</span> <span class="n">cur_d2</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>And now we have finished the hard work!</p>
<h1 id="Catching-the-Casino">Catching the Casino<a class="anchor-link" href="#Catching-the-Casino">&#182;</a></h1><p>Let's go through a couple of scenarios and see if we can catch the casino cheating with some loaded dice. <strong>In every scenario we start with an assumption of fair dice</strong>, and then try our hand to figure out what the <em>actual</em> distribution was.</p>
<h2 id="Attempt-1">Attempt 1<a class="anchor-link" href="#Attempt-1">&#182;</a></h2><p>The casino is using two dice that are both biased low. How well can we recover the distribution?</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[8]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span class="kn">import</span> <span class="nn">time</span>
<span class="k">def</span> <span class="nf">simulate_casino</span><span class="p">(</span><span class="n">d1_dist</span><span class="p">,</span> <span class="n">d2_dist</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">10000</span><span class="p">):</span>
<span class="n">d1_vals</span> <span class="o">=</span> <span class="n">unfair_die</span><span class="p">(</span><span class="n">d1_dist</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
<span class="n">d2_vals</span> <span class="o">=</span> <span class="n">unfair_die</span><span class="p">(</span><span class="n">d2_dist</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
<span class="n">start</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">perf_counter</span><span class="p">()</span>
<span class="n">max_d1</span><span class="p">,</span> <span class="n">max_d2</span><span class="p">,</span> <span class="n">final_d1</span><span class="p">,</span> <span class="n">final_d2</span> <span class="o">=</span> <span class="n">optimize</span><span class="p">(</span><span class="n">d1_vals</span> <span class="o">+</span> <span class="n">d2_vals</span><span class="p">)</span>
<span class="n">end</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">perf_counter</span><span class="p">()</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Simulated Annealing time: {:.02f}s&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">end</span> <span class="o">-</span> <span class="n">start</span><span class="p">))</span>
<span class="n">coef_range</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">13</span><span class="p">)</span> <span class="o">-</span> <span class="o">.</span><span class="mi">5</span>
<span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">221</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">coef_range</span><span class="p">,</span> <span class="n">density_coef</span><span class="p">(</span><span class="n">d1_dist</span><span class="p">,</span> <span class="n">d2_dist</span><span class="p">),</span> <span class="n">width</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s1">&#39;True Distribution&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">222</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">hist</span><span class="p">(</span><span class="n">d1_vals</span> <span class="o">+</span> <span class="n">d2_vals</span><span class="p">,</span> <span class="n">bins</span><span class="o">=</span><span class="mi">11</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s1">&#39;Empirical Distribution&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">223</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">coef_range</span><span class="p">,</span> <span class="n">density_coef</span><span class="p">(</span><span class="n">max_d1</span><span class="p">,</span> <span class="n">max_d2</span><span class="p">),</span> <span class="n">width</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s1">&#39;Recovered Distribution&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">gcf</span><span class="p">()</span><span class="o">.</span><span class="n">set_size_inches</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
<span class="n">simulate_casino</span><span class="p">([</span><span class="mi">2</span><span class="o">/</span><span class="mi">9</span><span class="p">,</span> <span class="mi">2</span><span class="o">/</span><span class="mi">9</span><span class="p">,</span> <span class="mi">2</span><span class="o">/</span><span class="mi">9</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">9</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">9</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">9</span><span class="p">],</span>
<span class="p">[</span><span class="mi">2</span><span class="o">/</span><span class="mi">9</span><span class="p">,</span> <span class="mi">2</span><span class="o">/</span><span class="mi">9</span><span class="p">,</span> <span class="mi">2</span><span class="o">/</span><span class="mi">9</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">9</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">9</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">9</span><span class="p">])</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area"><div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>Iteration: 1000; Current score (higher is better): -22147.004400281654
Simulated Annealing time: 0.30s
</pre>
</div>
</div>
<div class="output_area"><div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Attempt-2">Attempt 2<a class="anchor-link" href="#Attempt-2">&#182;</a></h2><p>The casino now uses dice that are both biased towards 1 and 6.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[9]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span class="n">simulate_casino</span><span class="p">([</span><span class="mi">1</span><span class="o">/</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">3</span><span class="p">],</span>
<span class="p">[</span><span class="mi">1</span><span class="o">/</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">3</span><span class="p">])</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area"><div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>Simulated Annealing time: 0.08s
</pre>
</div>
</div>
<div class="output_area"><div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Attempt-3">Attempt 3<a class="anchor-link" href="#Attempt-3">&#182;</a></h2><p>The casino will now use one die biased towards 1 and 6, and one die towards 3 and 4.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[10]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span class="n">simulate_casino</span><span class="p">([</span><span class="mi">1</span><span class="o">/</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">3</span><span class="p">],</span>
<span class="p">[</span><span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="mi">12</span><span class="p">])</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area"><div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>Simulated Annealing time: 0.09s
</pre>
</div>
</div>
<div class="output_area"><div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
RK5CYII=
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Attempt-4">Attempt 4<a class="anchor-link" href="#Attempt-4">&#182;</a></h2><p>We'll now finally go to a fair casino to make sure that we can still recognize a positive result.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[11]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span class="n">simulate_casino</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">repeat</span><span class="p">(</span><span class="mi">1</span><span class="o">/</span><span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">repeat</span><span class="p">(</span><span class="mi">1</span><span class="o">/</span><span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">))</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area"><div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>Simulated Annealing time: 0.02s
</pre>
</div>
</div>
<div class="output_area"><div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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