Skip to content

Instantly share code, notes, and snippets.

@lovasoa
Created May 22, 2017 21:41
Show Gist options
  • Save lovasoa/3b68a2f152829eaafed3485a1824bb40 to your computer and use it in GitHub Desktop.
Save lovasoa/3b68a2f152829eaafed3485a1824bb40 to your computer and use it in GitHub Desktop.
St. Petersbourg: Paradoxe de Saint-Pétersbourg
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "",
"signature": "sha256:3dc04344ff69a0f19fe679be247f5539d84cc0500310e30c6c7f0cc5a4043711"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# [Jeu de Saint-Petersbourg](https://fr.wikipedia.org/wiki/Paradoxe_de_Saint-P%C3%A9tersbourg)\n",
"On commence avec une mise de 1\u20ac. On lance une pi\u00e8ce: \n",
"\n",
" * Si on tombe sur pile, on double la mise et on recommence\n",
" * Sinon, on arr\u00eate et on remporte la mise actuelle\n",
" \n",
"### Quelle est l'esp\u00e9rance de gain \u00e0 ce jeu ?\n",
"\n",
"$$ \\sum_{i=0}^{i=\\infty} \\frac{2^i}{2^{i+1}} = \\sum_{i=0}^{i=\\infty} \\frac{1}{2} = \\infty $$\n",
"\n",
"L'esp\u00e9rence du gain est infinie."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import random, math\n",
"def lancer():\n",
" mise = 1\n",
" while random.choice((True, False)):\n",
" mise *= 2\n",
" return mise"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 47
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def n_experiences(n):\n",
" \"\"\"Joue n fois au jeu, et retourne notre gain total.\"\"\"\n",
" return sum(lancer() for i in range(n))/n"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 48
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Que se passe-t-il si on joue un million de fois au jeu ?"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"n_experiences(1000000)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 49,
"text": [
"15.263239"
]
}
],
"prompt_number": 49
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Mince!\n",
"On \u00e9tait cens\u00e9s gagner une somme d\u2019argent infinie, en moyenne !\n",
"\n",
"Et nous n\u2019avons gagn\u00e9 \u00abque\u00bb une dizaine d\u2019euros par lancer en moyenne sur un million de lancer...\n",
"\n",
"### Pourquoi ?\n",
"Essayons de comprendre pourquoi en calculant la probabilit\u00e9 $p_s$ de gagner une somme sup\u00e9rieure ou \u00e9gale \u00e0 $s$ apr\u00e8s un tirage.\n",
"\n",
"Pour gagner une somme sup\u00e9rieure ou \u00e9gale \u00e0 $2^n$ \u20ac, il faut tirer pile plus de $n$ fois de suite, ce qui arrive avec une probabilit\u00e9 de\n",
"$ \\prod_{i=0}^{i=n} \\frac{1}{2} = \\frac 1 {2^n} $.\n",
"\n",
"Donc $$ p_s = \\frac 1 {2^{\\lceil \\log_2{s} \\rceil }} $$\n",
"\n",
"Par exemple, pour gagner 100\u20ac, il faut tirer pile sept fois de suite ($\\lceil \\log_2{100} \\rceil = 7$). Cela nous donne une probabilit\u00e9 de gagner plus de 100\u20ac de:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def p(s):\n",
" return 1/2**math.ceil(math.log2(s))\n",
"\n",
"p(100)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 55,
"text": [
"0.0078125"
]
}
],
"prompt_number": 55
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Moins de 1% de chance..."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment