In [1]:
import random

def aros(nifer_geifr=2):
    """Ffwythiant i efelychu chwarae'r gem os ydyn yn aros"""
    drysau = ['Car'] + nifer_geifr * ['Gafr']
        
    dewis_gwreiddiol = random.choice(drysau)  # gwneud dewis
    return dewis_gwreiddiol == 'Car'

def newid(nifer_geifr=2):
    """Ffwythiant i efelychu chwarae'r gem os ydyn yn newid"""
    drysau = ['Car'] + nifer_geifr * ['Gafr']
    
    dewis_gwreiddiol = random.choice(drysau)  # gwneud dewis
    
    drysau.remove(dewis_gwreiddiol)  # Newid: cael gwared a'r dewis gwreiddiol
    drysau.remove('Gafr')  # Mae'r cyflwynwr yn dangos gafr i ni
    
    dewis_newydd = random.choice(drysau)   # Rydym yn dewis yr un opsiwn sydd ar ol
            
    return dewis_newydd == 'Car'

Gwirio'r tebygolrwyddau gwreiddiol:


In [2]:
ailadroddiadau = 10000
random.seed(0)
tebyg_ennill_aros = sum([aros() for ail in range(ailadroddiadau)]) / ailadroddiadau
tebyg_ennill_newid = sum([newid() for ail in range(ailadroddiadau)]) / ailadroddiadau
tebyg_ennill_aros, tebyg_ennill_newid


Out[2]:
(0.3346, 0.6636)

Gwirio'r fformiwla mathemategol:


In [3]:
import sympy as sym
n = sym.symbols('n')
p_n = (1 - 1 / (n + 1)) * (1 / (n - 1))
p_n.simplify()


Out[3]:
$\displaystyle \frac{n}{n^{2} - 1}$

In [4]:
(p_n / (1 / (n + 1))).simplify()


Out[4]:
$\displaystyle \frac{n}{n - 1}$

Ffwythiant ar gyfer y cymhareb:


In [5]:
def cymhareb(ailadroddiadau=50000, nifer_geifr=2):
    """Cael cymhareb y tebygolrwyddau o ennill"""
    tebyg_ennill_aros = sum([aros(nifer_geifr=nifer_geifr) 
                          for ail in range(ailadroddiadau)]) / ailadroddiadau
    tebyg_ennill_newid = sum([newid(nifer_geifr=nifer_geifr) 
                           for ail in range(ailadroddiadau)]) / ailadroddiadau
    return tebyg_ennill_newid / tebyg_ennill_aros

Tynnwch lun y plot:


In [6]:
import matplotlib.pyplot as plt
random.seed(0)
geifr = range(2, 25 + 1)
cymarebau = [cymhareb(nifer_geifr=n) for n in geifr]
cymhareb_theoretig = [(n / (n - 1)) for n in geifr]

plt.figure()
plt.scatter(geifr, cymarebau, label="efelychiadau")
plt.plot(geifr, cymhareb_theoretig, color="C1", label="theoretig")
plt.xlabel("Nifer o geifr")
plt.ylabel("Cymhareb")
plt.legend()
plt.savefig("simulated_v_expected_ratio_of_win_probability.pdf");

In [7]:
sym.limit((p_n / (1 / (n + 1))), n, sym.oo)


Out[7]:
$\displaystyle 1$