Tải bản đầy đủ (.doc) (16 trang)

giới thiệu các thuật toán và những kỹ thuật để dùng máy vi tính tạo số ngẫu nhiên và kiểm tra tính ngẫu nhiên của số được tạo

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (151.25 KB, 16 trang )

Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
Phần 1. Mở đầu
Trong hoạt động cuộc sống, nghiên cứu và học tập, chúng ta rất cần đến
sự ngẫu nhiên của các đại lợng. Nh chúng ta đã biết, có nhiều ứng dụng phải sử
dụng số ngẫu nhiên. Một trong số đó là trong thuật toán mật mã, với mục đích
chính là mã hóa một thông điệp để chỉ có ngời nhận mới đợc dùng chúng.
Muốn vậy chúng ta phải làm cho thông điệp có vẻ nh ngẫu nhiên bằng cách
dùng một chuỗi giả ngẫu nhiên để mã hóa và cũng với chuỗi đó ngời nhận có
thể giải mã đợc.
Một lĩnh vực khác cũng đợc sử dụng rộng rãi các số ngẫu nhiên là mô
phỏng. Một mô phỏng đặc trng bao gồm một chơng trình mô tả một số khía
cạnh của thế giới thực. Các số ngẫu nhiên lại thích hợp làm dữ liệu nhập cho
các chơng trình nh vậy. Ngay cả khi không cần các số ngẫu nhiên, mô phỏng
vẫn cần các số tùy ý dùng làm dữ liệu nhập.
Nhiều ứng dụng khi phân tích một số lợng lớn dữ liệu, đôi khi chỉ cần xử
lý trên một tập con nhỏ của nó, khi đó chỉ cần lựa chọn theo kiểu thử ngẫu
nhiên.
Có nhiều phơng pháp để sinh số ngẫu nhiên. Tiểu luận này sẽ đa ra hai
phơng pháp có bản đó là phơng pháp đồng d tuyến tính và đồng d cộng.
Không thể dùng máy vi tính để sinh đợc chuỗi số ngẫu nhiên thực sự,
chúng ta chỉ hy vọng tạo ra các chuỗi có nhiều thuộc tính giống nh chuỗi số
ngẫu nhiên. Các số này đợc gọi là các số giả ngẫu nhiên.
Có nhiều phơng pháp để kiểm tra xem một chuỗi giả ngẫu nhiên có một
số thuộc tính của chuỗi ngẫu nhiên hay không. Tiểu luận sẽ trình bày một ph-
ơng pháp kiểm tra cơ bản đó là phơng pháp khi bình phơng.
Nội dung tiểu luận gồm ba phần: Phần 1: Đa ra một số khái niệm về số
ngẫu nhiên và số giả ngẫu nhiên. Phần 2: Giới thiệu ra hai phơng pháp cơ bản
để tạo số ngẫu nhiên: đó là phơng pháp đồng d tuyến tính và phơng pháp đồng
d cộng. Phần 3: Trình bày một phơng pháp khi bình phơng nhằm kiểm tra tính
ngẫu nhiên của chuỗi đợc sinh ra. Tiểu luận nhằm mục đích là giới thiệu các
thuật toán và những kỹ thuật để dùng máy vi tính tạo số ngẫu nhiên và kiểm tra


tính ngẫu nhiên của số đợc tạo. Để cài đặt cho những thuật toán trong tiểu luận
này, chúng tôi sử dụng ngôn ngữ lập trình Pascal.
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
1
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
Phần 2. Nội dung
I/ Số ngẫu nhiên và số giả ngẫu nhiên
Thông thờng ngời ta dùng thuật ngữ ngẫu nhiên khi muốn nói đến một
sự tùy ý. Một ngời yêu cầu một số ngẫu nhiên, nghĩa là không quan tâm đến
giá trị của số đó. Tuy nhiên, số ngẫu nhiên là một khái niệm toán học đợc định
nghĩa là mọi số đều có khả năng xuất hiện tơng đơng nhau.
Để đáp ứng đợc định nghĩa số ngẫu nhiên trên, chúng ta phải giới hạn
các số đợc dùng vào một phạm vi nhất định. Không thể có một số nguyên ngẫu
nhiên mà chỉ có một số nguyên ngẫu nhiên trong một miền xác định nào đó.
Trong hầu hết các trờng hợp ta không phải chỉ cần một số ngẫu nhiên,
mà cần đến dãy số ngẫu nhiên. Khi đó cần phải chứng minh nhiều mặt về các
thuộc tính của dãy số ngẫu nhiên. Ví dụ trong một chuỗi dài các số ngẫu nhiên
của một phạm vi nhỏ, chúng ta có thể muốn biết số lần xuất hiện của các giá trị
trong chuỗi.
Không có cách nào để tạo ra các số ngẫu nhiên thực sự từ một máy vi
tính. Bởi vì khi ta viết chơng trình tạo số ngẫu nhiên thì các số mà chơng trình
tạo ra chắc chắn có thể suy luận đợc. Cách tốt nhất mà chúng ta hy vọng là viết
các chơng trình để tạo ra các chuỗi số có đợc nhiều thuộc tính giống nh các số
ngẫu nhiên. Các số này thờng đợc gọi là các số giả ngẫu nhiên. Chúng không
thật sự ngẫu nhiên nhng chúng có thể hữu dụng nh sự xấp xỉ của các số ngẫu
nhiên. Tiểu luận này trình bày phơng pháp tạo số ngẫu nhiên trên máy vi tính
nên ở một mức độ nào đó, từ nay ta thống nhất số giả ngẫu nhiên với số ngẫu
nhiên. Có nhiều phơng pháp để sinh những chuỗi số nh vậy. Chẳng hạn phơng
pháp đồng d tuyến tính, phơng pháp đồng d cộng, phơng pháp đồng d toàn ph-
ơng Các phơng pháp này phải đáp ứng đợc các yêu cầu sau:

-Những số đợc sinh ra phải phân bố đều và độc lập về mặt thống kê. Giá
trị của một số trong một chuỗi ngẫu nhiên không liên quan đến giá trị của số kế
tiếp. Chuỗi phải không đợc lặp lại đối với bất kỳ độ dài nào.
-Tốc độ sinh số ngẫu nhiên phải nhanh. Bởi vì trong quá trình một mô
phỏng thực hiện thờng yêu cầu một số lợng lớn các số ngẫu nhiên. Nếu công cụ
sinh chậm thì chi phí thực hiện mô phỏng sẽ cao.
-Thuật toán để sinh số ngẫu nhiên sử dụng càng ít bộ nhớ càng tốt. Bởi vì
chơng trình mô phỏng thờng yêu cầu bộ nhớ lớn nhng bộ nhớ thờng bị giới hạn.
Trong một số trờng hợp, một số thuộc tính của các số ngẫu nhiên thì
quan trọng trong khi các thuộc tính còn lại thì không cần thiết. Trong trờng hợp
đó, cần tạo ra các số gần ngẫu nhiên, chúng chắc chắn có các thuộc tính mong
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
2
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
muốn nhng cha chắc có các thuộc tính khác. Trong một số ứng dụng, các số
gần ngẫu nhiên có thể là thích hợp hơn các số giả ngẫu nhiên. Có nhiều phơng
pháp để kiểm tra xem một chuỗi giả ngẫu nhiên có một số thuộc tính của chuỗi
ngẫu nhiên hay không. Chẳng hạn phơng pháp kiểm tra số ngẫu nhiên theo luật
phân phối đều, phân phối chuẩn, phân phối mũ
Trong phần tiếp theo ta sẽ xem xét cụ thể hai phơng pháp sinh số ngẫu
nhiên và một phơng pháp kiểm tra tính ngẫu nhiên của chuỗi đợc sinh.
II/ Các phơng pháp tạo số ngẫu nhiên
Nhiều công trình nghiên cứu nhằm đa ra các thuật toán sinh chuỗi số giả
ngẫu nhiên. Thuật toán không chỉ khó trong kỹ thuật mà còn khó trong tốc độ
sinh số ngẫu nhiên, độ dài vòng lặp, và tính chính xác của chơng trình. Phần
này giới thiệu hai phơng pháp thông dụng là phơng pháp đồng d tuyến tính và
phơng pháp đồng d cộng.
1/ Phơng pháp đồng d tuyến tính.
Phơng pháp đồng d tuyến tính đợc D. Lehner đề xuất vào năm 1951. Đây
là phơng pháp nổi tiếng và rất thờng đợc sử dụng để tạo số ngẫu nhiên. Phơng

pháp này đợc đặc trng bởi công thức đệ quy sinh số thứ n+1 dựa trên số thứ n
nh sau:
a
n+1
=(b*a
n
+ c) mod m (n0).
Giá trị khởi đầu là hằng số a
0
, hằng số b là một số nhân, hằng số c là số
gia và m là số chia (modulus). Sự lựa chọn những giá trị của những hằng số này
có ảnh hởng đến độ dài chu kỳ của chuỗi số ngẫu nhiên đợc sinh ra.
Ta thấy, trong phơng pháp này những số kế tiếp trong chuỗi đợc sinh ra
bởi mối quan hệ đệ quy. Để tạo một số ngẫu nhiên mới, ta dùng số trớc đó
nhân với b, cộng thêm c, chia cho m và lấy phần d. Nh vậy số nhận đợc luôn
nằm trong đoạn từ 0 đến m-1
Ví dụ 1: Cho b=2, c=3, m=10 và a
0
=0 thì ta có
a
0
=0
a
1
=(2*0+3) mod 10=3
a
2
=(2*3+3) mod 10=9
a
3

=(2*9+3) mod 10=1
a
4
=(2*1+3) mod 10=5
a
5
=(2*5+3) mod 10=3
a
6
=(2*3+3) mod 10=9
a
7
=(2*9+3) mod 10=1
a
8
=(2*1+3) mod 10=5
Ví dụ 2: Cho b=2, c=0, m=10 và a
0
=1 thì ta có
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
3
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
a
0
=1
a
1
=(2*1) mod 10=2
a
2

=(2*2) mod 10=4
a
3
=(2*4) mod 10=8
a
4
=(2*8) mod 10=6
a
5
=(2*6) mod 10=2
a
6
=(2*2) mod 10=4
a
7
=(2*4) mod 10=8
a
8
=(2*8) mod 10=6
Trong ví dụ 2 minh họa trờng hợp trong đó c=0. Thuật toán này đợc gọi
là phơng pháp đồng d nhân. Nếu c0 thuật toán đợc gọi là phơng pháp đồng d
hỗn hợp. Cả hai ví dụ minh họa khả năng lặp lại của bất kỳ của chuỗi đợc sinh
bởi lợc đồ này.
Thuật toán trên rất thích hợp khi sử dụng trong máy vi tính để tạo số
ngẫu nhiên vì nó dễ cài đặt. Dới đây là đoạn chơng trình tạo ra N số ngẫu nhiên
cho mảng A.
Program tao_mang_ngau_nhien;
type mmc=array[1 1000] of word;
Var a:mmc; c,m,i:word;
Begin

c:=3;
m:=10
a[0]:=0;
for i:=1 to 100 do a[i]:=(a[i-1]*b+c) mod m;
end.
Để có đợc số ngẫu nhiên tốt, phải có cách chọn các hằng số a
0
, b và m.
Nhiều tài liệu đã cung cấp một số hớng dẫn trong việc chọn các hằng số này.
Trớc hết m nên lớn, vì chu kỳ sẽ luôn luôn nhỏ hơn m nên khi m lớn thì
sự lặp lại của các số sẽ ít hơn. m có thể là giá trị tối đa của một kiểu nguyên
nhng cũng không cần phải hoàn toàn lớn nh vậy nếu không tiện. Thông thờng,
chọn m là lũy thừa của 10 hoặc 2 là thuận lợi trong việc tính toán đồng d.
Thứ hai là chọn b và c: Một chuỗi đợc sinh ra bởi sơ đồ đồng d tuyến
tính có chu kỳ m nếu và chỉ nếu:
- c là nguyên tố cùng nhau với m.
- b-1 là bội số của mọi số nguyên tố chia cho m.
- b-1 là bội của 4 nếu m là bội của 4.
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
4
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
Những ràng buộc này dẫn đến những giá trị số nhân có dạng b=z
p
+1,
trong đó z là cơ số đợc dùng trong biểu diễn số của máy tính, k là số lợng bít
tối đa của kiểu nguyên, m=z
k
và zp<k. Nh đối với sự lựa chọn của c, b phải
thỏa mãn yêu cầu là nguyên tố cùng nhau với m.
Theo tài liệu Algorithms, b nên là một hằng số tùy ý, không theo

