mirror of
https://github.com/bspeice/speice.io
synced 2024-11-15 06:28:10 -05:00
720 lines
179 KiB
Plaintext
720 lines
179 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Or, how to get thrown out of a casino because you're a mathematician.\n",
|
|
"\n",
|
|
"---\n",
|
|
"\n",
|
|
"In the ongoing eternal cycle of mathematicians asking generally useless questions about probability, I dreamt up another one. The scenario is as follows:\n",
|
|
"\n",
|
|
"**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?**\n",
|
|
"\n",
|
|
"# Proving we can detect cheating\n",
|
|
"\n",
|
|
"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."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\nP71BWn/o4C2PAAAAAElFTkSuQmCC\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x2a460450e80>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"import pandas as pd\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"%matplotlib inline\n",
|
|
"\n",
|
|
"fair_1 = np.random.randint(1, 7, 10000)\n",
|
|
"fair_2 = np.random.randint(1, 7, 10000)\n",
|
|
"\n",
|
|
"pd.Series(fair_1 + fair_2).plot(kind='hist', bins=11);\n",
|
|
"plt.title('Fair Distribution');"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"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 [Triangle Distribution][1], which is itself a special case of the [Irwin-Hall Distribution][2].\n",
|
|
"\n",
|
|
"# The Edge Cases\n",
|
|
"\n",
|
|
"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.\n",
|
|
"\n",
|
|
"### Edge Case 1\n",
|
|
"What happens when one die is biased low, and one die is biased high? That is, where:\n",
|
|
"\n",
|
|
"\\begin{align}\n",
|
|
"\\begin{array}{cc}\n",
|
|
"D_1 = \\left\\{\n",
|
|
"\\begin{array}{lr}\n",
|
|
"1 & w.p. 1/3\\\\\n",
|
|
"2 & w.p. 1/3\\\\\n",
|
|
"3 & w.p. 1/12\\\\\n",
|
|
"4 & w.p. 1/12\\\\\n",
|
|
"5 & w.p. 1/12\\\\\n",
|
|
"6 & w.p. 1/12\n",
|
|
"\\end{array}\n",
|
|
"\\right. &\n",
|
|
"D_2 = \\left\\{\n",
|
|
"\\begin{array}{lr}\n",
|
|
"1 & w.p. 1/12\\\\\n",
|
|
"2 & w.p. 1/12\\\\\n",
|
|
"3 & w.p. 1/12\\\\\n",
|
|
"4 & w.p. 1/12\\\\\n",
|
|
"5 & w.p. 1/3\\\\\n",
|
|
"6 & w.p. 1/3\n",
|
|
"\\end{array}\n",
|
|
"\\right. \\\\\n",
|
|
"\\mathbb{E}[D_1] = 2.5 & \\mathbb{E}[D_2] = 4.5\n",
|
|
"\\end{array}\\\\\n",
|
|
"\\mathbb{E}[D_1 + D_2] = 7 = \\mathbb{E}[D_{fair} + D_{fair}]\n",
|
|
"\\end{align}\n",
|
|
"\n",
|
|
"[1]: https://en.wikipedia.org/wiki/Triangular_distribution\n",
|
|
"[2]: https://en.wikipedia.org/wiki/Irwin%E2%80%93Hall_distribution"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x2a460ad01d0>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"def unfair_die(p_vals, n):\n",
|
|
" x = np.random.multinomial(1, p_vals, n)\n",
|
|
" return x.nonzero()[1] + 1\n",
|
|
"\n",
|
|
"d1 = [1/3, 1/3, 1/12, 1/12, 1/12, 1/12]\n",
|
|
"d2 = [1/12, 1/12, 1/12, 1/12, 1/3, 1/3]\n",
|
|
"\n",
|
|
"x1 = unfair_die(d1, 10000)\n",
|
|
"x2 = unfair_die(d2, 10000)\n",
|
|
"\n",
|
|
"pd.Series(x1 + x2).plot(kind='hist', bins=11);\n",
|
|
"plt.title('$D_1$ biased low, $D_2$ biased high');"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"We can see that while the 7 value remains the most likely (as expected), the distribution is not so nicely shaped any more. \n",
|
|
"\n",
|
|
"**Edge Case 2:** 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:\n",
|
|
"\n",
|
|
"\\begin{align}\n",
|
|
"\\begin{array}{cc}\n",
|
|
"D_1 = \\left\\{\n",
|
|
"\\begin{array}{lr}\n",
|
|
"1 & w.p. 1/3\\\\\n",
|
|
"2 & w.p. 1/12\\\\\n",
|
|
"3 & w.p. 1/12\\\\\n",
|
|
"4 & w.p. 1/12\\\\\n",
|
|
"5 & w.p. 1/12\\\\\n",
|
|
"6 & w.p. 1/3\n",
|
|
"\\end{array}\n",
|
|
"\\right. &\n",
|
|
"D_2 = \\left\\{\n",
|
|
"\\begin{array}{lr}\n",
|
|
"1 & w.p. 1/3\\\\\n",
|
|
"2 & w.p. 1/12\\\\\n",
|
|
"3 & w.p. 1/12\\\\\n",
|
|
"4 & w.p. 1/12\\\\\n",
|
|
"5 & w.p. 1/12\\\\\n",
|
|
"6 & w.p. 1/3\n",
|
|
"\\end{array}\n",
|
|
"\\right. \\\\\n",
|
|
"\\mathbb{E}[D_1] = 3.5 & \\mathbb{E}[D_2] = 3.5\n",
|
|
"\\end{array}\\\\\n",
|
|
"\\mathbb{E}[D_1 + D_2] = 7 = \\mathbb{E}[D_{fair} + D_{fair}]\n",
|
|
"\\end{align}\n",
|
|
"\n",
|
|
"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:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\nSwIkIiJq+f8KwJfCiHKoPQAAAABJRU5ErkJggg==\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x2a461035a20>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"d1 = [1/3, 1/12, 1/12, 1/12, 1/12, 1/3]\n",
|
|
"d2 = d1\n",
|
|
"\n",
|
|
"x1 = unfair_die(d1, 10000)\n",
|
|
"x2 = unfair_die(d2, 10000)\n",
|
|
"\n",
|
|
"pd.Series(x1 + x2).plot(kind='hist', bins=11)\n",
|
|
"plt.title(\"$D_1$ and $D_2$ biased to 1 and 6\");"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"In a very un-subtle way, we have of course made the values 2 and 12 far more likely.\n",
|
|
"\n",
|
|
"# Detection Conclusion\n",
|
|
"\n",
|
|
"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.\n",
|
|
"\n",
|
|
"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.\n",
|
|
"\n",
|
|
"We can thus finally state: **just by looking at the distribution of results from this game, we can immediately conclude whether there is cheating.**"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Simulated Annealing\n",
|
|
"\n",
|
|
"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 [justification](#Justification-of-Simulated-Annealing). If you don't care about how I set up the model and just want to see the code, check out [the actual code](#The-actual-code).\n",
|
|
"\n",
|
|
"[Simulated Annealing][3] is a variation of the [Metropolis-Hastings Algorithm][4], 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 **likelihood** function.\n",
|
|
"\n",
|
|
"## Deriving the Likelihood function\n",
|
|
"\n",
|
|
"To derive our likelihood function, we want to know: **what is the probability of seeing a specific result given those hidden parameters?** 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.\n",
|
|
"\n",
|
|
"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 [Categorical distribution](https://en.wikipedia.org/wiki/Categorical_distribution). That is:\n",
|
|
"\n",
|
|
"\\begin{align}\n",
|
|
"\\mathcal{L(x)} = \\left\\{\n",
|
|
"\\begin{array}{lr}\n",
|
|
"p_2 & x = 2\\\\\n",
|
|
"p_3 & x = 3\\\\\n",
|
|
"\\ldots & \\\\\n",
|
|
"p_{11} & x = 11\\\\\n",
|
|
"p_{12} & x = 12\n",
|
|
"\\end{array}\n",
|
|
"\\right.\n",
|
|
"\\end{align}\n",
|
|
"\n",
|
|
"Where each $p_i$ is the probability of seeing that specific result. However, we need to calculate what each probability is! I'll save you the details, but [this author](http://math.stackexchange.com/a/1646360/320784) explains how to do it.\n",
|
|
"\n",
|
|
"Now, we would like to know the likelihood of our entire data-set. This is trivial:\n",
|
|
"\n",
|
|
"\\begin{align}\n",
|
|
"\\mathcal{L(\\mathbf{X})} &= \\prod_{i=1}^n L(x)\n",
|
|
"\\end{align}\n",
|
|
"\n",
|
|
"However, it's typically much easier to work with the $\\log(\\mathcal{L})$ function instead. This is critically important from a computational perspective: when you multiply so many small numbers together (i.e. the product of $L(x)$ terms) the computer suffers from rounding error; if we don't control for this, we will find that no matter the distributions we choose for each die, the \"likelihood\" will be close to zero because the computer is not precise enough.\n",
|
|
"\n",
|
|
"\\begin{align}\n",
|
|
"\\log(\\mathcal{L}) &= \\sum_{i=1}^n \\log(L)\n",
|
|
"\\end{align}\n",
|
|
"\n",
|
|
"## The process of Simulated Annealing\n",
|
|
"\n",
|
|
"The means by which we optimize our likelihood function is the simulated annealing algorithm. The way it works is as follows:\n",
|
|
"\n",
|
|
"1. 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.\n",
|
|
"\n",
|
|
"2. For each iteration of the algorithm:\n",
|
|
"\n",
|
|
" 1. Generate a new \"proposed\" set of parameters based on the current parameters -\n",
|
|
" i.e. slightly modify the current parameters to get a new set of parameters.\n",
|
|
" 2. Calculate the value of $\\log(\\mathcal{L})$ for each set of parameters. If the function value for the\n",
|
|
" proposed parameter set is higher than for the current, automatically switch to the new parameter set\n",
|
|
" and continue the next iteration.\n",
|
|
" 3. Given the new parameter set performs worse, determine a probability of switching to the new parameter set anyways: $\\mathcal{P}(p_{current}, p_{proposed})$\n",
|
|
" 4. Switch to the new parameter set with probability $\\mathcal{P}$. If you fail to switch, begin the next iteration.\n",
|
|
" \n",
|
|
"3. The algorithm is complete after we fail to make a transition $n$ times in a row.\n",
|
|
"\n",
|
|
"If everything goes according to plan, we will have a value that is close to the true distribution of each die.\n",
|
|
"\n",
|
|
"# The actual code\n",
|
|
"\n",
|
|
"We start by defining the score function. This will tell us how well the proposed die densities actually explain the results.\n",
|
|
"\n",
|
|
"[3]:https://en.wikipedia.org/wiki/Simulated_annealing\n",
|
|
"[4]:https://en.wikipedia.org/wiki/Metropolis%E2%80%93Hastings_algorithm"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"from numpy import polynomial\n",
|
|
"\n",
|
|
"def density_coef(d1_density, d2_density):\n",
|
|
" # Calculating the probabilities of each outcome was taken\n",
|
|
" # from this author: http://math.stackexchange.com/a/1710392/320784\n",
|
|
" d1_p = polynomial.Polynomial(d1_density)\n",
|
|
" d2_p = polynomial.Polynomial(d2_density)\n",
|
|
" coefs = (d1_p * d2_p).coef\n",
|
|
" return coefs\n",
|
|
"\n",
|
|
"def score(x, d1_density, d2_density):\n",
|
|
" # We've now got the probabilities of each event, but we need\n",
|
|
" # to shift the array a bit so we can use the x values to actually\n",
|
|
" # index into it. This will allow us to do all the calculations\n",
|
|
" # incredibly quickly\n",
|
|
" coefs = density_coef(d1_density, d2_density)\n",
|
|
" coefs = np.hstack((0, 0, coefs))\n",
|
|
" return np.log(coefs[x]).sum()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Afterward, we need to write something to permute the proposal densities. We make random modifications, and eventually the best one survives."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def permute(d1_density, d2_density):\n",
|
|
" # To ensure we have legitimate densities, we will randomly\n",
|
|
" # increase one die face probability by `change`,\n",
|
|
" # and decrease one by `change`.\n",
|
|
" # This means there are something less than (1/`change`)^12 possibilities\n",
|
|
" # we are trying to search over.\n",
|
|
" change = .01\n",
|
|
" \n",
|
|
" d1_index1, d1_index2 = np.random.randint(0, 6, 2)\n",
|
|
" d2_index1, d2_index2 = np.random.randint(0, 6, 2)\n",
|
|
" \n",
|
|
" # Also make sure to copy. I've had some weird aliasing issues\n",
|
|
" # in the past that made everything blow up.\n",
|
|
" new_d1 = np.float64(np.copy(d1_density))\n",
|
|
" new_d2 = np.float64(np.copy(d2_density))\n",
|
|
" \n",
|
|
" # While this doesn't account for the possibility that some\n",
|
|
" # values go negative, in practice this never happens\n",
|
|
" new_d1[d1_index1] += change\n",
|
|
" new_d1[d1_index2] -= change\n",
|
|
" new_d2[d2_index1] += change\n",
|
|
" new_d2[d2_index2] -= change\n",
|
|
" \n",
|
|
" return new_d1, new_d2"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Now we've got the main algorithm code to do. This is what brings all the pieces together."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def optimize(data, conv_count=10, max_iter=1e4):\n",
|
|
" switch_failures = 0\n",
|
|
" iter_count = 0\n",
|
|
" \n",
|
|
" # Start with guessing fair dice\n",
|
|
" cur_d1 = np.repeat(1/6, 6)\n",
|
|
" cur_d2 = np.repeat(1/6, 6)\n",
|
|
" cur_score = score(data, cur_d1, cur_d2)\n",
|
|
" \n",
|
|
" # Keep track of our best guesses - may not be\n",
|
|
" # what we end with\n",
|
|
" max_score = cur_score\n",
|
|
" max_d1 = cur_d1\n",
|
|
" max_d2 = cur_d2\n",
|
|
" \n",
|
|
" # Optimization stops when we have failed to switch `conv_count`\n",
|
|
" # times (presumably because we have a great guess), or we reach\n",
|
|
" # the maximum number of iterations.\n",
|
|
" while switch_failures < conv_count and iter_count < max_iter:\n",
|
|
" iter_count += 1\n",
|
|
" if iter_count % (max_iter / 10) == 0:\n",
|
|
" print('Iteration: {}; Current score (higher is better): {}'.format(\n",
|
|
" iter_count, cur_score))\n",
|
|
" \n",
|
|
" new_d1, new_d2 = permute(cur_d1, cur_d2)\n",
|
|
" new_score = score(data, new_d1, new_d2)\n",
|
|
" \n",
|
|
" if new_score > max_score:\n",
|
|
" max_score = new_score\n",
|
|
" max_d1 = new_d1\n",
|
|
" max_d2 = new_d2\n",
|
|
" \n",
|
|
" if new_score > cur_score:\n",
|
|
" # If the new permutation beats the old one,\n",
|
|
" # automatically select it.\n",
|
|
" cur_score = new_score\n",
|
|
" cur_d1 = new_d1\n",
|
|
" cur_d2 = new_d2\n",
|
|
" switch_failures = 0\n",
|
|
" else:\n",
|
|
" # We didn't beat the current score, but allow\n",
|
|
" # for possibly switching anyways.\n",
|
|
" accept_prob = np.exp(new_score - cur_score)\n",
|
|
" coin_toss = np.random.rand()\n",
|
|
" if coin_toss < accept_prob:\n",
|
|
" # We randomly switch to the new distribution\n",
|
|
" cur_score = new_score\n",
|
|
" cur_d1 = new_d1\n",
|
|
" cur_d2 = new_d2\n",
|
|
" switch_failures = 0\n",
|
|
" else:\n",
|
|
" switch_failures += 1\n",
|
|
" \n",
|
|
" # Return both our best guess, and the ending guess\n",
|
|
" return max_d1, max_d2, cur_d1, cur_d2"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"And now we have finished the hard work!\n",
|
|
"\n",
|
|
"# Catching the Casino\n",
|
|
"\n",
|
|
"Let's go through a couple of scenarios and see if we can catch the casino cheating with some loaded dice. **In every scenario we start with an assumption of fair dice**, and then try our hand to figure out what the *actual* distribution was.\n",
|
|
"\n",
|
|
"## Attempt 1\n",
|
|
"\n",
|
|
"\n",
|
|
"The casino is using two dice that are both biased low. How well can we recover the distribution?"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Iteration: 1000; Current score (higher is better): -22147.004400281654\n",
|
|
"Simulated Annealing time: 0.30s\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x2a46294cf98>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"import time\n",
|
|
"def simulate_casino(d1_dist, d2_dist, n=10000):\n",
|
|
" d1_vals = unfair_die(d1_dist, n)\n",
|
|
" d2_vals = unfair_die(d2_dist, n)\n",
|
|
" \n",
|
|
" start = time.perf_counter()\n",
|
|
" max_d1, max_d2, final_d1, final_d2 = optimize(d1_vals + d2_vals)\n",
|
|
" end = time.perf_counter()\n",
|
|
" print(\"Simulated Annealing time: {:.02f}s\".format(end - start))\n",
|
|
" \n",
|
|
" coef_range = np.arange(2, 13) - .5\n",
|
|
" plt.subplot(221)\n",
|
|
" plt.bar(coef_range, density_coef(d1_dist, d2_dist), width=1)\n",
|
|
" plt.title('True Distribution')\n",
|
|
" \n",
|
|
" plt.subplot(222)\n",
|
|
" plt.hist(d1_vals + d2_vals, bins=11)\n",
|
|
" plt.title('Empirical Distribution')\n",
|
|
" \n",
|
|
" plt.subplot(223)\n",
|
|
" plt.bar(coef_range, density_coef(max_d1, max_d2), width=1)\n",
|
|
" plt.title('Recovered Distribution')\n",
|
|
" \n",
|
|
" plt.gcf().set_size_inches(10, 10)\n",
|
|
"\n",
|
|
"\n",
|
|
"simulate_casino([2/9, 2/9, 2/9, 1/9, 1/9, 1/9],\n",
|
|
" [2/9, 2/9, 2/9, 1/9, 1/9, 1/9])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Attempt 2\n",
|
|
"\n",
|
|
"The casino now uses dice that are both biased towards 1 and 6."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Simulated Annealing time: 0.08s\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x2a462940978>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"simulate_casino([1/3, 1/12, 1/12, 1/12, 1/12, 1/3],\n",
|
|
" [1/3, 1/12, 1/12, 1/12, 1/12, 1/3])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Attempt 3\n",
|
|
"\n",
|
|
"The casino will now use one die biased towards 1 and 6, and one die towards 3 and 4."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Simulated Annealing time: 0.09s\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\nRK5CYII=\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x2a4625ea898>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"simulate_casino([1/3, 1/12, 1/12, 1/12, 1/12, 1/3],\n",
|
|
" [1/12, 1/12, 1/3, 1/3, 1/12, 1/12])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Attempt 4\n",
|
|
"\n",
|
|
"We'll now finally go to a fair casino to make sure that we can still recognize a positive result."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Simulated Annealing time: 0.02s\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\nhoSz1PA0AAAAAElFTkSuQmCC\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x2a462619cf8>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"simulate_casino(np.repeat(1/6, 6), np.repeat(1/6, 6))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Attempt 5\n",
|
|
"\n",
|
|
"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."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Iteration: 1000; Current score (higher is better): -551.6995384525453\n",
|
|
"Iteration: 2000; Current score (higher is better): -547.7803673440676\n",
|
|
"Iteration: 3000; Current score (higher is better): -547.9805613193807\n",
|
|
"Iteration: 4000; Current score (higher is better): -546.7574874775273\n",
|
|
"Iteration: 5000; Current score (higher is better): -549.5798007672656\n",
|
|
"Iteration: 6000; Current score (higher is better): -545.0354060154496\n",
|
|
"Iteration: 7000; Current score (higher is better): -550.1134504086606\n",
|
|
"Iteration: 8000; Current score (higher is better): -549.9306537114975\n",
|
|
"Iteration: 9000; Current score (higher is better): -550.7075182119111\n",
|
|
"Iteration: 10000; Current score (higher is better): -549.400679551826\n",
|
|
"Simulated Annealing time: 1.94s\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x2a4625bb1d0>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"simulate_casino([1/9, 1/9, 1/9, 2/9, 2/9, 2/9],\n",
|
|
" [1/9, 1/9, 1/9, 2/9, 2/9, 2/9],\n",
|
|
" n=250)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"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.\n",
|
|
"\n",
|
|
"# Conclusion\n",
|
|
"\n",
|
|
"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.\n",
|
|
"\n",
|
|
"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.\n",
|
|
"\n",
|
|
"We can declare at long last: **the mathematicians have again triumphed over the casino**.\n",
|
|
"\n",
|
|
"---"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Justification of Simulated Annealing\n",
|
|
"\n",
|
|
"## Why Simulated Annealing?\n",
|
|
"\n",
|
|
"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 $p_{ij} \\in (0, 1); i, j \\in \\{1, \\ldots, 6\\}$, 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.\n",
|
|
"\n",
|
|
"## Why not something else?\n",
|
|
"\n",
|
|
"This is a fair question. There are two classes of algorithms that can also be used to solve this problem: [Non-linear optimization](https://en.wikipedia.org/wiki/Nonlinear_programming) methods, and the [EM algorithm](https://en.wikipedia.org/wiki/Expectation%E2%80%93maximization_algorithm).\n",
|
|
"\n",
|
|
"1. 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 *incredibly* quickly - far more quickly than any non-linear solver would be able to accomplish. \n",
|
|
"\n",
|
|
"2. The EM Algorithm was originally what I intended to write this blog post with. Indeed, the post was inspired by the [crooked casino](http://web.stanford.edu/class/stats366/hmmR2.html) 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."
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.5.1"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 0
|
|
}
|