Đăng nhậpDùng miễn phí

Tin học 12 · Chủ đề 7 (CS). Giải quyết vấn đề với sự trợ giúp của máy tính

Bài 29. Mô phỏng trong giải quyết vấn đề (CS)

Nhiều tình huống thực tế không thể hoặc rất tốn kém nếu thử trực tiếp. Máy tính giúp ta xây dựng mô hình rồi chạy mô hình đó để quan sát, dự đoán kết quả trước khi ra quyết định.

Nhớ nhanh

1. Khái niệm mô phỏng

Định nghĩa

Mô phỏng là việc thiết lập một mô hình cho hệ thống hoặc hiện tượng thực tế, sau đó chạy mô hình trên máy tính để thu thập dữ liệu, quan sát hành vi và rút ra kết luận, thay vì thực hiện trực tiếp trên hệ thống thật.

Chẳng hạn, thay vì tung đồng xu thật 1 000 lần để xem tỉ lệ sấp - ngửa, ta viết chương trình sinh kết quả ngẫu nhiên nhiều lần rồi thống kê.

Định nghĩa Vai trò của mô phỏng
  • Tiết kiệm chi phí và thời gian so với thực nghiệm thực tế.
  • An toàn khi thử nghiệm có thể gây nguy hiểm hoặc thất thoát lớn.
  • Lặp lại được nhiều lần với các tham số khác nhau để so sánh kịch bản.
  • Hỗ trợ dự báo, phân tích trước khi thực hiện ở quy mô lớn.
Khi nào nên dùng mô phỏng?
  • Thực nghiệm trực tiếp quá đắt đỏ, cần nhiều thời gian hoặc thiết bị lớn.
  • Thực hiện thật có tính nguy hiểm, phá hoại hoặc không phù hợp về đạo đức.
  • Sự kiện chỉ xảy ra một lần nên không thể thử lại (thay đổi chính sách, mở rộng thị trường).
  • Cần thử nhiều cách bố trí, cấu hình trước khi chọn phương án tối ưu.

2. Các bước mô phỏng trên máy tính

Quy trình chung
  1. 1.
    Xác định rõ vấn đề và mục tiêu của mô hình mô phỏng.
  2. 2.
    Thu thập thông tin, dữ liệu thực tế; chọn các tham số ngẫu nhiên cần sử dụng.
  3. 3.
    Xây dựng mô hình: mô tả cách thức vận hành của hệ thống bằng các bước xử lí.
  4. 4.
    Lập trình và cho chạy mô hình nhiều lần; thu thập kết quả thực nghiệm.
  5. 5.
    Phân tích, thống kê kết quả; rút ra quy luật hoặc dự báo; đánh giá mức độ tin cậy của mô hình.

3. Mô phỏng với Python

Trong Python, thư viện (mô-đun) random cung cấp sẵn các hàm sinh số ngẫu nhiên.

Hàm sinh số ngẫu nhiên
  • random.random(): trả về một số thực trong khoảng [0;1)[0;1).
  • random.randint(a,b): trả về một số nguyên trong đoạn [a;b][a;b], tức là từ a đến b, cả a và b đều có thể xuất hiện.

Trước khi gọi các hàm trên, phải có dòng import random.

Ví dụ 1

Viết chương trình mô phỏng tung đồng xu 1 000 lần; in ra số lần được mặt sấp và tỉ lệ phần trăm tương ứng.

Giả sử random.randint(0,1) ra 0 được coi là mặt sấp. Ta dùng biến dem để đếm trong vòng lặp.

import random
N = 1000
dem = 0
for lan in range(N):
    if random.randint(0, 1) == 0:
        dem = dem + 1
print("So lan sap:", dem)
print("Ti le %:", round(100 * dem / N, 2))

Kết quả in ra là một con số xấp xỉ gần 500 lần sấp, tỉ lệ gần 50%. Số liệu có thể thay đổi mỗi lần chạy vì đây là thực nghiệm ngẫu nhiên.

Ví dụ 2

Mô phỏng gieo xúc xắc 6 mặt 2 000 lần, đếm số lần xuất hiện của từng mặt từ 1 đến 6.

Dùng một danh sách gồm 6 ô để đếm tần suất các mặt. Sau mỗi lần gieo, tăng đúng ô tương ứng với mặt vừa nhận được.

import random
lan = 2000
dem = [0, 0, 0, 0, 0, 0]
for i in range(lan):
    mat = random.randint(1, 6)
    dem[mat - 1] += 1
for k in range(6):
    print("Mat", k + 1, ":", dem[k])

Nhận xét: với 2 000 lần gieo, mỗi mặt xuất hiện khoảng 333 lần (có chênh lệch nhỏ mỗi lần chạy). Số lần lặp càng lớn thì tần suất (tỉ lệ) xuất hiện của mỗi mặt thường càng gần xác suất lý thuyết 1/61/6.

Lưu ý
  • Quên dòng import random sẽ gây lỗi NameError.
  • Không nhầm random.randint(a,b) là chỉ cho các số nhỏ hơn b; thực chất nó cho cả b.
  • Kết quả mô phỏng là xác suất thực nghiệm, chỉ xấp xỉ xác suất lý thuyết. Số lần lặp càng nhỏ thì chênh lệch càng lớn.
  • Mô hình chỉ phù hợp trong phạm vi các giả định đã đặt ra, không thay thế tuyệt đối mọi thực nghiệm thật.

4. Câu hỏi ôn tập

Câu hỏi 1

Trình bày khái niệm mô phỏng và nêu hai ví dụ áp dụng mô phỏng trong đời sống hoặc sản xuất.

Gợi ý trả lời

Mô hình hóa hệ thống rồi cho chạy trên máy tính để quan sát thay vì làm trực tiếp; ví dụ: dự báo thời tiết, mô phỏng giao thông, thử nghiệm an toàn phương tiện.

Câu hỏi 2

Trong Python, lệnh random.randint(2,5) có thể cho ra những giá trị nào?

Gợi ý trả lời

Các số nguyên 2, 3, 4 hoặc 5; cả hai đầu mút đều có thể xuất hiện.

Câu hỏi 3

Mô tả thuật toán mô phỏng tung hai đồng xu cùng lúc, sau đó in ra tần suất xuất hiện trường hợp cả hai mặt đều ngửa.

Gợi ý trả lời

Cho mỗi đồng xu sinh một giá trị ngẫu nhiên 0 hoặc 1; lặp lại nhiều lần, đếm các lần cả hai đều mang giá trị quy ước cho mặt ngửa; cuối cùng tính tỉ lệ phần trăm.

Gặp bài khó? Chụp ảnh để CEAO giảiAI giải từng bước, đề kiểm tra theo bài, thẻ ghi nhớ. Đăng ký miễn phí.
Thử ngay