một mẫu riêng nào cả, ngoại trừ nó nên kết thúc bởi x21, với x chẵn. b không
nên quá lớn hoặc quá nhỏ. Một sự lựa chọn an toàn là dùng một số ít hơn m
một chữ số. Điều này giúp tránh đợc một số sự cố có thể xảy ra mà các phân
tích toán học còn để hở.
Thứ ba là chọn x
0
. Nếu chu kỳ của chuỗi là m, sự lựa chọn x
0
là không
quan trọng, vì toàn bộ chuỗi sẽ đợc sinh ra. Tuy nhiên cần chú ý khi chọn x
0
=0
và sử dụng phơng pháp đồng d nhân sẽ dẫn đến một chuỗi thoái hóa.
Các quy luật nêu trên đợc phát triển bởi D. E. Knuth. Knuth chứng minh
rằng các sự lựa chọn này làm cho phơng pháp đồng d tuyến tính tạo ra các số
ngẫu nhiên tốt, thỏa mãn đợc nhiều kiểm tra thống kê phức tạp.
Một tình huống xấu nhất là chuỗi số đợc sinh ra có chu kỳ nhỏ so với
miền xác định của nó. Ví dụ nh với b=19, m=381, a
0
=0 sẽ tạo ra chuỗi không
ngẫu nhiên 0, 1, 20, 0, 1, 20, trong khoảng từ 0 đến 380. Không phải dễ để
nhận ra đợc các tình huống nh trên. Vì vậy tốt nhất nên theo các chỉ dẫn của
Knuth đa ra để tránh đợc những trờng hợp xấu mà ông đã tìm đợc.
Khi các giá trị khởi động khác nhau thì tạo thành các chuỗi ngẫu nhiên
khác nhau. Thờng thì không cần phải lu trữ cả chuỗi nh chơng trình nêu trên.
Ngợc lại, chúng ta chỉ cần lu lại trong một biến toàn cục a, khởi động với một
giá trị nào đó, rồi cập nhật bằng phép tính a:=(a*b+1) mod m.
Trong Pascal, chúng ta còn một bớc nữa mới có thể thực hiện đợc, bởi vì
chúng ta không đợc phép bỏ qua tình trạng tràn số. Tràn số là một trờng hợp lỗi
mà có thể tạo ra các kết quả không dự đoán đợc. Giả sử máy tính có kiểu

nguyên 32 bít và ta chọn m=100000000, b=31415821, a=1234567. Tất cả các
giá trị này đều nhỏ hơn giá trị tối đa của kiểu số nguyên, nhng phép toán nhân
đã làm cho nó tràn a*b+1. Kết quả đợc tạo ra sẽ không có quan hệ với tính toán
của chúng ta. Vì ta chỉ quan tâm đến 8 ký số sau cùng nên có một kỹ thuật để
loại bỏ sự tràn là phân nhỏ phép nhân ra làm nhiều phần. Để nhân p và q, ta
viết p=10
4
p
1
+p
0
q=10
4
q
1
+q
0
. Do đó phép nhân đợc viết:
p*q= (10
4
p
1
+p
0
)*(10
4
q
1
+q
0

)=10
4
p
1
q
1
+10
4
(p
1
q
0
+p
0
q
1
)+p
0
q
0
Chúng ta chỉ muốn 8 ký số cho kết quả, vì thế có thể bỏ qua số hạng đầu
tiên (10
4
p
1
q
1
) và bỏ qua bốn ký số đầu tiên của số hạng thứ hai 10
4
(p

1
q
0
+p
0
q
1
).
Ta có chơng trình nh dới đây
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
5
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
Procedure tao_chuoi_ngau_nhien;
const m=100000000; m1=10000;b=3141581;
var i,a,N:integer;
Function nhan(p,q:integer):integer;
var p
1
,p
0
,q
1
,q
0
:integer;
Begin
p
1
:=p div m
1

;
p
0
:=p mod m
1
;
q
1
:=q div m
1
;
q
0
:=q mod m
1
;
nhan:=(((p
0
q
1
+p
1
q
0
) mod m
1
)*m
1
+p
0

q
0
) mod m;
End;
Function randomint:integer;
Begin
a:=(nhan(a,b)+1) mod m;
randomint:=a;
End;
BEGIN
readln(N,a);
for i:=1 to N do write(random);
Readln;
END.
Hàm nhan() trong chơng trình này tính (p*q mod m) không bị tràn khi
mà m nhỏ hơn 1/2 giá trị số nguyên tối đa.
Khi chạy chơng trình với dữ liệu nhập N=10 và q=124567 chơng trình sẽ
tạo đợc 10 số nh sau: 35884508, 80001069, 63512650, 43635651, 1034472,
87181513, 6917174, 209855, 67115956, 59939877. Trong các số này, có sự
không ngẫu nhiên: ví dụ, các ký số hàng đơn vị xoay vòng qua các ký số từ 0
đến 9. Dễ dàng chứng minh đợc điều này là do từ công thức. Nói chung các ký
số bên phải không thật sự ngẫu nhiên. Đây là hạn chế cơ bản của phơng pháp
đồng d tuyến tính để tạo số ngẫu nhiên.
Để tạo một số nguyên ngẫu nhiên trong giới hạn [0,r-1], ta có thể thay
hàm random() ở chơng trình trên bởi hàm dới đây:
Function badrandom(r:integer):integer;
begin
a:=(nhan(b,a)+1) mod m
badrandom:= a mod r
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006

6
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
end;
Hàm này đợc đánh giá là không tốt vì các ký số không ngẫu nhiên bên
phải là các ký số đợc sử dụng, nên chuỗi kết quả chỉ có đợc ít thuộc tính mong
muốn. Vấn đề này có thể dễ dàng khắc phục bằng cách dùng các ký số bên trái
thay thế. Hàm đợc viết lại là:
Function newrandom(r:integer):integer;
begin
a:=(nhan(b,a)+1) mod m
newrandom:= a*r div m
end;
Hàm trên cho ta một số nguyên ngẫu nhiên giữa 0 và r-1. Tuy nhiên tình
huống tràn vẫn còn có thể xảy ra. Ta cải tiến lại hàm này nh sau:
Function randomint(r:integer):integer;
Begin
a:=(nhan(a,b)+1) mod m;
randomint:=((a div m1)*r) div m1;
End;
Để tạo số thực ngẫu nhiên giữa 0 và 1, ta xem các số tạo nh trên là phân
thập phân với chấm thập phân ở bên trái. Điều này có thể cài đợc dễ dàng bằng
cách trả về giá trị thực a/m thay vì số nguyên a. Hàm tạo số thực ngẫu nhiên
giữa 0 và 1 đợc viết.
Function randomreal:real;
Begin
a:=(nhan(a,b)+1) mod m;
randomreal:=a/m;
End;
Khi đó ngời sử dụng có thể nhận đợc một số nguyên trong giới hạn [0,r)
bằng cách đơn giản nhân giá trị này với r và cắt lấy phần nguyên của kết quả.

