Chương II. Giới thiệu về phương pháp Monte Carlo
2.2. Tích phân Monte Carlo
Trên đây, chúng ta đã nêu ra một ví dụ đơn giản về tính số π bằng phương pháp thử và sai. Trong phần này, chúng ta tìm hiểu một phương pháp chính xác và hệ thống hơn. Phương pháp này đưa bài toán tính số π về bài toán tính tích phân rồi tích tích phân đó bằng cách ước lượng giá trị trung bình của hàm trong vùng lấy tính phân.
Diện tích của hình tròn có thể tính được bằng tích phân:
với a là bán kính của hình tròn. Như vậy diện tích này có thể ước lượng được bằng phương pháp số truyền thống như phương pháp hình thang, phương pháp Simpson hay các phương pháp tất định khác có độ chính xác cao hơn. Ngoài các phương pháp kể trên, tích phân còn có thể lấy bằng tích của giá trị trung bình của hàm số trong khoảng lấy tích phân và độ lớn (chiều dài) của khoảng lấy tích phân.
Giá trị trung bình của hàm số f(x) trong khoảng từ a đến b có thể ước lượng bằng việc sử dụng một tập số ngẫu nhiên {xi} phân bố đều trong khoảng [a, b]. Từ tập hợp đó chúng ta có thể ước lượng giá trị trung bình:
Giá trị tích phân khi đó ước lượng bằng:
với N là tổng số điểm ngẫu nhiên được sử dụng.
Diện tích của đường tròn được ước lượng theo công thức:
Và như vậy ta có thể ước lượng giá trị của số pi là
Phương pháp Monte Carlo có thể dễ dàng mở rộng cho tích phân nhiều lớp. Giá trị của tích phân nhiều lớp được ước lượng bằng tích của 2 số hạng:
- Giá trị trung bình của hàm số trong vùng cần tính.
- Kích thước của vùng cần tính tích phân (độ dài đoạn thẳng trong tích phân 1 lớp, diện tích trong tích phân 2 lớp, thể tích trong tích phân 3 lớp và tương tự cho tích phân nhiều lớp hơn)
Ví dụ tích phân 3 lớp:
2.3. Ƣớc lƣợng sai số
Độ lệch chuẩn của ước lượng trung bình một đại lượng trong Monte Carlo:
là
Với trường hợp N lần thử độ lệch chuẩn sẽ là:
Từ công thức tính sai số ở trên ta thấy rằng sai số trong tính tích phân ước lượng tỉ lệ thuận với , độc lập với số lớp tích phân, vì thế phương pháp Monte Carlo sẽ ưu việt hơn các phương pháp tính tích phân truyền thống khi số lớp tích phân càng lớn.
Trên đây là ước lượng độ lệch chuẩn khi N giá trị số liệu là độc lập với nhau, khi N giá trị này phụ thuộc vào nhau, chúng ta phải sử dụng các phương pháp khác để tính đến sự tương quan của dữ liệu vào ước lượng của độ lệch chuẩn như kết hợp dữ liệu, Jackknife, Bootstrap.
2.4. Số ngẫu nhiên Tạo số giả ngẫu nhiên
Ta có thể tạo được các tập hợp nhỏ số ngẫu nhiên từ các quá trình ngẫu nhiên trong tự nhiên (như quá trình bức xạ hạt nhân) hay đời sống hàng ngày (như tập hợp kết quả xổ số mở thưởng hàng ngày). Tuy nhiên các tập hợp số ngẫu nhiên này thường quá nhỏ để sử dụng trong một bài toán Monte Carlo điển hình với yêu cầu hàng tỉ số ngẫu nhiên.
Có một chương trình tạo số ngẫu nhiên chất lượng cao là việc quan trọng bậc nhất để đảm bảo một chương trình mô phỏng Monte Carlo hoạt động tốt. Số ngẫu nhiên được tạo ra từ một thuật toán nào đó không đảm bảo hoàn toàn được tính ngẫu nhiên vì thuật toán là xác định và có thể lặp lại được. Vì thế các số ngẫu nhiên tạo ra trên máy tính được gọi là các số giả ngẫu nhiên. Một chương trình tạo số giả ngẫu nhiên điển hình thường tạo ra các số ngẫu nhiên nguyên nhận giá trị từ 0 cho đến giá trị lớn nhất có thể được lưu trong máy tính. Mỗi chương trình tạo số ngẫu nhiên đều phải được khởi tạo với một hoặc một tập hợp giá trị bắt đầu, với mỗi tập hợp giá trị khởi tạo ta có một tập hợp số ngẫu nhiên riêng biệt. Một chương trình tạo số ngẫu nhiên phải thỏa mãn các tính chất quan trọng sau đây:
- Tính lặp lại: sử dụng cùng một giá trị khởi tạo có thể thu được cùng một chuỗi
- Tính ngẫu nhiên: các số ngẫu nhiên trong tập hợp phân bố đồng nhất và không phụ thuộc vào nhau.
- Có chu kì dài: các chương trình tạo số ngẫu nhiên phải có chu kì đủ lớn để phục vụ các nghiên cứu sử dụng nhiều số ngẫu nhiên.
- Chất lượng chuỗi số ngẫu nhiên không phụ thuộc nhiều vào giá trị khởi tạo.
- Đủ nhanh để tạo ra một tập hợp số ngẫu nhiên trong thời gian nhất định.
Trong các thư viện chuẩn, chúng ta thường dùng thuật toán đồng dư tuyến tính để tạo ra chuỗi số ngẫu nhiên tuân theo phân bố đều. Chương trình này sử dụng các hằng số a, c, m để tạo chuỗi ngẫu nhiên là số nguyên phân bố đều trong khoảng từ 0 đến m-1:
X i+1 = ( aX i + c )mod m
Một tập hợp số ngẫu nhiên thực có thể tạo được bằng cách chia cả tập hợp số nguyên trên cho một hằng số phù hợp. Ví dụ chia cho m ta được tập số thực nằm trong khoảng [0,1). Chu kỳ lớn nhất của chuỗi ngẫu nhiên là m, vì vậy các hằng số a, c phải được chọn cẩn thận để đảm bảo chuỗi số có chu kỳ lớn nhất.
Thuật toán tuyến tính đồng dư tuyến tính là thuật toán đơn giản nhất để tạo số ngẫu nhiên với chất lượng vừa phải sử dụng ít tài nguyên máy tính. Khi cần có các tập hợp số ngẫu nhiên có chất lượng cao, chúng ta phải sử dụng các phương pháp tốt hơn với nhiều tài nguyên tính toán hơn như thuật toán Fibonacci, thuật toán Mersenne Twister, các thuật toán kết hợp.
Phân bố xác suất
Gọi P(x)dx là xác xuất tìm thấy số ngẫu nhiên nằm trong khoảng (x, x+dx), P(x) được gọi là hàm mật độ xác suất. P(x)=0 tương ứng với không có khả năng tìm thấy x, và P(x)=1 tương ứng với khả năng chắc chắn tìm thấy x. Hàm mật độ xác suất P(x) thỏa mãn điều kiện chuẩn hóa sau:
Vậy xác suất tìm thấy số ngẫu nhiên nằm trong khoảng [a, b] là .
Cho một tập hợp số ngẫu nhiên tuân theo phân bố đều trong một khoảng nào đó, có hai cách cơ bản để tạo một tập hợp số ngẫu nhiên tuân theo phân bố bất kỳ là phương pháp đổi biến và phương pháp loại trừ.
Phương pháp đổi biến
Nếu ta có một tập hợp số ngẫu nhiên {x} có hàm mật độ xác suất là p1(x) xác định thì hàm mật độ xác suất p2(y) của tập hợp số ngẫu nghiên {y} được tạo ra bằng cách tác dụng hàm y = y(x) lên tập hợp {x} được xác định theo quy tắc bảo toàn xác suất: |p1(x)dx| = |p2(y)dy| => p2(y) = p1(x)| |
Khi cả hai mật độ hàm mật độ p1(x) và p2(x) là đã biết, chúng ta có thể xác định hàm chuyển đổi y(x) bằng cách tích phân phương trình bảo toàn xác suất:
= P1(x)=P2(y) y=P2-1(y)[P1(x)]
Đối với hàm p1(x) ban đầu là hàm phân bố đều trong khoảng [0,1), p1(x)=1 thì
= P1(x)=x. y được tính ngược từ hàm sau x = .
Ví dụ: Lấy mẫu biến ngẫu nhiên x có hàm mật độ xác suất f(x)=ae-ax trong khoảng [0,∞) ta có:
| |=f(x)= ae-ax nên t= e-ax hay x= -
Khi x = 0 thì t = 1 và x = ∞ thì t = 0,do đó ta có thể thu được biến x bằng cách gieo ngẫu nhiên biến t trong khoảng (0,1) và áp dụng công thức:
x= -
để thu được một tập hợp số ngẫu nhiên {x} tuân theo phân bố f(x)=ae-ax trong khoảng [0,∞).
Phương pháp loại trừ
Phương pháp đổi biến ở trên là một phương pháp tính toán hiệu quả cho phép thu thập các số ngẫu nhiên ở phân bố không đều, tuy nhiên phương pháp này có một nhược điểm là khó có thể áp dụng cho những hàm giải tích phức tạp. Không phải hàm nào cũng tính ra được hàm ngược một cách dễ dàng, do đó cần thiết phải có một phương pháp khác để giải quyết vấn đề này.
Phương pháp loại trừ Von Neuman là một phương pháp rất đơn giản trong việc tạo ra số ngẫu nhiên tuân theo mọi phân bố mong muốn. Xét một hàm mật độ xác suất f(x) khác 0 trong khoảng [xmin, xmax] và bằng 0 ở ngoài khoảng này. Gọi C là một hằng số lớn hơn hoặc bằng giá trị cực đại Fmax của hàm f(x). Phương pháp bao gồm gieo N cặp số ngẫu nhiên, tuân theo phân bố đều trong khoảng [xmin, xmax] và [0,C] và chỉ thu nhận những số nằm dưới đường cong f(x).
Gọi M là tổng số những cặp số được thu nhận và vm(x)dx là số những cặp số có hoành độ nằm trong khoảng (x, x+dx). Khi mà số lần gieo tiến tới vô cùng tỉ số vm(x) tiến tới giá trị .
Hình 2.1. Minh họa thuật toán loại trừ Thuật toán chi tiết:
- Tạo một tập hợp số ngẫu nhiên {x} tuân theo phân bố đều trong khoảng [xmin, xmax]
- Với mỗi giá trị x, gieo một số ngẫu nhiên n theo phân bố đều trong khoảng [0,1].
Giá trị x được chấp nhận giữ lại trong tập hợp nếu > n, nếu không nó sẽ bị loại bỏ khỏi tập hợp.
Thuật toán trên cho thấy rằng phương pháp này cho phép tạo ra một mật độ xác suất f(x) bất kì, ngay cả khi hàm này chưa được chuẩn hóa.
Phương pháp loại trừ đòi hỏi cần nhiều số ngẫu nhiên của máu hơn phương pháp biến đổi bởi vì một phần số ngẫu nhiên đã gieo bị loại bỏ. Khi đã tính toán được giá trị Fmax thì chúng ta có thể làm tăng hiệu suất tính toán bằng cách đặt C= Fmax. Phương pháp này còn một nhược điểm khác là không phải lúc nào ta cũng xác định được Fmax một cách dễ dàng, việc lựa chọn C theo Fmax sẽ quyết định tỉ lệ loại bỏ cao hay thấp.
2.5. Lấy mẫu điển hình
Phương pháp Monte Carlo hoạt động dựa trên việc lấy mẫu không gian nghiệm của bài toán. Khi trong không gian nghiệm có các vùng có đóng góp lớn hơn đáng kể so với các vùng khác, quá trình lấy mẫu đều trong toàn bộ không gian nghiệm sẽ không hiệu quả, nhất là khi yêu cầu đạt được kết quả chính xác với một khối lượng tính toán không quá lớn.
Ví dụ như khi ước lượng giá trị trung bình của hàm số một biến f(x) nào đó trong khoảng [a, b] với N số ngẫu nhiên phân bố đều trong [a, b], độ chính xác của kết quả thu được sẽ phụ thuộc cả vào hình dạng của hàm số f(x) và giá trị N. Trọng số đóng góp của mỗi giá trị f(xi) trong giá trị trung bình tỉ lệ với độ lớn của f(xi). Với cùng giá trị N, hàm số f(x) càng ít biến đổi trong [a, b] thì giá trị trung bình ước lượng được sẽ càng chính xác. Nếu vẽ một đường thẳng song song với trục x và cắt trục y tại giá trị trung bình chính xác, giao điểm này sẽ nằm gần các vùng có giá trị f(x) lớn. Mục đích
được điều này ta nên sử dụng tập hợp số ngẫu nhiên tuân theo phân bố có dáng điệu gần với dáng điệu của f(x) nhất thay vì dùng tập hợp số ngẫu nhiên tuân theo phân bố đều. Đây là kỹ thuật lấy mẫu điển hình.
2.6. Chuỗi Markov
Trong các phần trên đây chúng ta đã tìm hiểu các tính chất và ứng dụng đơn giản của các tập hợp số ngẫu nhiên. Trong các nghiên cứu khoa học, chúng ta sẽ mở rộng nghiên cứu giải các bài toán bằng việc sử dụng các quá trình ngẫu nhiên. Chuỗi các quá trình ngẫu nhiên được sử dụng nhiều nhất là các chuỗi có tính chất Markov: sự xuất hiện của một sự kiện nào đó chỉ phụ thuộc trực tiếp vào sự kiện xuất hiện ngay trước nó. Ví dụ đơn giản chính là các chuỗi số ngẫu nhiên được tạo ra bởi thuật toán tuyến tính đồng dư được kể trên đây. Trong chương 3 chúng ta sẽ sử dụng các chuỗi cấu hình Markov, số ngẫu nhiên để tính toán sự vận chuyển của neutron trong lò phản ứng hạt nhân.