In [10]:
import numpy as np
import matplotlib.pyplot as plt
In [8]:
%matplotlib inline

Marche aléatoire

In [3]:
from random import random

def freqDroite1(n):
    """Fréquence de marches aléatoires avec exactement 
    1 déplacement vers la droite sur un échantillon de taille n"""
    c = 0
    for i in range(1, n + 1):
        d = 0
        for j in range(1, 5):
            if random() <= 0.6:
                d = d + 1
        if d == 1:
            c = c + 1
    return c / n
In [5]:
## Probabilité d'avoir exactement un déplacement vers la droite
p = 4 * 0.6 * 0.4 ** 3
print(p)
0.15360000000000004
In [32]:
taille_echantillon = np.arange(0, 20001, 100)
In [21]:
taille_echantillon
Out[21]:
array([     0,    500,   1000,   1500,   2000,   2500,   3000,   3500,
         4000,   4500,   5000,   5500,   6000,   6500,   7000,   7500,
         8000,   8500,   9000,   9500,  10000,  10500,  11000,  11500,
        12000,  12500,  13000,  13500,  14000,  14500,  15000,  15500,
        16000,  16500,  17000,  17500,  18000,  18500,  19000,  19500,
        20000,  20500,  21000,  21500,  22000,  22500,  23000,  23500,
        24000,  24500,  25000,  25500,  26000,  26500,  27000,  27500,
        28000,  28500,  29000,  29500,  30000,  30500,  31000,  31500,
        32000,  32500,  33000,  33500,  34000,  34500,  35000,  35500,
        36000,  36500,  37000,  37500,  38000,  38500,  39000,  39500,
        40000,  40500,  41000,  41500,  42000,  42500,  43000,  43500,
        44000,  44500,  45000,  45500,  46000,  46500,  47000,  47500,
        48000,  48500,  49000,  49500,  50000,  50500,  51000,  51500,
        52000,  52500,  53000,  53500,  54000,  54500,  55000,  55500,
        56000,  56500,  57000,  57500,  58000,  58500,  59000,  59500,
        60000,  60500,  61000,  61500,  62000,  62500,  63000,  63500,
        64000,  64500,  65000,  65500,  66000,  66500,  67000,  67500,
        68000,  68500,  69000,  69500,  70000,  70500,  71000,  71500,
        72000,  72500,  73000,  73500,  74000,  74500,  75000,  75500,
        76000,  76500,  77000,  77500,  78000,  78500,  79000,  79500,
        80000,  80500,  81000,  81500,  82000,  82500,  83000,  83500,
        84000,  84500,  85000,  85500,  86000,  86500,  87000,  87500,
        88000,  88500,  89000,  89500,  90000,  90500,  91000,  91500,
        92000,  92500,  93000,  93500,  94000,  94500,  95000,  95500,
        96000,  96500,  97000,  97500,  98000,  98500,  99000,  99500,
       100000])
In [39]:
freqDroite1Vect = np.vectorize(freqDroite1)
In [40]:
plt.scatter(taille_echantillon[1:], freqDroite1Vect(taille_echantillon[1:]), s=4)
plt.xlabel("Taille de l'échantillon")
plt.ylabel("Fréquence")
plt.savefig("marche-aleatoire.pdf")

Probleme des partis

In [1]:
def proba_parti(a, b):
    """Probabilité que le joueur 1 gagne s'il lui reste
    a points à marquer et b points pour le joueur b"""
    if a == 0:
        return 1
    if b == 0:
        return 0
    if a == b:
        return 0.5
    return 0.5 * proba_parti(a - 1, b) + 0.5 * proba_parti(a, b - 1)
In [2]:
proba_parti(1, 3)
Out[2]:
0.875
In [3]:
7/8
Out[3]:
0.875