Hay có thể nói một số thực ngẫu nhiên giữa 0 và 1 mới chính là số cần thiết.
2/ Phơng pháp đồng d cộng.
Một phơng pháp khác để tạo các số ngẫu nhiên là dựa trên các thanh
ghi dịch chuyển hồi tiếp tuyến tính đợc sử dụng trên các máy mã hóa trớc đây.
ý tởng bắt đầu với một thanh ghi chứa một mẫu tùy ý, sau đó chuyển sang phải
một bớc, bỏ vào các vị trí trống bên trái bằng một bít đợc xác định bằng cách
XOR của hai bít phải nhất của thanh ghi đó.
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
7
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
Một thanh ghi dịch chuyển hồi tiếp tuyến tính 4 bít
Ví dụ: Nếu thanh ghi đợc khởi tạo là 1111 thì sau dịch chuyển, nội dung
là 0111 (1 XOR 1=0), tiếp theo sẽ là 0011, 0001, 1000, 0100, 0010, 1001,
1100,0110, 1011, 0101, 1010, 1101, 1110, 1111. Khi chúng ta nhận lại mẫu
khởi tạo, tiến trình hiển nhiên đã lặp lại. Chú ý rằng tất cả các mẫu bít có thể có
đều xuất hiện: giá trị khởi đầu lặp lại sau 15 bớc.
Tuy nhiên, nếu ta thay đổi các vị trí các bít lấy ra dùng để tính giá trị
cho hồi tiếp bên trái thì sẽ đợc một chuỗi hoàn toàn khác.
Ví dụ, ta lấy bít 0 và 2 thay vì 0 và 1 nh trên (thứ tự tính từ phải sang
trái) thì chúng ta nhận đợc chuỗi 1111, 0111, 0011, 1001, 1100, 1110, 1111,
không phải chu kỳ đầy đủ nh trớc.
Thông thờng với thanh ghi n bít, chúng ta có thể sắp xếp để chiều dài
vòng lặp là 2
n
-1. Vì vậy, với giá trị n đủ lớn, các thanh ghi n bít tạo đợc chuỗi
ngẫu nhiên khá tốt. Thông thờng, chúng ta thờng lấy n=31 hay n=63.
Cũng nh phơng pháp đồng d tuyến tính, các đặc tính toán học của các
thanh ghi này đã đợc nghiên cứu nhằm đa ra nhiều phơng án lựa chọn vị trí lấy
ra các bít để tính giá trị bít bên phải để tạo đợc tất cả các mẫu. Ví dụ với n=31,
các vị trí rút ra có thể là 0 và một trong các vị trí: 4, 7, 8, 14, 19, 25, 26, hay 29.

Một cách thực hiện khác là có thể tính toán một lần một một số nguyên
thay vì mỗi lần một bít với phơng pháp đệ quy nh trên. Trong ví dụ trên nếu sử
dụng phép toán XOR bit cho hai số kế tiếp, chúng ta tạo đợc một số sẽ xuất
hiện tại ba vị trí sau đó trong danh sách. Điều này giúp ta có đợc một phơng
pháp tạo số ngẫu nhiên có thể dễ dàng áp dụng cho máy vi tính. Dùng thanh
ghi dịch chuyển hồi tiếp với hai bít lấy ra tính toán là bít thứ b và thứ c, cũng
giống nh dùng công thức đệ quy sau:
a[k]:=(a[k-b]+a[k-c]) mod m
Để thích hợp với phơng pháp thanh ghi dịch chuyển, phép toán cộng
trong công thức này nên đợc thay thế bằng phép toán XOR trên bít. Tuy nhiên,
điều này chứng tỏ rằng có thể tạo đợc các số ngẫu nhiên tốt ngay cả khi chỉ
dùng phép cộng số nguyên thông thờng mà thôi. Phơng pháp này gọi là đồng d
cộng (additive congruential)
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
8
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
Bít phải nhất của các số trong phơng pháp này cũng giống nh các bít
trong thanh ghi dịch chuyển hồi tiếp tơng ứng. Do đó số bớc đạt đợc trớc khi
bắt đầu lặp lại, ít nhất cũng bằng chiều dài của chu kỳ lặp. Với phơng pháp này
các số ngẫu nhiên đợc tạo ra vợt qua đợc các kiểm tra thống kê.
Để cài đặt chơng trình tạo số ngẫu nhiên theo phơng pháp đồng d cộng,
chúng ta cần giữ một bảng gồm c phần tử, luôn chứa c số đợc tạo ra gần nhất.
Việc tính toán đợc tiếp tục bằng cách thay thế một trong các số trong bảng
bằng tổng của hai số khác trong bảng. Khởi đầu, bảng nên gồm các số không
lớn quá và cũng không nhỏ quá. Một cách đơn giản là dùng phơng pháp đồng
d tuyến tính để sinh ra bảng này.
Knuth khuyên nên chọn b=31, c=55. Khi đó chúng ta cần phải giữ lại 55
số đợc tạo gần nhất. Cấu trúc dữ liệu thích hợp là dùng hàng đợi, nhng bởi vì
kích thớc của bảng cố định nên chúng ta chỉ dùng một mảng kích thớc đó, với
chỉ số xoay vòng nh sau:

Procedure randominit(s:integer);
begin
a[0]:=s;j:=0;
repeat
j:=j+1;
a[j]:=(nhan(b,a[j-1])+1) mod m;
until j=54;
end;
Function randomint(r:integer):integer;
begin
j:=(j+1) mod 55;
a[j]:=a[(j+23) mod 55] + a[(j+54) mod 55]) mod m;
randomint:=((a[j] div m1)*r) div m1;
end;
Biến toàn cục a đợc thay bằng một mảng và một con trỏ chỉ số j trên
mảng. Dung lợng lớn của mảng a là một khuyết điểm của phơng pháp này
trong một số ứng dụng. Nhng nó cũng chính là một u điểm, bởi vì nó làm cho
chu kỳ lặp rất dài, ít nhất 2
55
-1 ngay cả khi m nhỏ.
Hàm randomint trả về một số nguyên giữa 0 và r-1. Và dĩ nhiên, chúng
ta cũng có thể dễ dàng thay đổi nh phần trớc để trả về một số thực ngẫu nhiên
giữa 0 và 1 bằng cách a[j]/m. Hàm randomint() đợc viết lại randomreal() nh
sau:
Function randomreal:real;
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
9
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
begin
j:=(j+1) mod 55;

