{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Appendix: An interactive Jupyter notebook session to accompany: \"Penney's game odds from no-arbitrage\" by Miller, J.B. (2019)\n", "\n", "\n", "\n", "see https://github.com/joshua-benjamin-miller/penneysgame for .ipynb and .py files.\n", "\n", "\n", "\n", "This interactive notebook explores an algorithm that solves a generalized version of Penney's pattern-matching game for a q-sided die ($q\\geq 3$), with potentially unequal probabilities.\n", "\n", "The solution implements a generalized version of Conway's leading number algorithm , and cross-validates it via simulation.\n", "\n", "References\n", "1. Miller, J.B. (2019) \"Penney's game odds from no-arbitrage\", OSF [PDF Download](https://osf.io/47u5a/)\n", "2. Li, Shuo-Yen Robert. (1980) A martingale approach to the study of occurrence of sequence patterns in repeated experiments.\" _the Annals of Probability_, 8(6) 1171-1176. [PDF Download](https://projecteuclid.org/euclid.aop/1176994578)\n", "3. Guibas, L. J. & Odlyzko, A. M. (1981), \"String overlaps, pattern matching, and nontransitive games\",\n", " _Journal of Combinatorial Theory, Series A_ 30(2), 183--208. [PDF Download](https://core.ac.uk/download/pdf/81142890.pdf)\n", "2. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Third party modules and directory check" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import time\n", "import os #for benchmarking\n", "import numpy as np\n", "#in case we need to update user-defined code e.g. importlib.reload(diffP)\n", "import importlib\n" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "C:\\Users\\Miller\\Dropbox\\josh\\work\\projects\\Patterns\\python\n", "conway.py\n" ] } ], "source": [ "current_dir=os.getcwd()\n", "print(current_dir)\n", "for file in os.listdir(current_dir):\n", " if file[-3:]=='.py':\n", " print(file)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Desciption of code in \"conway.py\"" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Locked and loaded\n" ] } ], "source": [ "import conway #The programs live here\n", "importlib.reload(conway)\n", "#help(conway)\n", "print('Locked and loaded')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Inspect functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Let's test the generalized Conway leading number\n", "\n", "note: In the speccial case of a fair coin flip, this is $2\\times \\text{Conway Leading Number}$\n", "\n", "Conway leading number is an (asymmetric) measure of overlap between two patterns A and B.\n", "\n", "AB measures how the leading numbers of B overlap with the trailing numbers of A, as B is shifted to the right (assuming B is not a subpattern of A)\n", "\n", "Here is the function:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on function payoff_to_B_bettors_if_A_occurs_first in module conway:\n", "\n", "payoff_to_B_bettors_if_A_occurs_first(A, B, alphabet)\n", " (string, string, dictionary)-> (float)\n", " Calculates the fair payoff to those betting on characters according \n", " to pattern B, if pattern A occurs first.\n", " \n", " For example:\n", " >>>A='THH'\n", " >>>B='HHH'\n", " >>>alphabet={'T':.5, 'H':.5})\n", " >>>AB=payoff_to_B_bettors_if_A_occurs_first(A,B,alphabet)\n", " Then in this case AB=4+2=6 as B betters who come in at T-1 win twice, \n", " and those that come in at T win once.\n", "\n" ] } ], "source": [ "help(conway.payoff_to_B_bettors_if_A_occurs_first)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If A=THH comes first, how much does a player who, on each trial, initiates a asequence of bets on characters according to B=HHH, get paid?\n", "\n", "The players that arrive at time T-1 and time T walk out with \\$4 and \\$2 respectively, for a total of \\$6\n" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6.0\n" ] } ], "source": [ "distribution={'H':.5, 'T':.5}\n", "A = \"THH\"\n", "B = \"HHH\"\n", "print(conway.payoff_to_B_bets_if_A_occurs_first(A, B, distribution))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Let's test the generalized Conway leading number algorithm\n", "\n", "Here is the function:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on function oddsAB in module conway:\n", "\n", "oddsAB(A, B, alphabet)\n", " (string, string, dictionary)-> [list]\n", " returns odds against pattern A preceding pattern B\n", " odds[0] = \"chances against A\"\n", " odds[1] = \"chances in favor of A\"\n", " \n", " note: odds= 2* Conway's odds; see Miller (2019) for proof\n", "\n" ] } ], "source": [ "help(conway.oddsAB)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What are the odds that that pattern A=HTH precedes pattern B=TTH?\n", "\n", "In the case that A occurs before B, i.e we compare the trailing characters of $A\\cdot$\n", "* $AA=8+0+2=10$ (the $A$-bets initiated at $T-2$ and $T$ are winners)\n", "* $AB=0+0+0=0$ (the $B$-bets never win)\n", "\n", "In the case that B occurs before A, i.e we compare the trailing characters of $B\\cdot$\n", "* $BB=8+0+0=8$ (the $B$-bet inititiated at $T-2$ is a winner)\n", "* $BA=0+0+2=2$ (the $A$-bet initiated at $T$ is a winner)\n", "\n", "so odds against $A$ occuring before $B$ are ${AA-AB}:{BB-BA} = 10:6$, or $5:3$\n", "\n", "this translates to a probability that $A$ occurs first equal to $3/8$\n", "\n", "Let's check this below:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "odds against A = [chances against, chances in favor] = [10.0, 6.0]\n", "probability A occurs before B = 0.375\n" ] } ], "source": [ "distribution={'H':.5, 'T':.5}\n", "A = \"HTH\"\n", "B = \"TTH\"\n", "print('odds against A = [chances against, chances in favor] = ',conway.oddsAB(A, B, distribution))\n", "\n", "print('probability A occurs before B = ', conway.probAB(A, B, distribution))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cross-Validating the code.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Replicating original Penney's Game odds (patterns of length 3)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's create the table, the probability the row pattern comes before the column pattern, and cross-validate with table from Gardner\n" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on function all_patterns in module conway:\n", "\n", "all_patterns(j, alphabet)\n", " recusively builds all patterns of length j from alphabet\n", " note: before calling must initialize following two lists:\n", " >>>k=3\n", " >>>list_pattern=['-']*k\n", " >>>patterns = []\n", "\n", "all patterns of length 3 = ['HHH', 'HHT', 'HTH', 'HTT', 'THH', 'THT', 'TTH', 'TTT']\n", "----------------------------------------------------------------------\n", "\tHHH\tHHT\tHTH\tHTT\tTHH\tTHT\tTTH\tTTT\n", "HHH\t\t1 / 2\t2 / 5\t2 / 5\t1 / 8\t5 / 12\t3 / 10\t1 / 2\n", "HHT\t1 / 2\t\t2 / 3\t2 / 3\t1 / 4\t5 / 8\t1 / 2\t7 / 10\n", "HTH\t3 / 5\t1 / 3\t\t1 / 2\t1 / 2\t1 / 2\t3 / 8\t7 / 12\n", "HTT\t3 / 5\t1 / 3\t1 / 2\t\t1 / 2\t1 / 2\t3 / 4\t7 / 8\n", "THH\t7 / 8\t3 / 4\t1 / 2\t1 / 2\t\t1 / 2\t1 / 3\t3 / 5\n", "THT\t7 / 12\t3 / 8\t1 / 2\t1 / 2\t1 / 2\t\t1 / 3\t3 / 5\n", "TTH\t7 / 10\t1 / 2\t5 / 8\t1 / 4\t2 / 3\t2 / 3\t\t1 / 2\n", "TTT\t1 / 2\t3 / 10\t5 / 12\t1 / 8\t2 / 5\t2 / 5\t1 / 2\t\n", "----------------------------------------------------------------------\n" ] } ], "source": [ "from fractions import Fraction\n", "\n", "pH = .5\n", "pT = 1-pH\n", "distribution={'H':pH, 'T':pT}\n", "\n", "k = 3\n", "#initialize the globals within the module\n", "conway.list_pattern=['-']*k\n", "conway.patterns = []\n", "\n", "#build the patterns\n", "help(conway.all_patterns)\n", "conway.all_patterns(k,distribution)\n", "\n", "patterns = conway.patterns\n", "\n", "print(\"all patterns of length\",k,\"= \",patterns)\n", "\n", "\n", "row = 0\n", "print(\"-\" * 70)\n", "print(\"\", end='\\t')\n", "print(*patterns, sep='\\t')\n", "\n", "while row < 8:\n", " col = 0\n", " print(patterns[row],end='\\t')\n", " while col <= 7:\n", " r='\\t'\n", " if col ==7:\n", " r='\\n'\n", " if patterns[row]==patterns[col]:\n", " print('', end=r) \n", " else:\n", " o=conway.oddsAB(patterns[row],patterns[col], distribution)\n", " F = Fraction(int(o[1]),int(o[0]+o[1]))\n", " N = F.numerator\n", " D = F.denominator\n", " print(N,\"/\",D,end=r)\n", " col += 1\n", " row += 1\n", "print(\"-\" * 70)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Gardner's table (they match):" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\"drawing\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cross-validate the odds function by simulation\n", "\n", "here is the simulation function:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on function simulate_winrates_penney_game in module conway:\n", "\n", "simulate_winrates_penney_game(A, B, alphabet, number_of_trials)\n", " (string, string, dictionary, integer)-> (list)\n", " Play generalized Penney's game and calculate how often\n", " pattern A precedes pattern B, and vice versa\n", "\n" ] } ], "source": [ "help(conway.simulate_winrates_penney_game)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cross-validate the simple case" ] }, { "cell_type": "code", "execution_count": 258, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Pr(A" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "k = 3\n", "#initialize the globals within the module\n", "conway.list_pattern=['-']*k\n", "conway.patterns = []\n", "\n", "#build the patterns\n", "conway.all_patterns(k,distribution)\n", "patterns=conway.patterns\n", "\n", "pHs = [i/100 for i in range(1,100)]\n", "\n", "min_prob_each_pattern = [] \n", "\n", "#plt.gca().set_prop_cycle(None)\n", "\n", "for pH in pHs:\n", " pT = 1-pH\n", " distribution={'H':pH, 'T':pT}\n", " \n", " min_probs = []\n", " for A in patterns:\n", " probABs = []\n", " for B in patterns:\n", " if A != B:\n", " probABs.append(conway.probAB(A,B,distribution))\n", " else:\n", " probABs.append(None)\n", "\n", " min_probAB = min(p for p in probABs if p is not None)\n", " min_probs.append(min_probAB)\n", " min_prob_each_pattern.append(min_probs)\n", " \n", "\n", "#plt.figure(figsize=(8, 6),facecolor=\"white\") \n", "\n", "#don't include gray borders\n", "plt.figure(facecolor=\"white\")\n", "#plt.style.use('grayscale')\n", "\n", "#don't incude negative x-axis\n", "plt.xlim(0, 1)\n", "\n", "\n", "\n", "#plot each graph\n", "i = 0\n", "for pattern in patterns:\n", " \n", " #make list x/y-values for plotting\n", " min_probs = [min_prob_each_pattern[j][i] for j in range(len(pHs)) ]\n", " plt.plot(pHs,min_probs,label=pattern)\n", " i +=1\n", "\n", "\n", "#plot axis labels\n", "#plt.ylabel('Expected Proportion')\n", "#plt.xlabel('Number of shots')\n", "\n", "#plot reference lines\n", "plt.plot([0, 100], [.5, .5], 'k--',lw=.75)\n", "\n", "#plot legend\n", "plt.legend(bbox_to_anchor=(1, 1), loc=2,prop={'size': 8})\n", "\n", "\n", "#plot axis labels\n", "plt.ylabel('Probability wins worst match-up')\n", "plt.xlabel('Probability of Heads')\n", "\n", "\n", "#save figure\n", "filename = 'win_worst_case_'+str(k)+'.pdf'\n", "plt.savefig(filename, bbox_inches=\"tight\"); \n", "\n", "#plt.axis([0, 6, 0, 20])\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What is the expected waiting time for the game to end given the first mover's strategy (when second mover best responds) vs. if the first mover were waiting alone for the pattern." ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "#help(conway)\n", "\n", "#Difference in waiting time for each pattern, as a function of probability.\n", "\n", "k = 3\n", "#initialize the globals within the module\n", "conway.list_pattern=['-']*k\n", "conway.patterns = []\n", "\n", "#build the patterns\n", "pH =.5\n", "pT = 1-pH\n", "distribution={'H':pH, 'T':pT}\n", "conway.all_patterns(k,distribution)\n", "patterns=conway.patterns\n", "\n", "pHs = [i/1000 for i in range(300,701)]\n", "#print(pHs)\n", "diff_wait_time = []\n", "\n", "#plt.gca().set_prop_cycle(None)\n", "\n", "for pH in pHs:\n", " pT = 1-pH\n", " distribution={'H':pH, 'T':pT}\n", "\n", " \n", "\n", " diff_waiting_time_A = []\n", " for A in patterns:\n", " probABs = []\n", " for B in patterns:\n", " if A != B: \n", " probABs.append(conway.probAB(A,B,distribution))\n", " else:\n", " probABs.append(None)\n", "\n", " \n", "\n", " waiting_time_A = conway.expected_waiting_time(A,A,distribution) \n", " \n", " #in case of times\n", " min_probAB = min(p for p in probABs if p is not None)\n", " min_indices = [i for i in range(len(probABs)) if probABs[i]==min_probAB]\n", " waiting_times_AminB =[]\n", " for i in min_indices:\n", " waiting_times_AminB.append(conway.expected_waiting_time(A,patterns[i],distribution))\n", " \n", " waiting_time_AB = min(waiting_times_AminB)\n", " \n", " diff_waiting_time_A.append(waiting_time_AB-waiting_time_A)\n", " \n", " diff_wait_time.append(diff_waiting_time_A)\n", "\n", "#print(wait_time_pairs)\n", "\n", "\n", "#plt.figure(figsize=(8, 6),facecolor=\"white\") \n", "\n", "#don't include gray borders\n", "#plt.figure(facecolor=\"white\")\n", "#plt.style.use('grayscale')\n", "\n", "#don't incude negative x-axis\n", "#plt.xlim(0, 50)\n", "\n", "\n", "\n", "#plot each graph\n", "i = 0\n", "#plot each graph\n", "i = 0\n", "for pattern in patterns:\n", " \n", " #make list x/y-values for plotting\n", " y = [diff_wait_time[j][i] for j in range(len(pHs)) ]\n", " plt.plot(pHs,y,label=pattern)\n", " i +=1\n", " \n", " \n", "\n", "\n", "#plot axis labels\n", "#plt.ylabel('Expected Proportion')\n", "#plt.xlabel('Number of shots')\n", "\n", "#plot reference lines\n", "plt.plot([.3, .7], [0, 0], 'k--',lw=.75)\n", "\n", "#plot legend\n", "plt.legend(bbox_to_anchor=(1, 1), loc=2,prop={'size': 8})\n", "\n", "\n", "#plot axis labels\n", "plt.ylabel('E[time game ends] - E[time of pattern]')\n", "plt.xlabel('Probability of Heads')\n", "\n", "\n", "#save figure\n", "filename = 'waiting_time'+str(k)+'.pdf'\n", "plt.savefig(filename, bbox_inches=\"tight\"); " ] } ], "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.6.4" } }, "nbformat": 4, "nbformat_minor": 2 }