speice.io/2016/05/the-unfair-casino/index.html

180 lines
237 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html><html lang=en dir=ltr class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated=false><meta charset=UTF-8><meta name=generator content="Docusaurus v3.6.1"><title data-rh=true>The unfair casino | The Old Speice Guy</title><meta data-rh=true name=viewport content="width=device-width,initial-scale=1.0"><meta data-rh=true name=twitter:card content=summary_large_image><meta data-rh=true property=og:url content=https://speice.io/2016/05/the-unfair-casino><meta data-rh=true property=og:locale content=en><meta data-rh=true name=docusaurus_locale content=en><meta data-rh=true name=docusaurus_tag content=default><meta data-rh=true name=docsearch:language content=en><meta data-rh=true name=docsearch:docusaurus_tag content=default><meta data-rh=true property=og:title content="The unfair casino | The Old Speice Guy"><meta data-rh=true name=description content="Trying to figure out how exactly two dice are loaded in a cheating casino."><meta data-rh=true property=og:description content="Trying to figure out how exactly two dice are loaded in a cheating casino."><meta data-rh=true property=og:type content=article><meta data-rh=true property=article:published_time content=2016-05-15T12:00:00.000Z><link data-rh=true rel=icon href=/img/favicon.ico><link data-rh=true rel=canonical href=https://speice.io/2016/05/the-unfair-casino><link data-rh=true rel=alternate href=https://speice.io/2016/05/the-unfair-casino hreflang=en><link data-rh=true rel=alternate href=https://speice.io/2016/05/the-unfair-casino hreflang=x-default><script data-rh=true type=application/ld+json>{"@context":"https://schema.org","@id":"https://speice.io/2016/05/the-unfair-casino","@type":"BlogPosting","author":{"@type":"Person","name":"Bradlee Speice"},"dateModified":"2024-11-04T00:16:00.000Z","datePublished":"2016-05-15T12:00:00.000Z","description":"Trying to figure out how exactly two dice are loaded in a cheating casino.","headline":"The unfair casino","isPartOf":{"@id":"https://speice.io/","@type":"Blog","name":"Blog"},"keywords":[],"mainEntityOfPage":"https://speice.io/2016/05/the-unfair-casino","name":"The unfair casino","url":"https://speice.io/2016/05/the-unfair-casino"}</script><link rel=alternate type=application/rss+xml href=/rss.xml title="The Old Speice Guy RSS Feed"><link rel=alternate type=application/atom+xml href=/atom.xml title="The Old Speice Guy Atom Feed"><link rel=stylesheet href=/katex/katex.min.css><link rel=stylesheet href=/assets/css/styles.16c3428d.css><script src=/assets/js/runtime~main.29a27dcf.js defer></script><script src=/assets/js/main.d461af80.js defer></script><body class=navigation-with-keyboard><script>!function(){var t,e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t=null!==e?e:"light",document.documentElement.setAttribute("data-theme",t)}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id=__docusaurus><div role=region aria-label="Skip to main content"><a class=skipToContent_fXgn href=#__docusaurus_skipToContent_fallback>Skip to main content</a></div><nav aria-label=Main class="navbar navbar--fixed-top"><div class=navbar__inner><div class=navbar__items><button aria-label="Toggle navigation bar" aria-expanded=false class="navbar__toggle clean-btn" type=button><svg width=30 height=30 viewBox="0 0 30 30" aria-hidden=true><path stroke=currentColor stroke-linecap=round stroke-miterlimit=10 stroke-width=2 d="M4 7h22M4 15h22M4 23h22"/></svg></button><a class=navbar__brand href=/><div class=navbar__logo><img src=/img/logo.svg alt="Sierpinski Gasket" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src=/img/logo-dark.svg alt="Sierpinski Gasket" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">The Old Speice Guy</b></a></div><div class="navbar__items navbar__items--right"><a href=https://github.com/bspeice target=_blank rel="noopener noreferrer" class="navbar__item navbar__link header-github-link"></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type=button disabled title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live=polite aria-pressed=false><svg viewBox="0 0 24 24" width=24 height=24 class=lightToggleIcon_pyhR><path fill=currentColor d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"/></svg><svg viewBox="0 0 24 24" width=24 height=24 class=darkToggleIcon_wfgR><path fill=currentColor d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"/></svg></button></div><div class=navbarSearchContainer_Bca1><div class=navbar__search><span aria-label="expand searchbar" role=button class=search-icon tabindex=0></span><input id=search_input_react type=search placeholder=Loading... aria-label=Search class="navbar__search-input search-bar" disabled></div></div></div></div><div role=presentation class=navbar-sidebar__backdrop></div></nav><div id=__docusaurus_skipToContent_fallback class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class=row><aside class="col col--3"><nav class="sidebar_re4s thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_pO2u margin-bottom--md">All posts</div><div role=group><h3>2024</h3><div role=group><h4>Playing with fire</h4><ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2024/11/playing-with-fire>The fractal flame algorithm</a><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2024/11/playing-with-fire-transforms>Transforms and variations</a><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2024/11/playing-with-fire-log-density>Tone mapping and color</a></ul></ul></div></div><div role=group><h3>2022</h3><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2011/11/webpack-industrial-complex>The webpack industrial complex</a></ul></div><div role=group><h3>2019</h3><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2019/12/release-the-gil>Release the GIL</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2019/09/binary-format-shootout>Binary format shootout</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2019/06/high-performance-systems>On building high performance systems</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2019/05/making-bread>Making bread</a></ul><div role=group><h4>Allocations in Rust</h4><ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2019/02/understanding-allocations-in-rust>Foreword</a><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2019/02/the-whole-world>Global memory</a><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2019/02/stacking-up>Fixed memory</a><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2019/02/a-heaping-helping>Dynamic memory</a><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2019/02/08/compiler-optimizations>Compiler optimizations</a><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2019/02/summary>Summary</a></ul></ul></div></div><div role=group><h3>2018</h3><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2018/12/allocation-safety>QADAPT - debug_assert! for allocations</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2018/12/what-small-business-really-means>More "what companies really mean"</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2018/10/case-study-optimization>A case study in heaptrack</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2018/09/isomorphic-apps>Isomorphic desktop apps with Rust</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2018/09/primitives-in-rust-are-weird>Primitives in Rust are weird (and cool)</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2018/06/dateutil-parser-to-rust>What I learned porting dateutil to Rust</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2018/05/hello>Hello!</a></ul><div role=group><h4>Captain's Cookbook</h4><ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2018/01/captains-cookbook-part-1>Project setup</a><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2018/01/captains-cookbook-part-2>Practical usage</a></ul></ul></div></div><div role=group><h3>2016</h3><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2016/11/pca-audio-compression>PCA audio compression</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2016/10/rustic-repodcasting>A Rustic re-podcasting server</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2016/06/event-studies-and-earnings-releases>Event studies and earnings releases</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a aria-current=page class="sidebarItemLink_mo7H sidebarItemLinkActive_I1ZP" href=/2016/05/the-unfair-casino>The unfair casino</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2016/04/tick-tock>Tick tock...</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2016/03/tweet-like-me>Tweet like me</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2016/03/predicting-santander-customer-happiness>Predicting Santander customer happiness</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2016/02/profitability-using-the-investment-formula>Profitability using the investment formula</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2016/02/guaranteed-money-maker>Guaranteed money maker</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2016/01/cloudy-in-seattle>Cloudy in Seattle</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2016/01/complaining-about-the-weather>Complaining about the weather</a></ul></div><div role=group><h3>2015</h3><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2015/12/testing-cramer>Testing Cramer</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2015/11/autocallable>Autocallable Bonds</a></ul><ul class="sidebarItemList_Yudw clean-list"><li class=sidebarItem__DBe><a class=sidebarItemLink_mo7H href=/2015/11/welcome>Welcome, and an algorithm</a></ul></div></nav></aside><main class="col col--7"><article><header><h1 class=title_f1Hy>The unfair casino</h1><div class="container_mt6G margin-vert--md"><time datetime=2016-05-15T12:00:00.000Z>May 15, 2016</time> · <!-- -->15 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><div class="avatar__intro authorDetails_lV9A"><div class=avatar__name><span class=authorName_yefp>Bradlee Speice</span></div><div class=authorSocials_rSDt><a href=https://github.com/bspeice target=_blank rel="noopener noreferrer" class=authorSocialLink_owbf title=GitHub><svg viewBox="0 0 256 250" width=1em height=1em class="authorSocialLink_owbf githubSvg_Uu4N" style=--dark:#000;--light:#fff preserveAspectRatio=xMidYMid><path d="M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.182 1.03-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z"/></svg></a></div></div></div></div></div></header><div id=__blog-post-container class=markdown><p>Trying to figure out how exactly two dice are loaded in a cheating casino.</p>
<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>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id=proving-we-can-detect-cheating>Proving we can detect cheating<a href=#proving-we-can-detect-cheating class=hash-link aria-label="Direct link to Proving we can detect cheating" title="Direct link to Proving we can detect cheating"></a></h2>
<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 class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class=codeBlockLines_e6Vv><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token keyword" style="color:hsl(301, 63%, 40%)">import</span><span class="token plain"> numpy </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">as</span><span class="token plain"> np</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(301, 63%, 40%)">import</span><span class="token plain"> pandas </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">as</span><span class="token plain"> pd</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(301, 63%, 40%)">import</span><span class="token plain"> matplotlib</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">pyplot </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">as</span><span class="token plain"> plt</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token operator" style="color:hsl(221, 87%, 60%)">%</span><span class="token plain">matplotlib inline</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">fair_1 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">random</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">randint</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">7</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10000</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">fair_2 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">random</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">randint</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">7</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10000</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">pd</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">Series</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">fair_1 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">+</span><span class="token plain"> fair_2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">plot</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">kind</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token string" style="color:hsl(119, 34%, 47%)">'hist'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> bins</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token number" style="color:hsl(35, 99%, 36%)">11</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">plt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">title</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'Fair Distribution'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div>
<p><img decoding=async loading=lazy alt=png src=data:image/png;base64,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 width=400 height=266 class=img_ev3q></p>
<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 target=_blank rel="noopener noreferrer">Triangle Distribution</a>, which is itself a special case of the <a href=https://en.wikipedia.org/wiki/Irwin%E2%80%93Hall_distribution target=_blank rel="noopener noreferrer">Irwin-Hall Distribution</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id=the-edge-cases>The Edge Cases<a href=#the-edge-cases class=hash-link aria-label="Direct link to The Edge Cases" title="Direct link to The Edge Cases"></a></h2>
<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 class="anchor anchorWithStickyNavbar_LWe7" id=edge-case-1>Edge Case 1<a href=#edge-case-1 class=hash-link aria-label="Direct link to Edge Case 1" title="Direct link to Edge Case 1"></a></h3>
<p>What happens when one die is biased low, and one die is biased high? That is, where:</p>
<span class=katex-display><span class=katex><span class=katex-mathml><math display=block><semantics><mtable rowspacing=0.25em columnalign=right columnspacing=""><mtr><mtd><mstyle scriptlevel=0 displaystyle=true><mtable rowspacing=0.16em columnalign="center center" columnspacing=1em><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><msub><mi>D</mi><mn>1</mn></msub><mo>=</mo><mrow><mo fence=true>{</mo><mtable rowspacing=0.16em columnalign="left right" columnspacing=1em><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>3</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>2</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>3</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>3</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>12</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>4</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>12</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>5</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>12</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>6</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>12</mn></mrow></mstyle></mtd></mtr></mtable></mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><msub><mi>D</mi><mn>2</mn></msub><mo>=</mo><mrow><mo fence=true>{</mo><mtable rowspacing=0.16em columnalign="left right" columnspacing=1em><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>12</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>2</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>12</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>3</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>12</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>4</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>12</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>5</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>3</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>6</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>3</mn></mrow></mstyle></mtd></mtr></mtable></mrow></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi mathvariant=double-struck>E</mi><mo stretchy=false>[</mo><msub><mi>D</mi><mn>1</mn></msub><mo stretchy=false>]</mo><mo>=</mo><mn>2.5</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi mathvariant=double-struck>E</mi><mo stretchy=false>[</mo><msub><mi>D</mi><mn>2</mn></msub><mo stretchy=false>]</mo><mo>=</mo><mn>4.5</mn></mrow></mstyle></mtd></mtr></mtable></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=true><mrow><mi mathvariant=double-struck>E</mi><mo stretchy=false>[</mo><msub><mi>D</mi><mn>1</mn></msub><mo>+</mo><msub><mi>D</mi><mn>2</mn></msub><mo stretchy=false>]</mo><mo>=</mo><mn>7</mn><mo>=</mo><mi mathvariant=double-struck>E</mi><mo stretchy=false>[</mo><msub><mi>D</mi><mrow><mi>f</mi><mi>a</mi><mi>i</mi><mi>r</mi></mrow></msub><mo>+</mo><msub><mi>D</mi><mrow><mi>f</mi><mi>a</mi><mi>i</mi><mi>r</mi></mrow></msub><mo stretchy=false>]</mo></mrow></mstyle></mtd></mtr></mtable><annotation encoding=application/x-tex>\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*}</annotation></semantics></math></span><span class=katex-html aria-hidden=true><span class=base><span class=strut style=height:10.2em;vertical-align:-4.85em></span><span class=mord><span class=mtable><span class=col-align-r><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:5.35em><span style=top:-7.35em><span class=pstrut style=height:6.45em></span><span class=mord><span class=mord><span class=mtable><span class=arraycolsep style=width:0.5em></span><span class=col-align-c><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:4.45em><span style=top:-6.45em><span class=pstrut style=height:5.85em></span><span class=mord><span class=mord><span class="mord mathnormal" style=margin-right:0.02778em>D</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3011em><span style=top:-2.55em;margin-left:-0.0278em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class=minner><span class=mopen><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:3.85em><span style=top:-1.366em><span class=pstrut style=height:3.816em></span><span class="delimsizinginner delim-size4"><span></span></span></span><span style=top:-1.358em><span class=pstrut style=height:3.816em></span><span style=height:1.816em;width:0.8889em><svg width=0.8889em height=1.816em style=width:0.8889em viewBox="0 0 888.89 1816" preserveAspectRatio=xMinYMin><path d="M384 0 H504 V1816 H384z M384 0 H504 V1816 H384z"/></svg></span></span><span style=top:-3.816em><span class=pstrut style=height:3.816em></span><span class="delimsizinginner delim-size4"><span></span></span></span><span style=top:-4.958em><span class=pstrut style=height:3.816em></span><span style=height:1.816em;width:0.8889em><svg width=0.8889em height=1.816em style=width:0.8889em viewBox="0 0 888.89 1816" preserveAspectRatio=xMinYMin><path d="M384 0 H504 V1816 H384z M384 0 H504 V1816 H384z"/></svg></span></span><span style=top:-6.766em><span class=pstrut style=height:3.816em></span><span class="delimsizinginner delim-size4"><span></span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:3.35em><span></span></span></span></span></span></span><span class=mord><span class=mtable><span class=arraycolsep style=width:0.5em></span><span class=col-align-l><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:3.85em><span style=top:-6.01em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>1</span></span></span><span style=top:-4.81em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>2</span></span></span><span style=top:-3.61em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>3</span></span></span><span style=top:-2.41em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>4</span></span></span><span style=top:-1.21em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>5</span></span></span><span style=top:-0.01em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>6</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:3.35em><span></span></span></span></span></span><span class=arraycolsep style=width:0.5em></span><span class=arraycolsep style=width:0.5em></span><span class=col-align-r><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:3.85em><span style=top:-6.01em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/3</span></span></span><span style=top:-4.81em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/3</span></span></span><span style=top:-3.61em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/12</span></span></span><span style=top:-2.41em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/12</span></span></span><span style=top:-1.21em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/12</span></span></span><span style=top:-0.01em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/12</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:3.35em><span></span></span></span></span></span><span class=arraycolsep style=width:0.5em></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style=top:-2.26em><span class=pstrut style=height:5.85em></span><span class=mord><span class="mord mathbb">E</span><span class=mopen>[</span><span class=mord><span class="mord mathnormal" style=margin-right:0.02778em>D</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3011em><span style=top:-2.55em;margin-left:-0.0278em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span><span class=mclose>]</span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class=mord>2.5</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:3.95em><span></span></span></span></span></span><span class=arraycolsep style=width:0.5em></span><span class=arraycolsep style=width:0.5em></span><span class=col-align-c><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:4.45em><span style=top:-6.45em><span class=pstrut style=height:5.85em></span><span class=mord><span class=mord><span class="mord mathnormal" style=margin-right:0.02778em>D</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3011em><span style=top:-2.55em;margin-left:-0.0278em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class=minner><span class=mopen><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:3.85em><span style=top:-1.366em><span class=pstrut style=height:3.816em></span><span class="delimsizinginner delim-size4"><span></span></span></span><span style=top:-1.358em><span class=pstrut style=height:3.816em></span><span style=height:1.816em;width:0.8889em><svg width=0.8889em height=1.816em style=width:0.8889em viewBox="0 0 888.89 1816" preserveAspectRatio=xMinYMin><path d="M384 0 H504 V1816 H384z M384 0 H504 V1816 H384z"/></svg></span></span><span style=top:-3.816em><span class=pstrut style=height:3.816em></span><span class="delimsizinginner delim-size4"><span></span></span></span><span style=top:-4.958em><span class=pstrut style=height:3.816em></span><span style=height:1.816em;width:0.8889em><svg width=0.8889em height=1.816em style=width:0.8889em viewBox="0 0 888.89 1816" preserveAspectRatio=xMinYMin><path d="M384 0 H504 V1816 H384z M384 0 H504 V1816 H384z"/></svg></span></span><span style=top:-6.766em><span class=pstrut style=height:3.816em></span><span class="delimsizinginner delim-size4"><span></span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:3.35em><span></span></span></span></span></span></span><span class=mord><span class=mtable><span class=arraycolsep style=width:0.5em></span><span class=col-align-l><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:3.85em><span style=top:-6.01em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>1</span></span></span><span style=top:-4.81em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>2</span></span></span><span style=top:-3.61em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>3</span></span></span><span style=top:-2.41em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>4</span></span></span><span style=top:-1.21em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>5</span></span></span><span style=top:-0.01em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>6</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:3.35em><span></span></span></span></span></span><span class=arraycolsep style=width:0.5em></span><span class=arraycolsep style=width:0.5em></span><span class=col-align-r><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:3.85em><span style=top:-6.01em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/12</span></span></span><span style=top:-4.81em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/12</span></span></span><span style=top:-3.61em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/12</span></span></span><span style=top:-2.41em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/12</span></span></span><span style=top:-1.21em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/3</span></span></span><span style=top:-0.01em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/3</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:3.35em><span></span></span></span></span></span><span class=arraycolsep style=width:0.5em></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style=top:-2.26em><span class=pstrut style=height:5.85em></span><span class=mord><span class="mord mathbb">E</span><span class=mopen>[</span><span class=mord><span class="mord mathnormal" style=margin-right:0.02778em>D</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3011em><span style=top:-2.55em;margin-left:-0.0278em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span><span class=mclose>]</span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class=mord>4.5</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:3.95em><span></span></span></span></span></span><span class=arraycolsep style=width:0.5em></span></span></span></span></span><span style=top:-2.26em><span class=pstrut style=height:6.45em></span><span class=mord><span class="mord mathbb">E</span><span class=mopen>[</span><span class=mord><span class="mord mathnormal" style=margin-right:0.02778em>D</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3011em><span style=top:-2.55em;margin-left:-0.0278em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span><span class=mspace style=margin-right:0.2222em></span><span class=mbin>+</span><span class=mspace style=margin-right:0.2222em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02778em>D</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3011em><span style=top:-2.55em;margin-left:-0.0278em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span><span class=mclose>]</span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class=mord>7</span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class="mord mathbb">E</span><span class=mopen>[</span><span class=mord><span class="mord mathnormal" style=margin-right:0.02778em>D</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3361em><span style=top:-2.55em;margin-left:-0.0278em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style=margin-right:0.10764em>f</span><span class="mord mathnormal mtight">ai</span><span class="mord mathnormal mtight" style=margin-right:0.02778em>r</span></span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.2861em><span></span></span></span></span></span></span><span class=mspace style=margin-right:0.2222em></span><span class=mbin>+</span><span class=mspace style=margin-right:0.2222em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02778em>D</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3361em><span style=top:-2.55em;margin-left:-0.0278em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style=margin-right:0.10764em>f</span><span class="mord mathnormal mtight">ai</span><span class="mord mathnormal mtight" style=margin-right:0.02778em>r</span></span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.2861em><span></span></span></span></span></span></span><span class=mclose>]</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:4.85em><span></span></span></span></span></span></span></span></span></span></span></span>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class=codeBlockLines_e6Vv><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token keyword" style="color:hsl(301, 63%, 40%)">def</span><span class="token plain"> </span><span class="token function" style="color:hsl(221, 87%, 60%)">unfair_die</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">p_vals</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> n</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> x </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">random</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">multinomial</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> p_vals</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> n</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> x</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">nonzero</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"> </span><span class="token operator" style="color:hsl(221, 87%, 60%)">+</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">d1 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">d2 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">x1 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> unfair_die</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10000</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">x2 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> unfair_die</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10000</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">pd</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">Series</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">x1 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">+</span><span class="token plain"> x2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">plot</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">kind</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token string" style="color:hsl(119, 34%, 47%)">'hist'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> bins</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token number" style="color:hsl(35, 99%, 36%)">11</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">plt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">title</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'$D_1$ biased low, $D_2$ biased high'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div>
<p><img decoding=async loading=lazy alt=png src="data:image/png;base64,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" width=400 height=268 class=img_ev3q></p>
<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>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id=edge-case-2>Edge Case 2<a href=#edge-case-2 class=hash-link aria-label="Direct link to Edge Case 2" title="Direct link to Edge Case 2"></a></h3>
<p>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>
<span class=katex-display><span class=katex><span class=katex-mathml><math display=block><semantics><mtable rowspacing=0.25em columnalign=right columnspacing=""><mtr><mtd><mstyle scriptlevel=0 displaystyle=true><mtable rowspacing=0.16em columnalign="center center" columnspacing=1em><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><msub><mi>D</mi><mn>1</mn></msub><mo>=</mo><mrow><mo fence=true>{</mo><mtable rowspacing=0.16em columnalign="left right" columnspacing=1em><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>3</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>2</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>12</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>3</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>12</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>4</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>12</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>5</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>12</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>6</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>3</mn></mrow></mstyle></mtd></mtr></mtable></mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><msub><mi>D</mi><mn>2</mn></msub><mo>=</mo><mrow><mo fence=true>{</mo><mtable rowspacing=0.16em columnalign="left right" columnspacing=1em><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>1</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>3</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>2</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>12</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>3</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>12</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>4</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>12</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>5</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>12</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mn>6</mn></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>w</mi><mi mathvariant=normal>.</mi><mi>p</mi><mi mathvariant=normal>.</mi><mn>1</mn><mi mathvariant=normal>/</mi><mn>3</mn></mrow></mstyle></mtd></mtr></mtable></mrow></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi mathvariant=double-struck>E</mi><mo stretchy=false>[</mo><msub><mi>D</mi><mn>1</mn></msub><mo stretchy=false>]</mo><mo>=</mo><mn>3.5</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi mathvariant=double-struck>E</mi><mo stretchy=false>[</mo><msub><mi>D</mi><mn>2</mn></msub><mo stretchy=false>]</mo><mo>=</mo><mn>3.5</mn></mrow></mstyle></mtd></mtr></mtable></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=true><mrow><mi mathvariant=double-struck>E</mi><mo stretchy=false>[</mo><msub><mi>D</mi><mn>1</mn></msub><mo>+</mo><msub><mi>D</mi><mn>2</mn></msub><mo stretchy=false>]</mo><mo>=</mo><mn>7</mn><mo>=</mo><mi mathvariant=double-struck>E</mi><mo stretchy=false>[</mo><msub><mi>D</mi><mrow><mi>f</mi><mi>a</mi><mi>i</mi><mi>r</mi></mrow></msub><mo>+</mo><msub><mi>D</mi><mrow><mi>f</mi><mi>a</mi><mi>i</mi><mi>r</mi></mrow></msub><mo stretchy=false>]</mo></mrow></mstyle></mtd></mtr></mtable><annotation encoding=application/x-tex>\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*}</annotation></semantics></math></span><span class=katex-html aria-hidden=true><span class=base><span class=strut style=height:10.2em;vertical-align:-4.85em></span><span class=mord><span class=mtable><span class=col-align-r><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:5.35em><span style=top:-7.35em><span class=pstrut style=height:6.45em></span><span class=mord><span class=mord><span class=mtable><span class=arraycolsep style=width:0.5em></span><span class=col-align-c><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:4.45em><span style=top:-6.45em><span class=pstrut style=height:5.85em></span><span class=mord><span class=mord><span class="mord mathnormal" style=margin-right:0.02778em>D</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3011em><span style=top:-2.55em;margin-left:-0.0278em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class=minner><span class=mopen><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:3.85em><span style=top:-1.366em><span class=pstrut style=height:3.816em></span><span class="delimsizinginner delim-size4"><span></span></span></span><span style=top:-1.358em><span class=pstrut style=height:3.816em></span><span style=height:1.816em;width:0.8889em><svg width=0.8889em height=1.816em style=width:0.8889em viewBox="0 0 888.89 1816" preserveAspectRatio=xMinYMin><path d="M384 0 H504 V1816 H384z M384 0 H504 V1816 H384z"/></svg></span></span><span style=top:-3.816em><span class=pstrut style=height:3.816em></span><span class="delimsizinginner delim-size4"><span></span></span></span><span style=top:-4.958em><span class=pstrut style=height:3.816em></span><span style=height:1.816em;width:0.8889em><svg width=0.8889em height=1.816em style=width:0.8889em viewBox="0 0 888.89 1816" preserveAspectRatio=xMinYMin><path d="M384 0 H504 V1816 H384z M384 0 H504 V1816 H384z"/></svg></span></span><span style=top:-6.766em><span class=pstrut style=height:3.816em></span><span class="delimsizinginner delim-size4"><span></span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:3.35em><span></span></span></span></span></span></span><span class=mord><span class=mtable><span class=arraycolsep style=width:0.5em></span><span class=col-align-l><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:3.85em><span style=top:-6.01em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>1</span></span></span><span style=top:-4.81em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>2</span></span></span><span style=top:-3.61em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>3</span></span></span><span style=top:-2.41em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>4</span></span></span><span style=top:-1.21em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>5</span></span></span><span style=top:-0.01em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>6</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:3.35em><span></span></span></span></span></span><span class=arraycolsep style=width:0.5em></span><span class=arraycolsep style=width:0.5em></span><span class=col-align-r><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:3.85em><span style=top:-6.01em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/3</span></span></span><span style=top:-4.81em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/12</span></span></span><span style=top:-3.61em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/12</span></span></span><span style=top:-2.41em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/12</span></span></span><span style=top:-1.21em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/12</span></span></span><span style=top:-0.01em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/3</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:3.35em><span></span></span></span></span></span><span class=arraycolsep style=width:0.5em></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style=top:-2.26em><span class=pstrut style=height:5.85em></span><span class=mord><span class="mord mathbb">E</span><span class=mopen>[</span><span class=mord><span class="mord mathnormal" style=margin-right:0.02778em>D</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3011em><span style=top:-2.55em;margin-left:-0.0278em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span><span class=mclose>]</span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class=mord>3.5</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:3.95em><span></span></span></span></span></span><span class=arraycolsep style=width:0.5em></span><span class=arraycolsep style=width:0.5em></span><span class=col-align-c><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:4.45em><span style=top:-6.45em><span class=pstrut style=height:5.85em></span><span class=mord><span class=mord><span class="mord mathnormal" style=margin-right:0.02778em>D</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3011em><span style=top:-2.55em;margin-left:-0.0278em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class=minner><span class=mopen><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:3.85em><span style=top:-1.366em><span class=pstrut style=height:3.816em></span><span class="delimsizinginner delim-size4"><span></span></span></span><span style=top:-1.358em><span class=pstrut style=height:3.816em></span><span style=height:1.816em;width:0.8889em><svg width=0.8889em height=1.816em style=width:0.8889em viewBox="0 0 888.89 1816" preserveAspectRatio=xMinYMin><path d="M384 0 H504 V1816 H384z M384 0 H504 V1816 H384z"/></svg></span></span><span style=top:-3.816em><span class=pstrut style=height:3.816em></span><span class="delimsizinginner delim-size4"><span></span></span></span><span style=top:-4.958em><span class=pstrut style=height:3.816em></span><span style=height:1.816em;width:0.8889em><svg width=0.8889em height=1.816em style=width:0.8889em viewBox="0 0 888.89 1816" preserveAspectRatio=xMinYMin><path d="M384 0 H504 V1816 H384z M384 0 H504 V1816 H384z"/></svg></span></span><span style=top:-6.766em><span class=pstrut style=height:3.816em></span><span class="delimsizinginner delim-size4"><span></span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:3.35em><span></span></span></span></span></span></span><span class=mord><span class=mtable><span class=arraycolsep style=width:0.5em></span><span class=col-align-l><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:3.85em><span style=top:-6.01em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>1</span></span></span><span style=top:-4.81em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>2</span></span></span><span style=top:-3.61em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>3</span></span></span><span style=top:-2.41em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>4</span></span></span><span style=top:-1.21em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>5</span></span></span><span style=top:-0.01em><span class=pstrut style=height:3em></span><span class=mord><span class=mord>6</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:3.35em><span></span></span></span></span></span><span class=arraycolsep style=width:0.5em></span><span class=arraycolsep style=width:0.5em></span><span class=col-align-r><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:3.85em><span style=top:-6.01em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/3</span></span></span><span style=top:-4.81em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/12</span></span></span><span style=top:-3.61em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/12</span></span></span><span style=top:-2.41em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/12</span></span></span><span style=top:-1.21em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/12</span></span></span><span style=top:-0.01em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02691em>w</span><span class=mord>.</span><span class="mord mathnormal">p</span><span class=mord>.1/3</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:3.35em><span></span></span></span></span></span><span class=arraycolsep style=width:0.5em></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style=top:-2.26em><span class=pstrut style=height:5.85em></span><span class=mord><span class="mord mathbb">E</span><span class=mopen>[</span><span class=mord><span class="mord mathnormal" style=margin-right:0.02778em>D</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3011em><span style=top:-2.55em;margin-left:-0.0278em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span><span class=mclose>]</span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class=mord>3.5</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:3.95em><span></span></span></span></span></span><span class=arraycolsep style=width:0.5em></span></span></span></span></span><span style=top:-2.26em><span class=pstrut style=height:6.45em></span><span class=mord><span class="mord mathbb">E</span><span class=mopen>[</span><span class=mord><span class="mord mathnormal" style=margin-right:0.02778em>D</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3011em><span style=top:-2.55em;margin-left:-0.0278em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span><span class=mspace style=margin-right:0.2222em></span><span class=mbin>+</span><span class=mspace style=margin-right:0.2222em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02778em>D</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3011em><span style=top:-2.55em;margin-left:-0.0278em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span><span class=mclose>]</span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class=mord>7</span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class="mord mathbb">E</span><span class=mopen>[</span><span class=mord><span class="mord mathnormal" style=margin-right:0.02778em>D</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3361em><span style=top:-2.55em;margin-left:-0.0278em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style=margin-right:0.10764em>f</span><span class="mord mathnormal mtight">ai</span><span class="mord mathnormal mtight" style=margin-right:0.02778em>r</span></span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.2861em><span></span></span></span></span></span></span><span class=mspace style=margin-right:0.2222em></span><span class=mbin>+</span><span class=mspace style=margin-right:0.2222em></span><span class=mord><span class="mord mathnormal" style=margin-right:0.02778em>D</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3361em><span style=top:-2.55em;margin-left:-0.0278em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style=margin-right:0.10764em>f</span><span class="mord mathnormal mtight">ai</span><span class="mord mathnormal mtight" style=margin-right:0.02778em>r</span></span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.2861em><span></span></span></span></span></span></span><span class=mclose>]</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:4.85em><span></span></span></span></span></span></span></span></span></span></span></span>
<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 class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class=codeBlockLines_e6Vv><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">d1 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">d2 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> d1</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">x1 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> unfair_die</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10000</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">x2 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> unfair_die</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10000</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">pd</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">Series</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">x1 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">+</span><span class="token plain"> x2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">plot</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">kind</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token string" style="color:hsl(119, 34%, 47%)">'hist'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> bins</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token number" style="color:hsl(35, 99%, 36%)">11</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">plt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">title</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">"$D_1$ and $D_2$ biased to 1 and 6"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div>
<p><img decoding=async loading=lazy alt=png src="data:image/png;base64,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" width=400 height=268 class=img_ev3q></p>
<p>In a very un-subtle way, we have of course made the values 2 and 12 far more likely.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id=detection-conclusion>Detection Conclusion<a href=#detection-conclusion class=hash-link aria-label="Direct link to Detection Conclusion" title="Direct link to Detection Conclusion"></a></h2>
<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>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id=simulated-annealing>Simulated Annealing<a href=#simulated-annealing class=hash-link aria-label="Direct link to Simulated Annealing" title="Direct link to Simulated Annealing"></a></h2>
<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 target=_blank rel="noopener noreferrer">Simulated Annealing</a> is a variation of the <a href=https://en.wikipedia.org/wiki/Metropolis%E2%80%93Hastings_algorithm target=_blank rel="noopener noreferrer">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>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id=deriving-the-likelihood-function>Deriving the Likelihood function<a href=#deriving-the-likelihood-function class=hash-link aria-label="Direct link to Deriving the Likelihood function" title="Direct link to Deriving the Likelihood function"></a></h3>
<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 target=_blank rel="noopener noreferrer">Categorical distribution</a>. That is:</p>
<span class=katex-display><span class=katex><span class=katex-mathml><math display=block><semantics><mtable rowspacing=0.25em columnalign=right columnspacing=""><mtr><mtd><mstyle scriptlevel=0 displaystyle=true><mrow><mrow><mi mathvariant=script>L</mi><mo stretchy=false>(</mo><mi mathvariant=script>x</mi><mo stretchy=false>)</mo></mrow><mo>=</mo><mrow><mo fence=true>{</mo><mtable rowspacing=0.16em columnalign="left right" columnspacing=1em><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><msub><mi>p</mi><mn>2</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>x</mi><mo>=</mo><mn>2</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><msub><mi>p</mi><mn>3</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>x</mi><mo>=</mo><mn>3</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><mo lspace=0em rspace=0em></mo></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow/></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><msub><mi>p</mi><mn>11</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>x</mi><mo>=</mo><mn>11</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel=0 displaystyle=false><msub><mi>p</mi><mn>12</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=false><mrow><mi>x</mi><mo>=</mo><mn>12</mn></mrow></mstyle></mtd></mtr></mtable></mrow></mrow></mstyle></mtd></mtr></mtable><annotation encoding=application/x-tex>\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*}</annotation></semantics></math></span><span class=katex-html aria-hidden=true><span class=base><span class=strut style=height:6.3em;vertical-align:-2.9em></span><span class=mord><span class=mtable><span class=col-align-r><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:3.4em><span style=top:-5.4em><span class=pstrut style=height:5.25em></span><span class=mord><span class=mord><span class="mord mathcal">L</span><span class=mopen>(</span><span class="mord mathnormal">x</span><span class=mclose>)</span></span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class=minner><span class=mopen><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:3.25em><span style=top:-1.366em><span class=pstrut style=height:3.216em></span><span class="delimsizinginner delim-size4"><span></span></span></span><span style=top:-1.358em><span class=pstrut style=height:3.216em></span><span style=height:1.216em;width:0.8889em><svg width=0.8889em height=1.216em style=width:0.8889em viewBox="0 0 888.89 1216" preserveAspectRatio=xMinYMin><path d="M384 0 H504 V1216 H384z M384 0 H504 V1216 H384z"/></svg></span></span><span style=top:-3.216em><span class=pstrut style=height:3.216em></span><span class="delimsizinginner delim-size4"><span></span></span></span><span style=top:-4.358em><span class=pstrut style=height:3.216em></span><span style=height:1.216em;width:0.8889em><svg width=0.8889em height=1.216em style=width:0.8889em viewBox="0 0 888.89 1216" preserveAspectRatio=xMinYMin><path d="M384 0 H504 V1216 H384z M384 0 H504 V1216 H384z"/></svg></span></span><span style=top:-5.566em><span class=pstrut style=height:3.216em></span><span class="delimsizinginner delim-size4"><span></span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:2.75em><span></span></span></span></span></span></span><span class=mord><span class=mtable><span class=arraycolsep style=width:0.5em></span><span class=col-align-l><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:3.25em><span style=top:-5.41em><span class=pstrut style=height:3em></span><span class=mord><span class=mord><span class="mord mathnormal">p</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3011em><span style=top:-2.55em;margin-left:0em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span></span></span><span style=top:-4.21em><span class=pstrut style=height:3em></span><span class=mord><span class=mord><span class="mord mathnormal">p</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3011em><span style=top:-2.55em;margin-left:0em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span></span></span><span style=top:-3.01em><span class=pstrut style=height:3em></span><span class=mord><span class=minner></span></span></span><span style=top:-1.81em><span class=pstrut style=height:3em></span><span class=mord><span class=mord><span class="mord mathnormal">p</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3011em><span style=top:-2.55em;margin-left:0em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">11</span></span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span></span></span><span style=top:-0.61em><span class=pstrut style=height:3em></span><span class=mord><span class=mord><span class="mord mathnormal">p</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3011em><span style=top:-2.55em;margin-left:0em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">12</span></span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:2.75em><span></span></span></span></span></span><span class=arraycolsep style=width:0.5em></span><span class=arraycolsep style=width:0.5em></span><span class=col-align-r><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:3.25em><span style=top:-5.41em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal">x</span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class=mord>2</span></span></span><span style=top:-4.21em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal">x</span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class=mord>3</span></span></span><span style=top:-3.01em><span class=pstrut style=height:3em></span><span class=mord></span></span><span style=top:-1.81em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal">x</span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class=mord>11</span></span></span><span style=top:-0.61em><span class=pstrut style=height:3em></span><span class=mord><span class="mord mathnormal">x</span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class=mord>12</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:2.75em><span></span></span></span></span></span><span class=arraycolsep style=width:0.5em></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:2.9em><span></span></span></span></span></span></span></span></span></span></span></span>
<p>Where each <span class=katex><span class=katex-mathml><math><semantics><mrow><msub><mi>p</mi><mi>i</mi></msub></mrow><annotation encoding=application/x-tex>p_i</annotation></semantics></math></span><span class=katex-html aria-hidden=true><span class=base><span class=strut style=height:0.625em;vertical-align:-0.1944em></span><span class=mord><span class="mord mathnormal">p</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3117em><span style=top:-2.55em;margin-left:0em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span></span></span></span> 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 target=_blank rel="noopener noreferrer">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>
<span class=katex-display><span class=katex><span class=katex-mathml><math display=block><semantics><mtable rowspacing=0.25em columnalign="right left" columnspacing=0em><mtr><mtd><mstyle scriptlevel=0 displaystyle=true><mrow><mi mathvariant=script>L</mi><mo stretchy=false>(</mo><mi mathvariant=bold>X</mi><mo stretchy=false>)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=true><mrow><mrow/><mo>=</mo><munderover><mo></mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><mi>L</mi><mo stretchy=false>(</mo><mi>x</mi><mo stretchy=false>)</mo></mrow></mstyle></mtd></mtr></mtable><annotation encoding=application/x-tex>\begin{align*}
\mathcal{L(\mathbf{X})} &= \prod_{i=1}^n L(x)
\end{align*}</annotation></semantics></math></span><span class=katex-html aria-hidden=true><span class=base><span class=strut style=height:3.2291em;vertical-align:-1.3645em></span><span class=mord><span class=mtable><span class=col-align-r><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:1.8645em><span style=top:-3.8645em><span class=pstrut style=height:3.6514em></span><span class=mord><span class=mord><span class="mord mathcal">L</span><span class=mopen>(</span><span class="mord mathbf">X</span><span class=mclose>)</span></span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:1.3645em><span></span></span></span></span></span><span class=col-align-l><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:1.8645em><span style=top:-3.8645em><span class=pstrut style=height:3.6514em></span><span class=mord><span class=mord></span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:1.6514em><span style=top:-1.8723em;margin-left:0em><span class=pstrut style=height:3.05em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style=top:-3.05em><span class=pstrut style=height:3.05em></span><span><span class="mop op-symbol large-op"></span></span></span><span style=top:-4.3em;margin-left:0em><span class=pstrut style=height:3.05em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:1.2777em><span></span></span></span></span></span><span class=mspace style=margin-right:0.1667em></span><span class="mord mathnormal">L</span><span class=mopen>(</span><span class="mord mathnormal">x</span><span class=mclose>)</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:1.3645em><span></span></span></span></span></span></span></span></span></span></span></span>
<p>However, it's typically much easier to work with the <span class=katex><span class=katex-mathml><math><semantics><mrow><mi>log</mi><mo></mo><mo stretchy=false>(</mo><mi mathvariant=script>L</mi><mo stretchy=false>)</mo></mrow><annotation encoding=application/x-tex>\log(\mathcal{L})</annotation></semantics></math></span><span class=katex-html aria-hidden=true><span class=base><span class=strut style=height:1em;vertical-align:-0.25em></span><span class=mop>lo<span style=margin-right:0.01389em>g</span></span><span class=mopen>(</span><span class="mord mathcal">L</span><span class=mclose>)</span></span></span></span> function instead. This is critically important from a computational perspective: when you multiply so many small numbers together (i.e. the product of <span class=katex><span class=katex-mathml><math><semantics><mrow><mi>L</mi><mo stretchy=false>(</mo><mi>x</mi><mo stretchy=false>)</mo></mrow><annotation encoding=application/x-tex>L(x)</annotation></semantics></math></span><span class=katex-html aria-hidden=true><span class=base><span class=strut style=height:1em;vertical-align:-0.25em></span><span class="mord mathnormal">L</span><span class=mopen>(</span><span class="mord mathnormal">x</span><span class=mclose>)</span></span></span></span> 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>
<span class=katex-display><span class=katex><span class=katex-mathml><math display=block><semantics><mtable rowspacing=0.25em columnalign="right left" columnspacing=0em><mtr><mtd><mstyle scriptlevel=0 displaystyle=true><mrow><mi>log</mi><mo></mo><mo stretchy=false>(</mo><mi mathvariant=script>L</mi><mo stretchy=false>)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel=0 displaystyle=true><mrow><mrow/><mo>=</mo><munderover><mo></mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><mi>log</mi><mo></mo><mo stretchy=false>(</mo><mi>L</mi><mo stretchy=false>)</mo></mrow></mstyle></mtd></mtr></mtable><annotation encoding=application/x-tex>\begin{align*}
\log(\mathcal{L}) &= \sum_{i=1}^n \log(L)
\end{align*}</annotation></semantics></math></span><span class=katex-html aria-hidden=true><span class=base><span class=strut style=height:3.2291em;vertical-align:-1.3645em></span><span class=mord><span class=mtable><span class=col-align-r><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:1.8645em><span style=top:-3.8645em><span class=pstrut style=height:3.6514em></span><span class=mord><span class=mop>lo<span style=margin-right:0.01389em>g</span></span><span class=mopen>(</span><span class="mord mathcal">L</span><span class=mclose>)</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:1.3645em><span></span></span></span></span></span><span class=col-align-l><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:1.8645em><span style=top:-3.8645em><span class=pstrut style=height:3.6514em></span><span class=mord><span class=mord></span><span class=mspace style=margin-right:0.2778em></span><span class=mrel>=</span><span class=mspace style=margin-right:0.2778em></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:1.6514em><span style=top:-1.8723em;margin-left:0em><span class=pstrut style=height:3.05em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style=top:-3.05em><span class=pstrut style=height:3.05em></span><span><span class="mop op-symbol large-op"></span></span></span><span style=top:-4.3em;margin-left:0em><span class=pstrut style=height:3.05em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:1.2777em><span></span></span></span></span></span><span class=mspace style=margin-right:0.1667em></span><span class=mop>lo<span style=margin-right:0.01389em>g</span></span><span class=mopen>(</span><span class="mord mathnormal">L</span><span class=mclose>)</span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:1.3645em><span></span></span></span></span></span></span></span></span></span></span></span>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id=the-process-of-simulated-annealing>The process of Simulated Annealing<a href=#the-process-of-simulated-annealing class=hash-link aria-label="Direct link to The process of Simulated Annealing" title="Direct link to The process of Simulated Annealing"></a></h3>
<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 <span class=katex><span class=katex-mathml><math><semantics><mrow><mi>log</mi><mo></mo><mo stretchy=false>(</mo><mi mathvariant=script>L</mi><mo stretchy=false>)</mo></mrow><annotation encoding=application/x-tex>\log(\mathcal{L})</annotation></semantics></math></span><span class=katex-html aria-hidden=true><span class=base><span class=strut style=height:1em;vertical-align:-0.25em></span><span class=mop>lo<span style=margin-right:0.01389em>g</span></span><span class=mopen>(</span><span class="mord mathcal">L</span><span class=mclose>)</span></span></span></span> 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: <span class=katex><span class=katex-mathml><math><semantics><mrow><mi mathvariant=script>P</mi><mo stretchy=false>(</mo><msub><mi>p</mi><mrow><mi>c</mi><mi>u</mi><mi>r</mi><mi>r</mi><mi>e</mi><mi>n</mi><mi>t</mi></mrow></msub><mo separator=true>,</mo><msub><mi>p</mi><mrow><mi>p</mi><mi>r</mi><mi>o</mi><mi>p</mi><mi>o</mi><mi>s</mi><mi>e</mi><mi>d</mi></mrow></msub><mo stretchy=false>)</mo></mrow><annotation encoding=application/x-tex>\mathcal{P}(p_{current}, p_{proposed})</annotation></semantics></math></span><span class=katex-html aria-hidden=true><span class=base><span class=strut style=height:1.0361em;vertical-align:-0.2861em></span><span class="mord mathcal" style=margin-right:0.08222em>P</span><span class=mopen>(</span><span class=mord><span class="mord mathnormal">p</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.2806em><span style=top:-2.55em;margin-left:0em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">c</span><span class="mord mathnormal mtight">u</span><span class="mord mathnormal mtight">rre</span><span class="mord mathnormal mtight">n</span><span class="mord mathnormal mtight">t</span></span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.15em><span></span></span></span></span></span></span><span class=mpunct>,</span><span class=mspace style=margin-right:0.1667em></span><span class=mord><span class="mord mathnormal">p</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3361em><span style=top:-2.55em;margin-left:0em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span><span class="mord mathnormal mtight">ro</span><span class="mord mathnormal mtight">p</span><span class="mord mathnormal mtight">ose</span><span class="mord mathnormal mtight">d</span></span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.2861em><span></span></span></span></span></span></span><span class=mclose>)</span></span></span></span></li>
<li>Switch to the new parameter set with probability <span class=katex><span class=katex-mathml><math><semantics><mrow><mi mathvariant=script>P</mi></mrow><annotation encoding=application/x-tex>\mathcal{P}</annotation></semantics></math></span><span class=katex-html aria-hidden=true><span class=base><span class=strut style=height:0.6833em></span><span class="mord mathcal" style=margin-right:0.08222em>P</span></span></span></span>. 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 <span class=katex><span class=katex-mathml><math><semantics><mrow><mi>n</mi></mrow><annotation encoding=application/x-tex>n</annotation></semantics></math></span><span class=katex-html aria-hidden=true><span class=base><span class=strut style=height:0.4306em></span><span class="mord mathnormal">n</span></span></span></span> 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>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id=the-actual-code>The actual code<a href=#the-actual-code class=hash-link aria-label="Direct link to The actual code" title="Direct link to The actual code"></a></h2>
<p>We start by defining the score function. This will tell us how well the proposed die densities actually explain the results.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class=codeBlockLines_e6Vv><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token keyword" style="color:hsl(301, 63%, 40%)">import</span><span class="token plain"> numpy </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">as</span><span class="token plain"> np</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(301, 63%, 40%)">from</span><span class="token plain"> numpy </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">import</span><span class="token plain"> polynomial</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(301, 63%, 40%)">def</span><span class="token plain"> </span><span class="token function" style="color:hsl(221, 87%, 60%)">density_coef</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d1_density</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> d2_density</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Calculating the probabilities of each outcome was taken</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># from this author: http://math.stackexchange.com/a/1710392/320784</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> d1_p </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> polynomial</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">Polynomial</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d1_density</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> d2_p </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> polynomial</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">Polynomial</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d2_density</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> coefs </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d1_p </span><span class="token operator" style="color:hsl(221, 87%, 60%)">*</span><span class="token plain"> d2_p</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">coef</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> coefs</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(301, 63%, 40%)">def</span><span class="token plain"> </span><span class="token function" style="color:hsl(221, 87%, 60%)">score</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">x</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> d1_density</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> d2_density</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># We've now got the probabilities of each event, but we need</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># to shift the array a bit so we can use the x values to actually</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># index into it. This will allow us to do all the calculations</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># incredibly quickly</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> coefs </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> density_coef</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d1_density</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> d2_density</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> coefs </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">hstack</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">0</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">0</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> coefs</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">coefs</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain">x</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token builtin" style="color:hsl(119, 34%, 47%)">sum</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div>
<p>Afterward, we need to write something to permute the proposal densities. We make random modifications, and eventually the best one survives.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class=codeBlockLines_e6Vv><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token keyword" style="color:hsl(301, 63%, 40%)">def</span><span class="token plain"> </span><span class="token function" style="color:hsl(221, 87%, 60%)">permute</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d1_density</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> d2_density</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># To ensure we have legitimate densities, we will randomly</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># increase one die face probability by `change`,</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># and decrease one by `change`.</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># This means there are something less than (1/`change`)^12 possibilities</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># we are trying to search over.</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> change </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">.01</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> d1_index1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> d1_index2 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">random</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">randint</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">0</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">6</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> d2_index1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> d2_index2 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">random</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">randint</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">0</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">6</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Also make sure to copy. I've had some weird aliasing issues</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># in the past that made everything blow up.</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> new_d1 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">float64</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">copy</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d1_density</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> new_d2 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">float64</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">copy</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d2_density</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># While this doesn't account for the possibility that some</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># values go negative, in practice this never happens</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> new_d1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain">d1_index1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"> </span><span class="token operator" style="color:hsl(221, 87%, 60%)">+=</span><span class="token plain"> change</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> new_d1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain">d1_index2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"> </span><span class="token operator" style="color:hsl(221, 87%, 60%)">-=</span><span class="token plain"> change</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> new_d2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain">d2_index1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"> </span><span class="token operator" style="color:hsl(221, 87%, 60%)">+=</span><span class="token plain"> change</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> new_d2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain">d2_index2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"> </span><span class="token operator" style="color:hsl(221, 87%, 60%)">-=</span><span class="token plain"> change</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> new_d1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> new_d2</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div>
<p>Now we've got the main algorithm code to do. This is what brings all the pieces together.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class=codeBlockLines_e6Vv><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token keyword" style="color:hsl(301, 63%, 40%)">def</span><span class="token plain"> </span><span class="token function" style="color:hsl(221, 87%, 60%)">optimize</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> conv_count</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token number" style="color:hsl(35, 99%, 36%)">10</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> max_iter</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token number" style="color:hsl(35, 99%, 36%)">1e4</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> switch_failures </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">0</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> iter_count </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">0</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Start with guessing fair dice</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> cur_d1 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">repeat</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">6</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">6</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> cur_d2 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">repeat</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">6</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">6</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> cur_score </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> score</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> cur_d1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> cur_d2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Keep track of our best guesses - may not be</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># what we end with</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> max_score </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> cur_score</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> max_d1 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> cur_d1</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> max_d2 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> cur_d2</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Optimization stops when we have failed to switch `conv_count`</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># times (presumably because we have a great guess), or we reach</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># the maximum number of iterations.</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">while</span><span class="token plain"> switch_failures </span><span class="token operator" style="color:hsl(221, 87%, 60%)">&lt;</span><span class="token plain"> conv_count </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">and</span><span class="token plain"> iter_count </span><span class="token operator" style="color:hsl(221, 87%, 60%)">&lt;</span><span class="token plain"> max_iter</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> iter_count </span><span class="token operator" style="color:hsl(221, 87%, 60%)">+=</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">if</span><span class="token plain"> iter_count </span><span class="token operator" style="color:hsl(221, 87%, 60%)">%</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">max_iter </span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token operator" style="color:hsl(221, 87%, 60%)">==</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">0</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">print</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'Iteration: {}; Current score (higher is better): {}'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token builtin" style="color:hsl(119, 34%, 47%)">format</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> iter_count</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> cur_score</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> new_d1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> new_d2 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> permute</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">cur_d1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> cur_d2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> new_score </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> score</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> new_d1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> new_d2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">if</span><span class="token plain"> new_score </span><span class="token operator" style="color:hsl(221, 87%, 60%)">></span><span class="token plain"> max_score</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> max_score </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> new_score</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> max_d1 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> new_d1</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> max_d2 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> new_d2</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">if</span><span class="token plain"> new_score </span><span class="token operator" style="color:hsl(221, 87%, 60%)">></span><span class="token plain"> cur_score</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># If the new permutation beats the old one,</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># automatically select it.</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> cur_score </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> new_score</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> cur_d1 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> new_d1</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> cur_d2 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> new_d2</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> switch_failures </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">0</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">else</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># We didn't beat the current score, but allow</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># for possibly switching anyways.</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> accept_prob </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">exp</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">new_score </span><span class="token operator" style="color:hsl(221, 87%, 60%)">-</span><span class="token plain"> cur_score</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> coin_toss </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">random</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">rand</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">if</span><span class="token plain"> coin_toss </span><span class="token operator" style="color:hsl(221, 87%, 60%)">&lt;</span><span class="token plain"> accept_prob</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># We randomly switch to the new distribution</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> cur_score </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> new_score</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> cur_d1 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> new_d1</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> cur_d2 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> new_d2</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> switch_failures </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">0</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">else</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> switch_failures </span><span class="token operator" style="color:hsl(221, 87%, 60%)">+=</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Return both our best guess, and the ending guess</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> max_d1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> max_d2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> cur_d1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> cur_d2</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div>
<p>And now we have finished the hard work!</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id=catching-the-casino>Catching the Casino<a href=#catching-the-casino class=hash-link aria-label="Direct link to Catching the Casino" title="Direct link to Catching the Casino"></a></h2>
<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>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id=attempt-1>Attempt 1<a href=#attempt-1 class=hash-link aria-label="Direct link to Attempt 1" title="Direct link to Attempt 1"></a></h3>
<p>The casino is using two dice that are both biased low. How well can we recover the distribution?</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class=codeBlockLines_e6Vv><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token keyword" style="color:hsl(301, 63%, 40%)">import</span><span class="token plain"> time</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(301, 63%, 40%)">def</span><span class="token plain"> </span><span class="token function" style="color:hsl(221, 87%, 60%)">simulate_casino</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d1_dist</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> d2_dist</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> n</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token number" style="color:hsl(35, 99%, 36%)">10000</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> d1_vals </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> unfair_die</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d1_dist</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> n</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> d2_vals </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> unfair_die</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d2_dist</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> n</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> start </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> time</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">perf_counter</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> max_d1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> max_d2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> final_d1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> final_d2 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> optimize</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d1_vals </span><span class="token operator" style="color:hsl(221, 87%, 60%)">+</span><span class="token plain"> d2_vals</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> end </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> time</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">perf_counter</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">print</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">"Simulated Annealing time: {:.02f}s"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token builtin" style="color:hsl(119, 34%, 47%)">format</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">end </span><span class="token operator" style="color:hsl(221, 87%, 60%)">-</span><span class="token plain"> start</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> coef_range </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">arange</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">13</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token operator" style="color:hsl(221, 87%, 60%)">-</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">.5</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> plt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">subplot</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">221</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> plt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">bar</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">coef_range</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> density_coef</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d1_dist</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> d2_dist</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> width</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> plt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">title</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'True Distribution'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> plt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">subplot</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">222</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> plt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">hist</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">d1_vals </span><span class="token operator" style="color:hsl(221, 87%, 60%)">+</span><span class="token plain"> d2_vals</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> bins</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token number" style="color:hsl(35, 99%, 36%)">11</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> plt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">title</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'Empirical Distribution'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> plt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">subplot</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">223</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> plt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">bar</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">coef_range</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> density_coef</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">max_d1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> max_d2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> width</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> plt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">title</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'Recovered Distribution'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> plt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">gcf</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">set_size_inches</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">10</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">simulate_casino</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class=codeBlockLines_e6Vv><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> Iteration: 1000; Current score (higher is better): -22147.004400281654</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> Simulated Annealing time: 0.30s</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div>
<p><img decoding=async loading=lazy alt=png src=/assets/images/_notebook_14_1-22c2867e2cee02c45b87635ab4d3b76a.png width=605 height=601 class=img_ev3q></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id=attempt-2>Attempt 2<a href=#attempt-2 class=hash-link aria-label="Direct link to Attempt 2" title="Direct link to Attempt 2"></a></h3>
<p>The casino now uses dice that are both biased towards 1 and 6.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class=codeBlockLines_e6Vv><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">simulate_casino</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class=codeBlockLines_e6Vv><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> Simulated Annealing time: 0.08s</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div>
<p><img decoding=async loading=lazy alt=png src=/assets/images/_notebook_16_1-eaa9ebc93d4557216c77a63df7df5192.png width=605 height=601 class=img_ev3q></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id=attempt-3>Attempt 3<a href=#attempt-3 class=hash-link aria-label="Direct link to Attempt 3" title="Direct link to Attempt 3"></a></h3>
<p>The casino will now use one die biased towards 1 and 6, and one die towards 3 and 4.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class=codeBlockLines_e6Vv><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">simulate_casino</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">12</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class=codeBlockLines_e6Vv><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> Simulated Annealing time: 0.09s</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div>
<p><img decoding=async loading=lazy alt=png src=/assets/images/_notebook_18_1-f61745c7c099b114becca8acb3175541.png width=605 height=601 class=img_ev3q></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id=attempt-4>Attempt 4<a href=#attempt-4 class=hash-link aria-label="Direct link to Attempt 4" title="Direct link to Attempt 4"></a></h3>
<p>We'll now finally go to a fair casino to make sure that we can still recognize a positive result.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class=codeBlockLines_e6Vv><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">simulate_casino</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">repeat</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">6</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">6</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> np</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token plain">repeat</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">6</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">6</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class=codeBlockLines_e6Vv><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> Simulated Annealing time: 0.02s</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div>
<p><img decoding=async loading=lazy alt=png src=/assets/images/_notebook_20_1-ea40789d2365d20a0725aca866680217.png width=605 height=601 class=img_ev3q></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id=attempt-5>Attempt 5<a href=#attempt-5 class=hash-link aria-label="Direct link to Attempt 5" title="Direct link to Attempt 5"></a></h3>
<p>We've so far been working with a large amount of data - 10,000 data points. Can we now scale things back to only 250 throws? We'll start with two dice biased high.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class=codeBlockLines_e6Vv><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain">simulate_casino</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">9</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> n</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token number" style="color:hsl(35, 99%, 36%)">250</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class=codeBlockContent_biex><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class=codeBlockLines_e6Vv><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> Iteration: 1000; Current score (higher is better): -551.6995384525453</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> Iteration: 2000; Current score (higher is better): -547.7803673440676</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> Iteration: 3000; Current score (higher is better): -547.9805613193807</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> Iteration: 4000; Current score (higher is better): -546.7574874775273</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> Iteration: 5000; Current score (higher is better): -549.5798007672656</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> Iteration: 6000; Current score (higher is better): -545.0354060154496</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> Iteration: 7000; Current score (higher is better): -550.1134504086606</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> Iteration: 8000; Current score (higher is better): -549.9306537114975</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> Iteration: 9000; Current score (higher is better): -550.7075182119111</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> Iteration: 10000; Current score (higher is better): -549.400679551826</span><br></span><span class=token-line style="color:hsl(230, 8%, 24%)"><span class="token plain"> Simulated Annealing time: 1.94s</span><br></span></code></pre><div class=buttonGroup__atx><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_eSgA aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_y97N><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_LjdS><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div>
<p><img decoding=async loading=lazy alt=png src=/assets/images/_notebook_22_1-210909ddb46467b78aa3f65c8ae519fd.png width=605 height=601 class=img_ev3q></p>
<p>The results are surprisingly good. While the actual optimization process took much longer to finish than in the other examples, we still have a very good guess. As a caveat though: the recovered distribution tends to overfit the data. That is, if the data doesn't fit the underlying distribution well, the model will also fail.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id=conclusion>Conclusion<a href=#conclusion class=hash-link aria-label="Direct link to Conclusion" title="Direct link to Conclusion"></a></h2>
<p>Given the results above, we can see that we have indeed come up with a very good algorithm to determine the distribution of two dice given their results. As a benefit, we have even seen that results come back very quickly; it's not uncommon for the optimization to converge within a tenth of a second.</p>
<p>Additionally, we have seen that the algorithm can intuit the distribution even when there is not much data. While the final example shows that we can 'overfit' on the dataset, we can still get valuable information from a relatively small dataset.</p>
<p>We can declare at long last: <strong>the mathematicians have again triumphed over the casino</strong>.</p>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id=justification-of-simulated-annealing>Justification of Simulated Annealing<a href=#justification-of-simulated-annealing class=hash-link aria-label="Direct link to Justification of Simulated Annealing" title="Direct link to Justification of Simulated Annealing"></a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id=why-simulated-annealing>Why Simulated Annealing?<a href=#why-simulated-annealing class=hash-link aria-label="Direct link to Why Simulated Annealing?" title="Direct link to Why Simulated Annealing?"></a></h3>
<p>So why even use an algorithm with a fancy title like Simulated Annealing? First of all, because the title is sexy. Second of all, because this is a reasonably complicated problem to try and solve. We have a parameter space where each value <span class=katex><span class=katex-mathml><math><semantics><mrow><msub><mi>p</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub><mo></mo><mo stretchy=false>(</mo><mn>0</mn><mo separator=true>,</mo><mn>1</mn><mo stretchy=false>)</mo><mo separator=true>;</mo><mi>i</mi><mo separator=true>,</mo><mi>j</mi><mo></mo><mo stretchy=false>{</mo><mn>1</mn><mo separator=true>,</mo><mo></mo><mo separator=true>,</mo><mn>6</mn><mo stretchy=false>}</mo></mrow><annotation encoding=application/x-tex>p_{ij} \in (0, 1); i, j \in \{1, \ldots, 6\}</annotation></semantics></math></span><span class=katex-html aria-hidden=true><span class=base><span class=strut style=height:0.8252em;vertical-align:-0.2861em></span><span class=mord><span class="mord mathnormal">p</span><span class=msupsub><span class="vlist-t vlist-t2"><span class=vlist-r><span class=vlist style=height:0.3117em><span style=top:-2.55em;margin-left:0em;margin-right:0.05em><span class=pstrut style=height:2.7em></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style=margin-right:0.05724em>ij</span></span></span></span></span><span class=vlist-s></span></span><span class=vlist-r><span class=vlist style=height:0.2861em><span></span></span></span></span></span></span><span class=mspace style=margin-right:0.2778em></span><span class=mrel></span><span class=mspace style=margin-right:0.2778em></span></span><span class=base><span class=strut style=height:1em;vertical-align:-0.25em></span><span class=mopen>(</span><span class=mord>0</span><span class=mpunct>,</span><span class=mspace style=margin-right:0.1667em></span><span class=mord>1</span><span class=mclose>)</span><span class=mpunct>;</span><span class=mspace style=margin-right:0.1667em></span><span class="mord mathnormal">i</span><span class=mpunct>,</span><span class=mspace style=margin-right:0.1667em></span><span class="mord mathnormal" style=margin-right:0.05724em>j</span><span class=mspace style=margin-right:0.2778em></span><span class=mrel></span><span class=mspace style=margin-right:0.2778em></span></span><span class=base><span class=strut style=height:1em;vertical-align:-0.25em></span><span class=mopen>{</span><span class=mord>1</span><span class=mpunct>,</span><span class=mspace style=margin-right:0.1667em></span><span class=minner></span><span class=mspace style=margin-right:0.1667em></span><span class=mpunct>,</span><span class=mspace style=margin-right:0.1667em></span><span class=mord>6</span><span class=mclose>}</span></span></span></span>, for a total of 12 different variables we are trying to optimize over. Additionally, given a 12-dimensional function we are trying to optimize, simulated annealing makes sure that we don't fall into a local minimum.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id=why-not-something-else>Why not something else?<a href=#why-not-something-else class=hash-link aria-label="Direct link to Why not something else?" title="Direct link to Why not something else?"></a></h3>
<p>This is a fair question. There are two classes of algorithms that can also be used to solve this problem: <a href=https://en.wikipedia.org/wiki/Nonlinear_programming target=_blank rel="noopener noreferrer">Non-linear optimization</a> methods, and the <a href=https://en.wikipedia.org/wiki/Expectation%E2%80%93maximization_algorithm target=_blank rel="noopener noreferrer">EM algorithm</a>.</p>
<ol>
<li>
<p>I chose not to use non-linear optimization simply because I'm a bit concerned that it will trap me in a local maximum. Instead of running multiple different optimizations from different starting points, I can just use simulated annealing to take that into account. In addition, throughout the course of testing the simulated annealing code converged <em>incredibly</em> quickly - far more quickly than any non-linear solver would be able to accomplish.</p>
</li>
<li>
<p>The EM Algorithm was originally what I intended to write this blog post with. Indeed, the post was inspired by the <a href=http://web.stanford.edu/class/stats366/hmmR2.html target=_blank rel="noopener noreferrer">crooked casino</a> example which uses the EM algorithm to solve it. However, after modeling the likelihood function I realized that the algebra would very quickly get out of hand. Trying to compute all the polynomial terms would not be fun, which would be needed to actually optimize for each parameter. So while the EM algorithm would likely be much faster in raw speed terms, the amount of time needed to program and verify it meant that I was far better off using a different method for optimization.</p>
</li>
</ol></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Blog post page navigation"><a class="pagination-nav__link pagination-nav__link--prev" href=/2016/04/tick-tock><div class=pagination-nav__sublabel>Older post</div><div class=pagination-nav__label>Tick tock...</div></a><a class="pagination-nav__link pagination-nav__link--next" href=/2016/06/event-studies-and-earnings-releases><div class=pagination-nav__sublabel>Newer post</div><div class=pagination-nav__label>Event studies and earnings releases</div></a></nav></main><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href=#proving-we-can-detect-cheating class="table-of-contents__link toc-highlight">Proving we can detect cheating</a><li><a href=#the-edge-cases class="table-of-contents__link toc-highlight">The Edge Cases</a><ul><li><a href=#edge-case-1 class="table-of-contents__link toc-highlight">Edge Case 1</a><li><a href=#edge-case-2 class="table-of-contents__link toc-highlight">Edge Case 2</a></ul><li><a href=#detection-conclusion class="table-of-contents__link toc-highlight">Detection Conclusion</a><li><a href=#simulated-annealing class="table-of-contents__link toc-highlight">Simulated Annealing</a><ul><li><a href=#deriving-the-likelihood-function class="table-of-contents__link toc-highlight">Deriving the Likelihood function</a><li><a href=#the-process-of-simulated-annealing class="table-of-contents__link toc-highlight">The process of Simulated Annealing</a></ul><li><a href=#the-actual-code class="table-of-contents__link toc-highlight">The actual code</a><li><a href=#catching-the-casino class="table-of-contents__link toc-highlight">Catching the Casino</a><ul><li><a href=#attempt-1 class="table-of-contents__link toc-highlight">Attempt 1</a><li><a href=#attempt-2 class="table-of-contents__link toc-highlight">Attempt 2</a><li><a href=#attempt-3 class="table-of-contents__link toc-highlight">Attempt 3</a><li><a href=#attempt-4 class="table-of-contents__link toc-highlight">Attempt 4</a><li><a href=#attempt-5 class="table-of-contents__link toc-highlight">Attempt 5</a></ul><li><a href=#conclusion class="table-of-contents__link toc-highlight">Conclusion</a><li><a href=#justification-of-simulated-annealing class="table-of-contents__link toc-highlight">Justification of Simulated Annealing</a><ul><li><a href=#why-simulated-annealing class="table-of-contents__link toc-highlight">Why Simulated Annealing?</a><li><a href=#why-not-something-else class="table-of-contents__link toc-highlight">Why not something else?</a></ul></ul></div></div></div></div></div><footer class=footer><div class="container container-fluid"><div class="footer__bottom text--center"><div class=footer__copyright>Copyright © 2024 Bradlee Speice</div></div></div></footer></div>