a[j]:=a[(j+23) mod 55] + a[(j+54) mod 55]) mod m;
randomreal:=a[j]/m;
end;
Ví dụ: Cho m=10, và mở rộng chuỗi 1, 2, 4, 8, 6 đợc sinh trong ví dụ trớc.
a
1
= 1
a
2
= 2
a
3
= 4
a
4
= 8
a
5
= 6
a
6
= (a
5
+ a
1
) mod 10 = (6+1) mod 10 =7
a
7
= (a
6

+ a
2
) mod 10 = (7+2) mod 10 =9
a
8
= (a
7
+ a
3
) mod 10 = (9+4) mod 10 =3
a
9
= (a
8
+ a
4
) mod 10 = (3+8) mod 10 =1
a
10
= (a
9
+a
5
) mod 10 = (1+6) mod 10 =7
a
11
= (a
10
+ a
6

) mod 10 = (7+7) mod 10 =4
a
12
= (a
11
+ a
7
) mod 10 = (4+9) mod 10 =3
a
13
= (a
12
+ a
8
) mod 10 = (3+3) mod 10 =6
a
14
= (a
13
+ a
9
) mod 10 = (6+1) mod 10 =7
a
15
= (a
14
+ a
10
) mod 10 = (7+7) mod 10 =4
a

16
= (a
15
+ a
11
) mod 10 = (4+4) mod 10 =8
a
17
= (a
16
+ a
12
) mod 10 = (8+3) mod 10 =1
a
18
= (a
17
+ a
13
) mod 10 = (1+6) mod 10 =7
a
19
= (a
18
+ a
14
) mod 10 = (7+7) mod 10 =4
a
20
= (a

19
+ a
15
) mod 10 = (4+4) mod 10 =8
III/ Kiểm tra tính ngẫu nhiên bằng phơng pháp Khi bình phơng.
Thờng có thể dễ dàng nhận ra một chuỗi là không ngẫu nhiên, nhng thật
khó chứng minh rằng một chuỗi là ngẫu nhiên. Nh đã đề cập trớc đây, không
có một chuỗi nào đợc tạo bằng máy vi tính có thể thực sự ngẫu nhiên, nhng
chúng ta có thể có đợc một chuỗi thể hiện nhiều đặc tính của các số ngẫu
nhiên. Thực tế, thờng không thể xác định chính xác thuộc tính nào của số ngẫu
nhiên là quan trọng đối với một trình ứng dụng đặc biệt. Hơn nữa, lúc nào cũng
nên nghĩ đến việc thực hiện một vài kiểu kiểm tra trên phơng pháp tạo số ngẫu
nhiên, để đảm bảo rằng không có trờng hợp suy thoái xảy ra. Các phơng pháp
tạo số ngẫu nhiên có thể rất tốt nhng cũng có khi rất xấu.
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
10
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
Nhiều kiểm tra đợc triển khai để xác định một chuỗi có đợc nhiều thuộc
tính của chuỗi ngẫu nhiên thực sự hay không. Hầu hết các kiểm tra này đều có
cơ sở trong toán học. Trong số đó kiểm tra khi-bình phơng là một kiểm tra
thống kê cơ bản, dễ cài đặt và hữu dụng trong nhiều ứng dụng.
ý tởng của phơng pháp khi bình phơng là xem xét các số tạo ra có phân
bố một cách hợp lý hay không. Nếu chúng ta tạo ra N số dơng có giá trị nhỏ
hơn r thì chúng ta mong muốn nhận đợc khoảng N/r số cho mỗi giá trị. Nhng
số lần xuất hiện của tất cả các giá trị cũng không đợc bằng nhau, vì nếu số lần
xuất hiện của tất cả các giá trị bằng nhau thì không còn là ngẫu nhiên nữa.
Điều này dẫn đến việc cần tính toán xem một chuỗi các số có đợc phân
bố giống nh một chuỗi ngẫu nhiên hay không bằng cách tính tổng số của bình
phơng số lần xuất hiện của mỗi giá trị, chia cho tần số mong muốn (N/r), rồi
trừ bớt chiều dài chuỗi (N). Ta có chơng trình kiểm tra tính ngẫu nhiên của

chuỗi đợc sinh ra nh sau:
Function khi_binh_phuong(N,r,s:integer):real;
var i,t:integer;
f:array[0 rmax] of integer;
begin
raninit(s);
for i:=0 to rmax do f[i]:=0;
for i:=1 to n do
begin
t:=randomint(r);
f[t]:=f[t]+1;
end;
t:=0;
for i:=0 to r-1 do t:=t+f[i]*f[i];
Khi_binh_phuong:=((r*t/N)-N);
end;
Giá trị của hàm là giá trị thống kê khi bình phơng và cũng có thể biểu
diễn kết quả của công thức toán học sau:
rN
rNf
X
i
/
)/(
2
2

=



Với 0<i<r. Nếu giá trị thống kê khi bình phơng gần với r thì các số đó
là ngẫu nhiên, ngợc lại, nếu nó xa r thì chúng không ngẫu nhiên.
Đối với phơng pháp kiểm tra đơn giản mà chúng ta đang thực hiện, giá
trị thống kê chỉ nên lệch một khoảng 2
r
so với r. Điều này chỉ đúng nếu N
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
11
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
lớn hơn 10r. Để đảm bảo chuỗi tạo ra là ngẫu nhiên, nên thực hiện kiểm tra
nhiều lần.
Phơng pháp kiểm tra này cài đặt đơn giản nên thích hợp cho việc tích
hợp nó vào bên trong mỗi chơng trình tạo số ngẫu nhiên, nhằm đảm bảo rằng
không có điều gì ngoài dự tính có thể gây ra các vấn đề nghiêm trọng. Tất cả
các thuật toán tốt mà chúng ta đã thảo luận đều vợt qua đợc kiểm tra này.
Sử dụng phơng pháp tạo nêu trên cho 1000 số có giá trị nhỏ hơn 100,
chúng ta có giá trị thống kê khi bình phơng là 100.8 đối với phơng pháp đồng
d tuyến tính và 105.4 đối với phơng pháp đồng d cộng. Cả hai phơng pháp đều
đạt trong vùng lệch 20 so với 100 (tức là trong [80,120]).
Phần 3. Kết luận
Nh chúng ta đã biết, có nhiều phơng pháp tạo số ngẫu nhiên. Tiểu luận
đã trình bày kỹ thuật tạo số ngẫu nhiên bằng máy vi tính với hai phơng pháp
thông dụng là phơng pháp đồng d tuyến tính và phơng pháp cộng. Có hai cách
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
12
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
để lập trình sinh ra chuỗi ngẫu nhiên. Ngời ta thờng tạo một hàm, khởi động
nó, rồi gọi lặp lại nhiều lần, mỗi lần trả về một số ngẫu nhiên. Một cách khác là
chỉ gọi một lần, và nó tạo ra dãy các số ngẫu nhiên cho trình ứng dụng. Trong
cả hai trờng hợp trên, ngời ta đều mong muốn nhận đợc các chuỗi giống nhau

trong các lời gọi kế tiếp (để tìm lỗi hay so sánh các chơng trình khác nhau trên
cùng dữ liệu nhập) và tạo đợc một chuỗi tùy ý. Tất cả các điểm nêu trên đòi hỏi
phải dùng đến trạng thái đợc giữ lại giữa các lời gọi của hàm tạo số ngẫu nhiên.
Điều này có thể không thuận lợi trong một số môi trờng lập trình. Phơng pháp
cộng bất lợi vì có một trạng thái khá lớn (mảng giữ các số nguyên vừa tạo) nh-
ng lại có một thuận lợi là có một chu kỳ dài, mà có thể không cần phải khởi
tạo.
Cho dù công cụ tạo số ngẫu nhiên tốt đến bao nhiêu đi nữa vẫn có thể
sinh ra chuỗi không ngẫu nhiên hoặc không có nhiều thuộc tính ngẫu nhiên
mong muốn. Vì vậy, cần phải xem xét cẩn thận các công cụ tạo số ngẫu nhiên
bằng cách thực hiện nhiều loại kiểm tra thống kê, nếu không thì thì khó đảm
bảo một phơng pháp tạo số ngẫu nhiên là tốt. Tiểu luận đã trình bày đợc một
phơng pháp kiểm tra tính ngẫu nhiên của chuỗi đợc sinh ra, đó là phơng pháp
khi bình phơng. Đây là một phơng pháp kiểm tra khá chặt chẽ và dễ cài đặt.
Ngoài ra, để có đợc công cụ tạo số ngẫu nhiên tốt thì cần phải dựa trên
các phân tích toán học và nhiều kinh nghiệm thực tế. Một phơng pháp đợc đề
xuất nhằm tránh các sai lệch xảy ra trong thao tác tạo số ngẫu nhiên là kết hợp
các phơng pháp với nhau. Chẳng hạn dùng phơng pháp đồng d tuyến tính để tạo
mảng ban đầu cho phơng pháp đồng d cộng.
Lời kết:
Để hoàn thành đợc đề tài này, ngoài sự nỗ lực và cố gắng của bản thân,
tác giả đã nhận đợc sự giúp đỡ qúy báu của Quý Thầy, PGS.TS. Trần Lộc
Hùng. Là một học viên chuyên ngành Tin học và dù rất tâm đắc với đề tài đang
nghiên cứu nhng với thời gian có hạn và khối lợng kiến thức của bản thân còn
ít ỏi nên chắc chắn tiểu luận không tránh khỏi những hạn chế trong việc tiếp
cận, nghiên cứu và trình bày. Tác giả xin kính trọng cảm ơn sự giúp đỡ quý
báu của Quý Thầy và mong đợc đón nhận từ Quý Thầy sự góp ý để giúp tác giả
có đợc hiểu biết đúng hơn đối với vấn đề đang nghiên cứu đồng thời mong đợc
sự lợng thứ cho những sơ suất trong tiểu luận này.
tài liệu tham khảo

Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
13
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
[1] Phạm Văn Khánh Lý thuyết mô phỏng đại lợng ngẫu nhiên và quá trình
ngẫu nhiên
[2] Robert Sedgewick Algorithms Addison-Wesley Publishing 2
nd
Edition
[3] Các tài liệu về sinh số ngẫu nhiên: Generation of random numbers
Mục lục
Nội dung Trang
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
14
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
Mở đầu 1
Nội dung 2
1-Số ngẫu nhiên và số giả ngẫu nhiên 2
2-Các phơng pháp tạo số ngẫu nhiên 3
Phơng pháp đồng d tuyến tính 3
Phơng pháp đồng d cộng 7
3-Kiểm tra tính ngẫu nhiên bằng phơng pháp khi bình phơng 10
Kết luận 13
Tài liệu tham khảo 14
Kỷ thuật đồng d cộng as hạt giống của nó, một chuỗi n số x1,x2, ,xn. Chuổi
số này có thể đợc sinh ra từ mọt số kỷ thuật khác. ứng dụng của thuật toán này
sẽ sinh ra một sự mở rộng thành chuổi xn+1, xn+2 Lớp của thuật toán này là
x
j
=(x
j-1

+x
j-n
) mod m
Thuận lợi chính của kỹ thuật này là tốc độ; không có sự nhân là cần
thiết. Nó có thể dẫn đến chu kỳ lơn hơn m. Nh Knuth đã đề cập, thuyết hành vi
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
15
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
của kỹ thuật này là không đợc hiểu giống nh hành vi của kỹ thuật đồng d hỗn
hợp. Do đó, việc xác nhận tính hợp lệ của bất kỳ chuỗi số đợc sinh bởi kỹ thuật
này là cần thiết.
Dễ thấy rằng việc làm cho gần đúng thuộc tính mỗi số có khả năng xuất
hiện nh nhau trong một chuỗi dài vẫn cha đủ. Ví dụ, mỗi số trong đoạn
[1,100] xuất hiện một lần trong chuỗi (1,2, ,100), nhng chuỗi này không chắc
là hữu dụng nh một chuỗi gần tơng đơng chuỗi ngẫu nhiên.
Trong thực tế, trong một chuỗi ngẫu nhiên gồm 100 số thuộc miền xác
định [1,100] sẽ có một vài số sẽ xuất hiện hơn một lần và một vài số khác thì
không có trong chuỗi. Nếu không đạt đợc điều này trong một chuỗi giả ngẫu
nhiên thì nghĩa là đã có sai sót trong việc tạo chuỗi. Nhiều phơng pháp kiểm tra
dựa trên các nhận xét nh vậy đã đợc áp dụng cho các phơng pháp tạo chuỗi
ngẫu nhiên nhằm kiểm tra xem một chuỗi số giả ngẫu nhiên có một số thuộc
tính của chuỗi ngẫu nhiên hay không. Chúng ta cũng sẽ xem xét một trong các
kiểm tra quan trọng nhất, đó là kiểm tra khi bình phơng
Chúng ta sẽ bàn kỹ về các số ngẫu nhiên phân phối đều, với các giá trị
xem nh tơng đơng nhau. Cũng tơng tự cho các số ngẫu nhiên tuân theo các
phân phối không đồng đều, với một số giá trị có nhiều hơn một số khác. Các số
giả ngẫu nhiên với phơng pháp phân phối không đồng đều thờng bao gồm bởi
thực hiện vài phân phối kiểu đồng đều tạo thành.
Nh chúng ta sẽ thấy, khó mà thuyết phục rằng các số ngẫu nhiên chúng ta tạo
có tất cả các thuộc tính của số ngẫu nhiên. Đây cũng là một vấn đề quan trọng

đối với các phơng pháp phân phối khác.
Trong nhiều mô phỏng những sự kiện xảy ra để xuất hiện ở ngẫu nhiên
hoặc bao hàm thuộc tính mà giá trị phải đợc ấn định một ít ngẫu nhiên. Xảy ra
này bởi vì hầu hết mô phỏng là dựa trên kiến thức đợc mô tả nh mối quan hệ
chung chung hoặc có liên quan đến lịch sử. Ví dụ, trong nhiều trờng hợp
khoảng thời gian của một sự kiện đợc kiết để rơi với một phạm vi náo đó. Mô
phỏng của một sự kiện yêu cầu một giá trị đặc biệt đợc ấn định. Giả sử mô
phỏng của một hệ thống máy tính general-purpose. Một sự kiện mà phải đợc
mô hình là phục hồi của một bản ghi từ một thiết bị lu trữ truy xuất trực tiếp.
Khoảng thời gian của sự kiện này có thể đợc xác định dể rơi với một khoảng
thời gian nào đó; giá trị thực sự, tuy nhiên, bị ảnh hởng bởi những biến tình cờ,
chẳng hạn vị trí của bản ghi liên quan với đầu đọc khi yêu cầu đợc thực hiện.
Một ví dụ khác trong đó sự xuất hiện tình cờ to play a part là trong lan rộng sử
dụng của sự quyết định logic trong mô phỏng. Ví dụ, mục đích rằng trong hoạt
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
16
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
động hệ thống, một đờng dẫn đợc cho đợc biết để đa ra tỷ lệ nào đó của thời
gian. Mô phỏng của một hệ thống yêu cầu một phơng thức để chọn đờng dẫn
này trên những cái khác vì vậy hành vi của mô phỏng tơng tự nh của những hệ
thống thực tế. Vì hầu hết trờng hợp sự quyết định này là bất khả quyết, sự lựa
chọn thông thờng dựa trên mối quan hệ xác suất.
Đối với những lý do này và khác, một đòi hỏi của hầu hết bất kỳ mô
hình mô phỏng là một số phơng tiện thuận lợi để sinh số ngẫu nhiên. Nó phải
có khả năng để ấn định một giá trị cụ thể để có vẻ nh những sự kiện ngẫu nhiên
trên những hệ thống mô phỏng đã cho. Trong ví dụ trớc của mô phỏng của hệ
thống máy tính, nó phải đợc ấn định một giá trị cụ thể cho thời gian yêu cầu để
tìm lại đợc một bản ghi từ một thiết bị lu trữ truy xuất trực tiếp mỗi khi một
yêu cầu tái tạo đợc nhận. Trong trờng hợp của một khối quyết định nó phải là
trợc tiếp

Số ngẫu nhiên là sự say mê và then chốt của mô phỏng. Tiêu biểu, tất cả
tính chất ngẫu nhiên đợc yêu cầu bởi mô hình đợc mô phỏng bởi bộ số ngẫu
nhiên cái mà dữ liệu ra của nó đợc giả sử là một chuỗi của sự độc lập và phân
phối tơng tự nhau U(0,1) nhng giá trị ngẫu nhiên (nghĩa là những giá trị ngẫu
nhiên liên tục phân bố đồng đều trên khoảng (0,1)). Những giá trị ngẫu nhiên
này đợc biến đổi khi cần thiết để mô phỏng những giá trị khác nhau từ những
phân bố xác suất khác nhau, chẳng hạn lũy thừa, Poisson, nhị thức, hình học,
rời rạc đều, cũng nh
Sinh biến ngẫu nhiên.
1/ Giới thiệu:
Trong chơng 4 sinh số ngẫu nhiên đợc thảo luận. Trong chơng này, vì số
ngẫu nhiên luôn luôn có nghĩa biến ngẫu nhiên đồng đều, biểu thị bởi RN(0,1),
cái mà hàm phân phối của nó là
F
U
(u)=






<<

1u 1
1u0 u
0u 0
(1)
Do đó những số ngẫu nhiên là luôn luôn phân phối đều trên khoảng đơn
vị (0,1). Sự sinh số ngẫu nhiên là một chủ đề quan trọng trong its own right.

Ngợc lại, sinh biến ngẫu nhiên luôn luôn liên quan với sự sinh ra những biến
mà xác suất phân phối của nó là khác nhau mà của đồng đều trên khoảng (0,1).
Vấn đề cơ bản là vì thế để sinh một biến ngẫu nhiên, X, mà hàm phân phối của
nó là:
F(x)=Pr(Xx) (-<x<+) (2)
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
17
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
đợc giả sử là hoàn toàn đợc biết, và khác với (1)
Hầu hết các hệ thống máy tính lớn chứa những th viện với sự thực hiện
của những bộ sinh đối với những phân phối tầm thờng hơn. Bộ sinh cũng biến
thiên trong nhiều package thống kê và mô phỏng hiện tại cho máy tính cá nhân.
Sự lựa chọn một bộ sinh thờng có nhiều để làm với những thuộc tính của sự
phân phối để đợc sử dụng, nh với những thuộc tính của bản thân bộ sinh. Trong
sự mô tả của những bộ sinh đã cho cụ thể dới đây, nhấn mạnh vì vậy đợc cho
để sự nằm dới đặc điểm của phân phối đợc xem xét và trong mỗi quan hệ giữa
phân phối khác nhau. Thông tin này sẽ là hữu ích trong sự giúp đỡ sự hiểu của
những thuộctính của bộ sinh. Mục đích là để cho phép một sự lựa chọn đợc
thực hiện, và thuật toán sẽ là không cần thiế để xem xét nhiều nh là sự thực
hiện một hộp đen. Thêm vào đó, nguyên lý chung và phơng thức chung của
sinh biến ngẫu nhiên đợc mo tả cái mà có thể sẽ reader để xây dựng bộ sinh
cho phân phối không chuẩn.
Bộ sinh biến ngẫu nhiên lúc nào cũng vậy sử dụng nh điểm bắt đầu của
chúng một bộ sinh số ngẫu nhiên cái mà làm ra RN(0,1) với phân phối đã cho
bởi (1). Kỷ thuật là để biến đổi hoặc thực hiện một hoặc nhiều biến ngẫu nhiên
đồng đều trong một số cách hiệu quả để thu đợc một biến với phân phối mong
muốn (2). Trong chơng này nó sẽ đợc giả sử rằng nguồn gốc của số ngẫu nhiên
là có sẵn. Thêm vào đó, để là đồng đều, các số ngẫu nhiên cũng phải là độc lập
lẫn nhau. Một vấn đề đầy ý nghĩa đợc thảo luận trong chơng 4 là xây dựnh bộ
sinh mà sản sinh ra số ngẫu nhiên mà có thể an toàn đợc xem xét nh là độc lập.

Nó đợc giả sử trong tiếp theo mà một bộ sinh nh vậy đã có sẵn. Trong những
cái dới đây, nó đợc giả sử rằng một chuỗi số đợc sinh ra bởi một bộ sinh {U1,
U2,} chạy nhập nhằng từ một chuỗi của biến phân phối độc lập RN(0,1)
1/Tính chính xác: Điề này liên quan với phân phối của những biến đợc
sinh ra bởi bộ sinh. Bộ sinh đợc gọi là chính xác nếu phân phối của những biến
đợc sinh có dạng chính xác mong muốn. Trong những ứng dụng nào đó trong
đó phân phối chính xác là không critical, một phơng thức có thể đợc chấp nhận
cái mà có thể là tốt nh những nhân tố khác đợc liên quan, nhng

Nguyên tắc sinh
Nh đã đề cập trong 5.1, từ bây giờ trên nó đợc giả sử rằng một bộ sinh số
số giả ngẫu nhiên là có sẵn mà sinh ra một chuỗi của những biến độc lập, với
sự hiểu rằng mỗi lần hàm này đợc gọi, một biến RN(0,1) đợc trả về mà độc lập
với tất cả các biến đợc sinh bởi lần gọi trớc của hàm này.
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
18
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên
Khi X là một biến ngẫu nhiên phân phối liên tục, phân phối có thể đợc
định nghĩa bằng hàm mật độ f(x). Hàm mật độ cho phép xác suất mà X nằm
giữa hai giá trị đã cho a và b (a<b) đợc ớc lợng là:
Pr(aXb)=

b
a
dxxf )(

Từ sự định nghĩa của nó, (2), nó sẽ đợc xem rằng hàm phân bố trong tr-
ờng hợp này có thể đợc ớc lợng từ hàm mật độ là tích phân
F(x)=



x
dzzf )(
Hàm phân phối là vì vậy tăng nghiêm ngặt và liên tục (hinhg 5.1). Trong
trờng hợp này, đối với bất kỳ 0<u<1, phơng trình F(x)=u có thể đợc giải quyết
để đa ra một x duy nhất. Nếu (và đây là điều kiện tới hạn) nghịch đảo của hàm
phân phối có thể đợc biểu diễn trong một dạng đơn giản, phơng pháp này có
thể đợc chứng tỏ (bao hàm) bằng cách viết phơng trình trong một dạng tơng đ-
ơng x=F
-1
(u); vì vậy x đợc biểu diễn hàm hiện của u. Hàm F
-1
này dợc gọi là
nghịch đảo của F. This yields phơng pháp thuận lợi tiếp theo đối với sinh biến
với hàm phân phối đã cho F
Phơng pháp biến đổi nghịch đảo (trờng hợp liên tục)
Cho U=RN(0,1)
Trả về X=F
-1
(U)
Để chỉ ra rằng nó làm việc, tất cả những cái đòi hỏi đó là để xác minh
rằng hàm phân phối của X quả thực là F (nghĩa là Pr(Xx)=F(x)). Bây giờ
Pr(Xx)=Pr[F
-1
(U) x)]=Pr[UF(x)]
Nhng xác suất bên phải là hàm phân phối của một biến ngẫu nhiên đồng
đều ớc lợng tại giá trị F(x), và từ (1) đây là bằng với F(x), nh đã quy định.
Ví dụ đợc biết nhiều nhất và hữu dụng nhất là khi X là một biến ngẫu
nhiên phân phối lũy thữa với a>0. hàm phân phối của nó là
F(x)=







