Mô Phỏng Monte Carlo với NumPy: Tung Đồng Xu Hiệu Suất Cao
Monte Carlo là phương pháp mô phỏng xác suất thông qua các thử nghiệm ngẫu nhiên. Để cải thiện tốc độ tính toán, ta sử dụng NumPy, thư viện tối ưu cho xử lý dữ liệu lớn.
🔹 Ý tưởng mô phỏng
- Tạo 10 triệu kết quả tung đồng xu bằng NumPy.
- Đếm số lần xuất hiện của mỗi kết quả (
Sấp - S
hoặcNgửa - N
). - So sánh xác suất thực tế với lý thuyết (50% - 50%).
🔹 Code mô phỏng Monte Carlo với NumPy
import numpy as np # Cài đặt NumPy
# Định nghĩa số lần gieo đồng xu
num_throws = 10_000_000 # 10 triệu lần
# Sử dụng NumPy để tạo mảng ngẫu nhiên gồm 'S' hoặc 'N'
outcomes = np.random.choice(['S', 'N'], num_throws) # Chọn ngẫu nhiên
# Đếm số lần xuất hiện của mỗi kết quả
values, counts = np.unique(outcomes, return_counts=True)
# Hiển thị kết quả
for value, count in zip(values, counts):
print(f"{value}: {count} lần ({(count / num_throws) * 100:.2f}%)")
🔹 Kết quả mong đợi Sau khi chạy mô phỏng với 10 triệu lần tung, ta mong đợi:
✅ Xác suất lý thuyết của mỗi mặt đồng xu là 50%. ✅ Biến động nhỏ nhưng khi số lần tung lớn, xác suất sẽ hội tụ về 50%. ✅ Tốc độ nhanh hơn đáng kể so với cách sử dụng random.choice() trong vòng lặp Python.
Ví dụ kết quả có thể như sau: S: 4,999,320 lần (49.99%) N: 5,000,680 lần (50.01%) Như vậy, NumPy giúp ta mô phỏng Monte Carlo hiệu suất cao, phù hợp với bài toán lớn hơn như mô phỏng tài chính, vật lý, AI.
🔹 So sánh với Python random.choice()
Phương pháp | Số lần tung | Thời gian chạy |
---|---|---|
random.choice() (vòng lặp) | 10 triệu | ~10 giây |
numpy.random.choice() | 10 triệu | ~0.5 giây |
🔹 Nhận xét
✅ numpy.random.choice()
nhanh hơn gấp 20 lần so với random.choice()
thông thường.
✅ NumPy giúp tối ưu hiệu suất khi làm việc với số lượng lớn phép thử Monte Carlo. 🚀
💡 Bạn có thể thử tăng num_throws
lên 100 triệu hoặc 1 tỷ để kiểm tra độ chính xác cao hơn! 🚀