Simulatie met gekoppelde dobbelstenen
Net als in het voorbeeld in de les gooi je met twee dobbelstenen uit twee zakken, en elke zak bevat drie bevooroordeelde dobbelstenen.
bag1 = [[1, 2, 3, 6, 6, 6], [1, 2, 3, 4, 4, 6], [1, 2, 3, 3, 3, 5]]
bag2 = [[2, 2, 3, 4, 5, 6], [3, 3, 3, 4, 4, 5], [1, 1, 2, 4, 5, 5]]
Het verschil is dat de dobbelstenen in de twee zakken gekoppeld zijn: als je de tweede dobbelsteen in bag1 kiest, kies je ook de tweede dobbelsteen in bag2. In elke proef:
- Je kiest willekeurig één paar dobbelstenen uit de twee zakken en gooit ermee
- Succes treedt op als de ogen op
dice1endice2optellen tot acht; anders is het een mislukking
Jouw taak is om de for-lus in de functie roll_paired_biased_dice() af te maken en deze functie te gebruiken om de kansen op succes te berekenen voor elke unieke combinatie van ogen op dice1 en dice2.
Het volgende is al voor je geïmporteerd: random, numpy als np, pandas als pd, seaborn als sns en matplotlib.pyplot als plt.
Deze oefening maakt deel uit van de cursus
Monte Carlo-simulaties in Python
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
def roll_paired_biased_dice(n, seed=1231):
random.seed(seed)
results={}
for i in range(n):
bag_index = random.randint(0, 1)
# Obtain the dice indices
dice_index1 = ____
dice_index2 = ____
# Sample a pair of dice from bag1 and bag2
point1 = ____
point2 = ____
key = "%s_%s" % (point1,point2)
if point1 + point2 == 8:
if key not in results:
results[key] = 1
else:
results[key] += 1
return(pd.DataFrame.from_dict({'dice1_dice2':results.keys(),
'probability_of_success':np.array(list(results.values()))*100.0/n}))