Mô phỏng cặp xúc xắc
Tương tự ví dụ trong bài học, bạn sẽ tung hai viên xúc xắc từ hai túi, và mỗi túi chứa ba viên xúc xắc bị lệch.
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]]
Điểm khác biệt là các viên xúc xắc ở hai túi được ghép cặp: nếu bạn chọn viên thứ hai trong bag1, bạn cũng sẽ chọn viên thứ hai trong bag2. Ở mỗi lượt thử:
- Bạn chọn ngẫu nhiên một cặp xúc xắc từ hai túi và tung chúng
- Thành công nếu điểm trên
dice1vàdice2cộng lại bằng tám; nếu không thì thất bại
Nhiệm vụ của bạn là hoàn thiện vòng lặp for trong hàm roll_paired_biased_dice() và dùng hàm này để tính xác suất thành công cho từng tổ hợp điểm khác nhau trên dice1 và dice2.
Các thư viện sau đã được nhập sẵn cho bạn: random, numpy là np, pandas là pd, seaborn là sns và matplotlib.pyplot là plt.
Bài tập này là một phần của khóa học
Mô phỏng Monte Carlo với Python
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
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}))