>


0 x 0
0 x)
a
x
exp(1
(3)
Giải u=F(x) đối với x trong trờng hợp này nghiệm (yields) là
x=F
-1
(u)=-a ln (1-u) (4)
Mọt biến ngẫu nhiên vơi hàm phân phối (3) vì thế thu đợc bởi sử dụng công
thức (4) để tính X, với u đợc sinh ra nh một biến U(0,1)
Phơng pháp biến đổi nghịch đảo (trờng hợp rời rạc)
Cho U=RN(0,1)
Cho i=1
While F(x
i
)<U do i:=i+1;
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
19
Tiểu luận môn Cơ sở mô phỏng ngẫu nhiên

Return X:=x
i
Bởi vì phơng thức sử dụng một tìm kiếm tuyến tính, nó có thể không
hiệu quả nếu n là lớn. Phơng pháp hiệu quả hơn đợc mô tả nh sau:
Nếu một bảng các giá trị x
i
với sự tơng ững những giá trị F(x
i
) đợc lu,
phơng pháp cũng đợc gọi là table-lookup method. Phơng pháp thực hiện thông
qua bảng so sánh U với mỗi F(x
i
), và trả về, nh X, x
i
đầu tiên đợc bắt gặp for
which F(x
i
)U.
Học viên: Lê Thủy Thạch-Lớp Cao học Tin học khóa 2004-2006
20

×