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]:
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]:
In [4]:
(p_n / (1 / (n + 1))).simplify()
Out[4]:
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]: