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

Phương pháp monte carlo và thuật toán giải bài toán quy hoạch

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 (468.53 KB, 44 trang )

1

Mở ĐầU
Phơng pháp Monte Carlo ra đời cùng thời với thế hệ máy
tính điện tử đầu tiên ở Mỹ từ những năm 1943-1944. Tuy
nhiên, tên gọi phơng pháp Monte Carlo hay còn gọi là phơng
pháp thử thống kê xuất hiện trong từ điển Toán học vào
những năm 1949-1950. Đến năm 1961 cuốn chuyên khảo đầu
tiên về phơng pháp Monte Carlo của nhà toán học N.P.Buslenko
và J.A.Srejder (ngời Nga) ra đời và đợc nhiều nhà toán học
quan tâm. ở nớc ta, phơng pháp Monte Carlo đợc giảng dạy và
áp dụng vào thực tế từ những năm 1963, mà công đầu tiên
phải kể đến là Giáo s Nguyễn Quý Hỷ, trờng Đại học KHTNĐHQG Hà Nội.
Chuyện kể rằng tại Thành phố Monte (Monaco), thành phố
nổi tiếng với những sòng bạc phục vụ nhiều hạng ngời khác
nhau. Sự may rủi, đỏ đen liên tiếp đợc thể nghiệm bằng
phép thử tung đồng tiền trên chiếu bạc. Nếu nói xác suất
bắt nguồn từ chuyện ngời say rợu, thì phơng pháp Monte Carlo
lại bắt nguồn từ những sòng bạc của thành phố có tên Monte.
MÃi đến năm 1977 phơng pháp này mới đợc đa ra ứng
dụng cùng thời các máy tính điện tử lần đầu tiên ở nớc ta. Trớc
tiên là việc mô phỏng các trận động đất và giải bài toán thiết
kế tối u thí nghiệm cỡ lớn (1977-1978) để bổ sung hệ trạm
quan sát trên lÃnh thổ Việt Nam. Năm 1985-1987 phơng pháp
đợc dùng để giải bài toán điều khiển tối u của nhà máy thủy
điện Hoà Bình và xác định trữ lợng thủy điện của các con
sông trong lới điện thống nhất Bắc-Nam.
Phơng pháp Monte Carlo đà và đang đợc nhiều nhà Toán
học ứng dụng quan tâm đến để giải các bài toán quy hoch
tối u. Để hiểu rõ hơn về phơng pháp Monte Carlo và cách thức



2

giải bài toán quy hoạch, chúng tôi lựa chọn đề tài Phơng
pháp Monte Carlo và thuật toán giải bài toán quy hoạch.
Việc sử dụng phần mềm Visual Basic để giải bài toán quy
hoạch bằng phơng pháp Monte Carlo sẽ đợc đề cập trong khóa
luận này.
Nội dung của khoá luận đợc trình bày thành hai chơng.
Chơng 1 : Phơng pháp Monte Carlo và thuật toán.
Chơng 2 : Thiết lập chơng trình bằng ngôn ngữ lập trình
Visual Basic.
Khóa luận đợc thực hiện v hon thnh tại trờng Đại học
Vinh, dới sự hớng dẫn khoa học của Th.S. Nguyễn Thị Thanh
Hiền. Tác giả xin by tỏ lòng biết ơn sâu sắc đến cô, ngời
đà dnh cho tác giả nhiều thời gian, sự quan tâm nhiệt tình
hớng dẫn giúp đỡ tác giả hon thnh khóa luận.
Nhân dịp ny, tác giả cũng xin trân trọng gửi lời cảm ơn
chân thnh tới PGS.TS. Trần Xuân Sinh, Th.S. Lơng Xuân Phú,
và các thầy cô giáo trong tổ Xác suất Thống kê v Toán ứng
dụng, khoa Toán đà nhiệt tình và tạo điều kiện giúp đỡ, góp ý
cho tác giả trong quá trình học tập v nghiên cứu để hon
thnh khóa luận.
Tác giả xin chân thnh cảm ơn tập thể lớp 48B Toán tin
ứng dụng, gia đình v bạn bè đà động viên, giúp đỡ v tạo
điều kiện tốt cho nhất tác giả trong quá trình học tËp vμ
nghiªn cøu.


3


CHƯƠNG 1
Phơng pháp monte carlo và thuật toán

1.1. Phơng pháp Monte Carlo
1.1.1. Giới thiệu chung phơng pháp Monte Carlo
Ví dụ 1.( Bài toán Buffon- nhà toán học Pháp, TK 18)
Trên mặt phẳng của một chiếc bàn, ta kẻ các đờng thẳng
song song, cách đều nhau, cự ly giữa chúng là 1 ( đơn vị độ
dài). Tính xác suất P( ) của biến cố để chiếc kim AB cắt
một trong các đờng thẳng đà kẻ trên mặt bàn.
Giải. Bằng cách tung hú họa nh đà nêu với số lần tung N đủ
lớn, ta xác định số lần kim cắt đờng thẳng là m, dựa vào luật
số lớn ta có đợc

P( )

m
.
N

(*)

Để tính toán hoàn chỉnh hơn, ta ký hiệu:
- là khoảng cách từ trung điểm O của chiếc kim

AB (đà rơi trên mặt bàn, sau khi tung hó häa) ®Õn ®êng
A’



4

thẳng gần nhất trong các đờng đà kẻ.
- là góc

A
nhỏ nhất trong các góc tạo bởi kim AB với

l

O

hớng trực giao đối với các đờng thẳng song song. Trên
B
hình 1, ta thấy =OA, góc = A ' OA, Ω = { OA ' ≤ OA '} .

( )

V× OA ' = OA.cos α = h 2 cos nên ta có
Hình 1.

{ ( 2 ) cos α} .

P(Ω) = P η ≤ h

Ta biÕt r»ng 0 ≤ η ≤ 1 2 ;0 ≤ α ≤ π 2 và chiếc kim đợc tung hú họa
từ một vị trí cao nên , là các đại lợng ngẫu nhiên độc lập,
nhận giá trị trên đoạn 0, 2 một cách đồng khả năng, tức là
có phân phối đều trên đoạn 0, 2 với hàm mật độ


1
, x [ a, b ]

f ( x ) = b − a
0, x ∉[ a, b ] .

cơ thĨ lµ
2
 π 
π , x ∈0, 2 
p ( x) =
0, x ∉0, π .
2



T¬ng tù, đại lợng có phân phối đều trên đoạn 0, 1 2 với
hàm mật độ có dạng

2, y G
0, y ∉G ,

ψ( x) =

Do tÝnh ®éc lËp cđa η và nên hàm mật độ của có dạng


5
4



f ( x, y ) = p( x ).ψ ( y ) =  π , x ∈G

0, x ∉G ,

trong ®ã

G=

{ ( x, y ) : 0 ≤ x ≤ π 2 ,0 ≤ y ≤ 1 2} .

Trªn mặt phẳng với hệ toạ độ vuông góc xOy, ta gọi S là
hình

giới

hạn

bởi

trục

hoành



cung

đờng


cong

( 2 ) cosx, x 0, 2  . Khi ®ã
S = { ( x, y ) : 0 ≤ x ≤ π ,0 ≤ y ≤ ( h ) cosx} ⊂ G.
2
2

y= h

Tõ ®ã ta suy ra

 h2 cosx

4 ÷
2h

P(Ω ) = P { ( α ,η ) ∈ S } = ∫  ∫ dy ÷dx = .
π ÷
π
0  0


π

2

So s¸nh víi (*), ta tính đợc số theo công thức

2hN
m


Chẳng hạn với N=500 thì đợc

.

3,159.

Ví dụ 2. Để giải bài toán quy ho¹ch tuyÕn tÝnh
min { CX : X ∈ M }, víi M = { X∈ ℝn: AX = B, X 0
}
ta có thể sử dụng thuật toán sau đây:
Bớc 1. Chọn ngẫu nhiên điểm X 0 M . Gọi X 0 là phơng án kỷ
lục.
Bớc k.(k=0,1,...). ĐÃ biết phơng án kỷ lục X k . Chọn ngẫu
nhiên X k +1 ∈ M .
+ NÕu CX k +1 ≥ CX k , lo¹i bá X k +1 .
+ NÕu CX k +1 < CX k , g¸n X k := X k +1 , trë l¹i bíc k.


6

Quá trình trên lặp lại với k đủ lớn, ta đợc phơng án xấp xỉ
của phơng án tối u.
1.1.2. Các nội dung của Phơng pháp Monte Carlo
+ Nội dung thứ nhất: Một loại đối tợng khá quan trọng của
phơng pháp Monte Carlo là việc giải một số bài toán tất định,
có thể thực hiện việc giải bằng cách gắn các yếu tố ngẫu
nhiên của bài toán, nghĩa là ta đà xây dựng mô hình xác suất
tơng ứng với các bài toán đà cho, các bài toán không liên quan
đến tính xác suất. Để sử dụng phơng pháp Monte Carlo vào

mỗi bài toán tất định nói trên trớc hết ta lập bài toán xác suất tơng ứng mà lời giải y của bài toán tất định xác định đợc từ lời
giải x của bài toán xác suất bởi một quan hệ hàm y = f(x) nào
đó. Đây là nội dung thứ nhất của phơng pháp Monte Carlo.
Ví dụ. Để xác định lời giải y = của bài toán tính số ,
ta lập mô hình xác suất tơng ứng là tung hú họa chiếc kim có
độ dài AB trên mặt bàn kẻ có sẵn các đờng thẳng song song
cách đều. Lời giải x của bài toán xác suất P( ) để chiếc kim
cắt một trong các đờng thẳng song song x =P( Ω ).
Khi ®ã

2h

2h

y = p(Ω) = = f(x).
x

+ Nội dung thứ hai: Sau công việc lập bài toán xác suất tơng ứng cho bài toán tất định, ta cần giải gần đúng bài tập
xác suất tơng ứng trong mô hình thông qua việc tiến hành các
phép thử ngẫu nhiên. Đây là quá trình thể hiện xác suất tơng
ứng từ kết quả các phép thử ta có thể thiết lập một đại lợng
ngẫu nhiên X m với lời giải x m của mô hình xác suất. Nếu
lời giải y n của bài toán tất định đợc xác định từ x bởi quan
hệ hàm y=f(x) với f là hàm liên tục thì ta có thể xấp xØ nã bëi


7

véctơ ngẫu nhiên Y=f(x) n, nghĩa là X x ∈ ℝm ; Y=f(X) ≈ f(x)
= y ∈ ℝn.

Trong đó Y và X đợc gọi là ớc lợng hay ớc lợng Monte-Carlo
(ULMC) đối với lời giải y và x của lần lợt các bài toán tất định và
xác suất tơng ứng. Khi thể hiện một mô hình xác suất tơng
ứng với mỗi bài toán tất định, cần giải bằng phơng pháp Monte
Carlo ta phải chuyển nó về quá trình thể hiện một trong số
những mô hình xác suất cơ bản nói trên. Đây là nội dung thứ 2
của phơng ph¸p Monte Carlo.
+ Néi dung thø ba: øng dơng cđa phơng pháp Monte Carlo
vào việc giải bằng số các bài toán xác suất với các hiện tợng
ngẫu nhiên không quan sát đợc thuộc loại của bài toán này là
các bài toán quan trọng của lý thuyết thông tin, phục vụ đám
đông, vật lý hạt nhân Các bài toán nói trên có chung một
đặc điểm là các hiện tợng ngẫu nhiên xuất hiện trong đó là
không có khả năng quan sát đợc, nghĩa là ta không thể tiến
hành các thí nghiệm để quan sát chúng trong thực tế.
Chẳng hạn, các bài toán mà quá trình diễn ra quá chậm có
tính chất cơ học chậm chạp trong việc tung kim, tung hòn sỏi,
diễn biến của quá trình động đất trong một tơng lai kh¸ xa
cđa mét vïng l·nh thỉ, diƠn biÕn c¸c quá trình sinh học trong
sự cân bằng sinh thái
Các bài toán có quá trình diễn ra quá nhánh: Các quá trình
khuyếch tán, quá trình phân nhánh các phản ứng dây chuyền
của vật lý hạt nhân, quá trình bức xạ, khuyếch tán và dịch
chuyển trong quang học khí quyển trong đó tốc độ diễn biến
có khi là tốc độ ánh sáng rất phức tạp mà chúng ta có khi
không đủ phơng tiện để quan sát.


8


Các bài toán cần thực hiện thí nghiệm quá đắt: Nh việc
bổ sung khá lớn những mũi khoan thăm dò trữ lợng dầu khí tại
một khu mỏ nào đó, dự báo lu lợng nớc về các hồ điều khiển
các nhà máy thủy điện, dự báo kết quả của các trận đấu,
quân sự, thể thao. Công việc dự báo tiên nghiệm ta không thể
chờ đợi các hiện tợng ngẫu nhiên xảy ra, nghĩa là không thể tổ
chức thể hiện các thí nghiệm ngẫu nhiên, để dựa vào đó phát
biểu lời giải của bài toán dự báo. Tơng tự với các trờng hợp nh
vậy bằng cách gắn vào bài toán các yêu tố ngẫu nhiên, ta cần
xây dựng mô hình ảo (mô phỏng) gần giống nh thật để
nghiên cứu trên máy tính. Đây có thể xem nội dung thứ ba của
phơng pháp Monte Carlo.
Một cách chung nhất, phơng pháp Monte Carlo là phơng
pháp số giải các bài toán bằng cách mô hình hóa các đại lợng
ngẫu nhiên. Về mặt nội dung, phơng pháp này liên quan tới t tởng xây dựng một quá trình ngẫu nhiên giả tạo có tất cả
những đặc tính cần thiết của hệ thống cần nghiên cứu. Phơng pháp Monte Carlo có thể áp dụng đợc ở mọi nơi, miễn là ở
đó bài toán cho phép mô tả bằng toàn thể hay một phần của
lý thuyết xác suất, dù rằng bài toán đó có thể đà có nội dung
tiền định chặt chẽ.
Nh vậy, sử dụng phơng pháp Monte Carlo để giải bài toán
nào đó, ta cần thực hiện tuần tự nh sau:
ã Xây dựng các mô hình xác suất của các quá trình thực
tiễn cần nghiên cứu.
ã Mô hình hóa các đại lợng ngẫu nhiên với luật phân phối
cho trớc.
ã Giải bài toán theo lý thuyết ớc lợng thèng kª.


9


Giá trị thực tiễn của phơng pháp Monte Carlo là nó sử dụng
những phép thử thay cho các kết quả tính toán dựa trên các
đại lợng ngẫu nhiên. Bởi vậy, có thể xác định đợc các đặc trng
của quá trình cần nghiên cứu mà không cần dùng các phơng
trình mô tả sự thay đổi của quá trình đà cho.
Một tên gọi khác của phơng pháp Monte Carlo là phơng
pháp thử thống kê. Bài toán cơ bản của phơng pháp Monte
Carlo là xác định xác suất của sự kiện bất kỳ và các giá trị
trung bình của đại lợng ngẫu nhiên qua kết quả của các phép
thử lặp đi lặp lại nhiều lần.
Cơ sở của lợc đồ chung về phơng pháp Monte Carlo là
định lý giới hạn trung tâm. Theo định lý đó thì có thể coi
mọi đại lợng m cha biết nh là kỳ vọng toán học của một đại lợng
ngẫu nhiên nào đó, tức là E =m với phơng sai D = 2 .
Từ định lý giới hạn trung tâm ta có hệ thức
1
P
N

N

∑ξ
j =1

j

−m p


N



 ≈ 0,997 .


trong ®ã ξ j ,(j=1,2, , N) là các giá trị của đại lợng ngẫu nhiên
nhận đợc ở mỗi cột trong N phép thử. Hệ thức đó xác định số
cha biết m và đồng thời đánh giá đợc sai số. Từ hệ thức đó
suy ra rằng khi tăng số phép thử thì độ chính xác của nghiệm
tăng lên.
Nh vậy, thực chất của phơng pháp Monte Carlo là chơng
trình để tiến hành phép thử ngẫu nhiên và thực hiện một
cách ngẫu nhiên. Tuy nhiên trong thực tế thờng dùng một cơ chế
tiêu chuẩn để sản sinh ra các đại lợng ngẫu nhiên có phân phối
miền trên một miền nào đó (chẳng hạn trên đoạn [0,1]). Có
thể nhận đợc số ngẫu nhiên ở phơng pháp Monte Carlo theo
một trong những phơng pháp đà biết.


10

Nhợc điểm quan trọng của phơng pháp Monte Carlo là để
nhận đợc các đặc trng của quá trình nghiên cứu với độ chính
xác cho trớc thì cần quá nhiều phép thử. Chẳng hạn, với độ
chính xác >0 cho trớc, để nhận đợc giá trị trung bình x của
đại lợng ngẫu nhiên , thì cần phải tiến hành số phép thử là
N=

4D


2

, trong đó D là phơng sai. Nh vậy với D = 0,01 và =

0,001 thì N = 400.000 phép thử. Mỗi phép thử, độ phức tạp
tính toán của thuật toán phụ thuộc độ dài dữ liệu, tức là phụ
thuộc số biến n của bài toán. Vì vậy, trong nhiều bài toán phơng pháp Monte Carlo phải hạn chế về số biến (Chẳng hạn: phơng pháp Monte Carlo giải bài toán quy hoạch thờng chỉ áp
dụng với các bài toán có số ẩn không lớn lắm ( số ẩn n 30)).
Ngày nay, với các thế hệ máy tính có tốc độ ngày càng cao
thì vấn đề khối lợng tính toán có thể khắc phục đợc. Do vậy,
sự kết hợp của những thành tựu máy tính điện tử với phơng
pháp Monte Carlo nhằm giải quyết các bài to¸n thuéc c¸c lÜnh
vùc kinh tÕ - x· héi kh¸c nhau có thể xem nh đó là cuộc cách
mạng trong toán học tính toán.
Cơ sở toán học của phơng pháp Monte Carlo là luật số lớn
thuộc lý thuyết xác suất thống kê toán.

1.2. Sơ lợc về Thuật toán
Thuật toán đà đợc biết đến từ rất lâu. Bản thân thuật
ngữ thuật toán (Algorithm) là viết tắt tên của nhà toán học thÕ
kû IX : AbuJa’fa Mohammed ibn Musa al-Khowarizmi. Kh¸i niƯm
tht toán có một lịch sử phát triển lâu dài, một sè mèc quan
träng:


11

ã Đầu tiên, thuật toán đợc hiểu là các quy tắc thực hiện
các phép tính số học đợc viết trong hệ cơ đếm thập phân.
ã Euclid đề xuất thuật toán để tìm ớc số chung lớn nhất

của hai số GCD(x,y).
ã Hibert vào những năm 1900 đà đề xuất một vấn đề rất
hóc búa cho cộng đồng các nhà toán học : HÃy xây dựng một
thủ tục mà theo đó 1 số hữu hạn phép toán có thể xác định 1
đa thức có nghiệm hay không?. Vấn đề này đợc biết dới tên
gọi Bài toán thứ 10 của Hibert.
ã Chóng ta cã vÝ dơ vỊ tht to¸n nhng cha có định
nghĩa hình thức thể nào là thuật toán. Để chứng minh là
không tồn tại thuật toán giải bài toán tính toán, ta cần đĩnh
nghĩa hình thức của thuật toán.
ã Năm 1936, hai nhà toán học Turing và Church mỗi ngời
đà đề xuất một mô hình tính toán riêng mà sau đó đợc
chứng minh là tơng đơng.
ã Bài toán về tính dừng (Halting problem) và bài toán
nghiệm nguyên của đa thức ( integer Root problem) đà đợc
chứng minh là các bài toán không có thuật toán giải.
Vậy khái niệm thuật toán : Thuật toán là 1 hệ thống chặt
chẽ và rõ ràng các quy tắc nhằm xác định một dÃy các thao tác
trên những đối tợng, sao cho sau một số hữu hạn bớc thực hiện
các thao tác ta đạt trớc mục tiêu định trớc.
1.2.1. Bài toán quy hoạch
Có dạng
(1)

min f(x)
(2)


12


víi ®iỊu kiƯn

x ∈ D,

a j ≤ x j ≤ b j , j = 1,2,..., n.

(3)
trong ®ã x = (x1, x2, …, xn) ∈ D, D ⊂ ℝn vµ hàm mục tiêu f(x).
Ký hiệu G = {x = (xj) ∈ ℝn : aj ≤ xj ≤ bj}, M lµ tập phơng án.
1.2.2. Thuật toán Monte Carlo tổng quát
Bớc 0. Xuất phát từ phơng án x(0) M, ký hiệu 0 = f(x(0)), lúc
này gọi x(0) là phơng án kỷ lơc.
Bíc k (k = 1, 2, ...).
k.1. Gi¶ sư ta đang biết phơng án kỷ lục là x(k) và k =
f(x(k)). Với tập G, độ đo mesG đợc xác định, chọn ngẫu nhiên
điểm (k) có phân phối đều trên G.
k.2. KiĨm tra ξ(k) ∈ M hay kh«ng?
+ NÕu ξ(k) ∉ M thì loại bỏ (k), trở lại bớc k.
+ Nếu (k) M thì số phơng án tăng lên 1. Gán x(k+1) := (k)
k.3. Tính giá trị hàm mục tiêu f(x(k+1)) và kiểm tra
+ Nếu f(x(k+1)) > k, thì x(k+1) không tốt hơn x(k), trở lại bớc
k.1.
+ Nếu f(x(k+1)) < k, thì x(k+1) tốt hơn x(k). Gán k := k + 1,
trở lại bớc k.1.
Để chứng minh sự hội tụ của phơng pháp Monte-Carlo giải
bài toán quy hoạch nh đà nêu, ta ký hiệu {x(k)} là dÃy các phơng
án tìm đợc trong quá trình thực hiện thuật toán. Nh vậy, ë bíc
thø k ta cã
x(k+1)



:= 


ξ(k), nÕu f(ξ(k)) ≤ f(x(k))
(*)
x(k), nÕu f(ξ(k)) > f(x(k)),


13

trong đó (k) là vectơ ngẫu nhiên ở bớc lặp thứ k nhận đợc từ
thuật toán Monte Carlo.
Ta cũng ký hiệu mesM là diện tích của M (theo nghĩa
độ đo trong n). Khi đó với tập khả tích A M, ta có công thức
tính xác suất để mỗi M thuộc A (coi đợc phân đều trên
M) là
P( A) =

mesA
.
mesM

1.2.2.1. Định nghĩa. Ta nói bài toán quy hoạch đà cho có
giá trị cực tiểu không cô lËp nÕu nã cã Ýt nhÊt mét nghiÖm x*,
sao cho
mes{x ∈ M : f(x) < f(x*) + ε } > 0, với mọi > 0 đủ bé.
1.2.2.2. Định lý. Bài toán quy hoạch đà nêu với giá trị cực
tiểu không cô lập và dÃy {x(k)} đợc thiết lập từ thuật toán MonteCarlo, khi đó ta có
P{klim

f(x(k)) = f(x*)} = 1.
→∞
Chøng minh. Víi mäi ε > 0 ®đ bÐ, ta gọi Ak() là biến cố
ngẫu nhiên xẩy ra đối với x(k) tho¶ m·n f(x(k)) < f(x*) + ε, ký hiƯu
Ak(ε) := { f(x(k)) < f(x*) + ε }, víi mäi k ≥ 1.
Theo (*), ta cã
f(x(k+1)) = min{ f(ξ(1)), f(ξ(2)), ..., f((k))
Nếu gọi biến cố đối lập của Ak() là A k(ε) th×
(k)
A k(ε) = { f(x ) ≥ f(x*) +

ε }, víi mäi k ≥ 1.

Tõ (**) suy ra
A k(ε) =



k


i =1

{ f(x(i)) ≥ f(x*) + ε }.

(**)


14







P{   A k(ε)} ≤ P{  A k(ε)} ≤
N =1 k = N

k=N



∑ P( A (ε )) ,

k =N

k

ta suy ra




P{  

N =1 k = N



k


k =N

i =1

∑ P( 

A k(ε)} ≤

{ f(x(i)) ≥ f(x*) + ε }).

Do {(k)} là dÃy độc lập, cùng phân phối nên
k

P(  { f(x(i)) ≥ f(x*) + ε }) =
i =1

=

k


i =1

P{ f(x(i)) ≥ f(x*) + ε } =

= [P{ f(ξ) ≥ f(x*) + ε }]k = (1-pε )k,
trong ®ã ξ = klim
ξ(k) vµ pε := P{ f(ξ) < f(x*) + ε }.
→∞

Tõ ®ã suy ra




P{   A k(ε)} ≤
N =1 k = N





(1 - p)k.

k=N

(***)

Đặt
A() := {x M : f(x) < f(x*) + ε}.
Tõ gi¶ thiÕt vỊ tÝnh không cô lập của giá trị cực tiểu f(x*), ta

mesA() > 0, víi mäi ε > 0.
Do vËy th×
pε = P{ f(ξ) < f(x*) + ε } = P{ξ ∈ A()} =

mesA( )
> 0.
mesM


Từ (***) ta có đợc




0 P{   A k(ε)} ≤
N =1 k = N

(1 − pε ) N
(1 - pε) =
, víi mäi N > 1.
p





k

k=N

Cho N , ta thu đợc




P{ A k(ε)} = 0.
N =1 k = N



15

Hay lµ


P{ 





N =1 k = N





Ak(ε)}= 1 - P{   A k(ε)} = 1.
N =1 k = N

§iỊu đó có nghĩa là với xác suất bằng 1 và với > 0 đủ bé,
tồn tại N = N(), ®Ó xÈy ra biÕn cè





k = N (ε )

Ak(ε), sao cho víi mäi k ≥


N(ε), ta cã
| f(x(k+1)) - f(x*)| = f(x(k+1)) - f(x*) < ε.
VËy
P{klim
f(x(k)) = f(x*)} = 1.
→∞
§ã là điều phải chứng minh.
Để có thể viết chơng trình cho thuật toán Monte-Carlo, ta
thay việc lựa chọn ngẫu nhiên điểm M là cách chọn ngẫu
nhiên theo tọa ®é b»ng thuËt to¸n nh sau
1.2.3. ThuËt to¸n Monte-Carlo theo toạ độ
Để giải bài toán (1)-(3), ta sử dụng thuật toán Monte-Carlo
nh sau:
Bớc 0. Xuất phát từ phơng án x, ký hiệu = f(x).
Bớc 1. Với mỗi j, ta tạo một số ngẫu nhiên phân bố đều trên
đoạn [aj, bj] theo c«ng thøc
x'j = aj + ξ(bj - aj)

(a)

trong đó là một số ngẫu nhiên phân bố đều trên đoạn [0, 1].
Chú ý rằng sau mỗi bớc lặp số điểm ngẫu nhiên đợc tăng
lên 1. Bằng cách chọn số ngẫu nhiên sử dụng hàm Random, với
câu lệnh randomize khởi tạo bộ tạo số ngẫu nhiên khác nhau
(không lặp lại) nhờ đồng hồ của máy tính.
Nh vậy sau n lần chọn số ngẫu nhiên ta đợc bộ giá trị


16


x' = (x'1, …, x'n).
Bíc 2. KiĨm tra xem x' có thuộc M hay không.
+ Nếu x' M thì trở lại bớc 1.
+ Ngợc lại, x' M thì số phơng án tìm đợc tăng lên 1 và
sang bớc 3.
Bớc 3. Tính giá trị hàm mục tiêu f(x').
+ Nếu f(x') > thì x' tồi hơn x. Trở lại bớc 1.
+ Nếu f(x') < thì x' tốt hơn x, gán x := x', := f(x'),
rồi trở lại bíc 1.
Nh ®· chøng minh ë 1.2.2.2, ta cã tht toán vừa nêu là hội
tụ theo xác suất, nghĩa là với số bớc lặp đủ lớn ta tìm đợc lời
giải với xác suất bằng 1.

Chơng 2
Thiết lập chơng trình bằng ngôn ngữ lập trình
Visual Basic

2.1. Giới thiệu Visual Basic
2.1.1. Visual Basic là gì
Visual Basic (vit tt VB) l mt ngôn ng lp trình hng s
kin (event-driven) v môi trng phát trin tích hp (IDE) kt bó
c phát trin u tiên bi Alan Cooper di tên d án Ruby
(Project Ruby) v sau đã được Microsoft mua và cải tiến nhiều.


17

Phiªn bản cũ của Visual Basic bắt nguồn phần lớn t BASIC v
lp trình viên phát trin các giao din ngi dựng ha (GUI)

theo mô hình phát trin ứng dụng nhanh (Rapid Application
Development, RAD) truy cập c¸c cơ sở dữ liệu dùng DAO (Data
Access Objects), RDO (Remote Data Objects), hay ADO (ActiveX
Data Objects) lập c¸c điều khiển và đối tợng ActiveX.
Dựng Visual Basic l cách nhanh v tt nhất để lập tr×nh cho
Microsoft Windows v× Visual Basic sẽ cung cấp cho bạn một bộ
c«ng cụ hồn chỉnh để đơn giản hãa việc triển khai lËp tr×nh øng
dơng cho MS Windows.
Visual Basic còn có hai dng khác l Visual Basic for
Application (VBA) và VBScript. VBA là ng«n ngữ nằm phía sau
các chng trình Word, Excel, MSAccess, MSProject, .v.v.. còn
gi là Macros. Dïng VBA trong MS Office, ta cã thể làm tăng chức
năng bằng c¸ch tự động hãa c¸c chương trình. Còn VBScript c
dùng cho Internet v trong chính h điều hành Windows.
Visual Basic là g×?
Phần "Visual" đề cập đến phương ph¸p được sử dụng để tạo giao
diện đồ họa người dïng (Graphical User Interface - GUI). Visual
Basic cã sẵn những bộ phận h×nh ảnh, gọi là controls bạn cã thể
sắp đặt vị trÝ và quyết định c¸c đặc tÝnh ca chúng trên mt
khung mn hình, gi l form. Nu bạn đã từng sử dụng chương
tr×nh vẽ chẳng hạn như Paint, bạn đã cã sẵn c¸c kỹ năng cần thiết
để tạo một GUI cho Visual Basic.
Phần "Basic" đề cập đến ng«n ngữ BASIC (Beginners AllPurpose Symbolic Instruction Code) một ng«n ngữ lập tr×nh đơn
giản, dễ học, được chế ra cho các khoa hc gia. Visual Basic cha
n hng trm câu lệnh (commands), hàm (functions) và từ
khãa (keywords). Rất nhiều commands, functions liªn hệ trực tiếp


18


đến MS Windows GUI. Những người mới bắt đầu cã th vit chng
trình bng cách hc ch mt vi commands, functions và
keywords. Khả năng của ng«n ngữ này cho phÐp nhng ngi
chuyên nghip hon thnh bt k iu gì nhờ sử dụng ngôn ngữ
lập trình MS Windows nào khác.
2.1.2. Cài đặt Visual Basic (VB6)
ci t VB6, máy tính ca bạn cần phải cã một ổ đĩa CDROM (CD drive) . Bạn cần Ýt nhất 32 MB RAM, 2 GB hard disk và
CPU Pentium II. Khi bỏ VB6 CD vào CD drive, nã sẽ tự khởi động
để display menu cho bạn chọn những thứ g× cần Setup, hăy click
Install Visual Basic 6.0 để cài VB6. Ngoại trừ c¸c file hệ điều hành
(Operating System) trong thư mục (folder) \Os, c¸c file trong a
compact u không b nén. Vì th, bn có thể sử dụng chóng
trực tiếp từ đĩa. VÝ dụ, cã nhiều c«ng cụ và thành phần trong
folder \Tools vốn cã thể được cài đặt trực tiÕp tõ CD-ROM.
Ngoài ra, bạn cã thể chạy Setup khi nào cần thiết. VÝ dụ, bạn
cã thể chạy Setup để cài đặt lại Visual Basic trong folder khác,
hoc ci t thêm bt các phn ca VB6.
Nu vì lý do h thng không install đợc đĩa, bạn có thể
vào địa chỉ của trang Web này:
/>
2.1.3. Khëi ®éng Visual Basic
Sau khi đ· cài đặt Visual Basic trên máy, ta có thể khởi động
chơng trình Visual Basic theo c¸ch sau:
Start\Programs\MiscoSoft Visual Studio 6.0\MicroSoft
Visual Basic 6.0


19

2.1.4. Tho¸t khái Visual Basic

Để tho¸t khỏi Visual Basic ta làm theo c¸ch sau:
Vào menu File\Exit. Khi tho¸t khỏi Visual Basic nu ta cha
ghi li chng trình v các thnh phn liên quan n chng
trình Visual Basic s nhc nh chúng ta ghi li.
2.1.5. Hóng dẫn cài đặt chơng trình mô phỏng
thuật toán Monte Carlo theo tọa độ (đà đợc đóng gói)
Quy trình cài đặt, vào gói Package(2) thực hiện các bớc
sau:
Bớc 1. Vào biểu tợng Setup, xuất hiện màn h×nh MonCar
Setup / Ên OK.


20

Bớc 2. Xuất hiện giao diện, ấn vào biểu tợng góc bên trái
của giao diện.

Bớc 3. Tiếp theo, xuất hiện b¶ng MonCar – Choose Program
Group, chän MonCar / Ên Continue.


21

Bớc 4. Hộp thông báo Version Conflict / Yes.
Bớc 5. Hộp thông báo MonCar Setup was completed
successfully / ấn OK.

Bớc 6. Sau khi cài đặt xong vào Start / All programs /
MonCar / chọn biểu
tợng MonCar.

2.1.6. Từ khóa, tên, quy tắc đặt tên và một số câu
lệnh thờng gặp
2.1.6.1. T khóa (keywords)
L các t dnh riêng cho Visual Basic, mi từ cã một chức
năng nhất định. Khi sử dụng phải dùng úng vi cú pháp.
Mt s t khoỏ:
DIM
FOR

END

SUB

WHILE

FUNCTION

PRIVATE

PUBLIC

CONST

END vvv......

2.1.6.2. Tên, quy tắc đặt tên (Indentifier)

IF

THEN



22

* Tªn là một d·y ký tự được tạo thành t các ch cái, ch s v
du gch ni.
* Tên thng dùng t tên cho các i lng trong chng
trình nh tên bin, hng, tên kiu d liu mi vv....
* Ký t u tiên ca tên không c l ch s.
* Tên không c trùng vi t khóa.
+ Tên chuẩn: là tªn do Visual Basic định nghĩa trước dïng ch
tên các hm, hng, bin, th tc, hm, s kin trong Visual Basic.
+ Tên do ngi lp trình t: t tùy ý nhng phi tuân th
theo nguyên tc ca Visual Basic như tªn biến, tªn kiểu dữ liệu
mới, tªn thủ tc, tên hm...
2.1.6.3. Một số câu lệnh thờng gặp
a. Câu lnh gán
Cú pháp:
Tên_bin = biu thc
hoc
Tên_i_tng.Thuc_tính = biu thc
Hot ng: Khi gp lnh ny chng trình s tính giá tr ca biu
thc bên phi
ca lnh v gán giá tr ó cho biến hoặc thuộc tÝnh ở vế tr¸i.
VÝ dụ: s = s*b.
b. C©u lệnh END
Khi Visual Basic gặp cÊu lệnh End chng trình s dng li.
Nu ta ang trong môi trng phát trin ng dng thì s quay tr
v môi trng phát trin. Trong môi trng c lp khi gp câu
lnh End tt c ca s chng trình m ra sẽ bị đãng lại và

chương tr×nh bị xãa khỏi bộ nhớ. Ta cã thể đặt c©u lệnh End ở
nhiều nơi trong chng trình tuy nhiên phong cách lp trình tt
l hạn chế tối đa c©u lệnh này.


23

c. C©u lệnh PRINT
C©u lệnh này nhằm mục đÝch in giá tr ca biu thc lên trên
mt

Form.

Cú pháp nh sau:
Print <Biu thc>[,<Biu thc 2>]
Theo câu lnh ny máy tính giá tr các biu thc v in các
giá tr ó trên biểu mẫu. Nếu hai biểu thức c¸ch nhau dấu phẩy,
c¸c gi¸ trị được in c¸ch nhau một dấu c¸ch. Nếu hai biu thc cách
nhau bi du chm phy (;) thì gi¸ trị của biểu thức sau sẽ được in
ở vïng tiếp theo. Một vïng gồm 14 ký tự đi liền nhau trên mt biu
mu.
Chú ý: Khi son tho chng trình cã thể gâ dấu hỏi “?” thay
cho gâ từ “Print”. Visual Basic sẽ tự thay dấu “?” bằng từ “Print” .
VÝ dụ: Print “Diện tÝch tam gi¸c là s=”,str(s).
d. Lệnh MSGBOX
Lnh MsgBox to ra trên mn hình mt ca s nh m ta gi
l hp thông báo. Hp ny cha mt thông báo m chng trình
mun gi cho ngi s dụng và một nót lệnh OK. Khi người sử
dụng đã xem xong thông báo v nháy chut vo nút lnh OK. Hp
thông báo ny s bin mt.

Lnh ny có cú pháp nh sau:
MsgBox Thông báo, [Kiu], [Tiêu ].
Trong ó:
Thông báo: L mt dÃy ký t to nên dòng thông báo đến
người

sử

dụng.

Tiªu đề: Là d·y ký tự được dïng làm tiªu ca hp thông báo.
Kiu: L mt s nguyên xác nh biu tng dùng cnh báo.
2.1.6.4. Câu lệnh, khối lệnh, bẫy lỗi trong Visual
Basic


24

a. Câu lệnh, khối lệnh
ã Một dòng lệnh: If <điều kiện> Then <dòng lệnh>
ã Nhiều dòng lệnh : If <điều kiện> Then
Các dòng lệnh
End If
Trong đó, <điều kiện>: biểu thức mà kết quả trả về kiểu
Boolean.
ý nghĩa câu lệnh: Các dòng lệnh hay dòng lệnh sẽ đợc thi
hành nếu nh điều kiện là đúng. Còn nếu nh điều kiện là sai
thì câu lệnh tiếp theo sau cấu trúc If Then đợc thi hành.
ã Dạng đầy đủ: If Then Else
If <®iỊu kiƯn 1> Then

[Khèi lƯnh 1]
ElseIf <®iỊu kiƯn 2> Then
[Khèi lƯnh 2]…
[Else
[Khèi lƯnh n]]
End If
Visual Basic sÏ kiĨm tra c¸c điều kiện, nếu điều kiện nào
đúng thì khối lệnh tơng ứng sẽ đợc thi hành. Ngợc lại nếu
không có điều kiện nào đúng thì khối lệnh sau từ khóa Else
sẽ đợc thi hành.
ã Lặp không biết trớc số lần lặp
Khối lệnh Do While Loop. Đây là cấu trúc lặp không
xác định trớc số lần lặp trong đó, số lần lặp sẽ đợc quyết
định bởi một biểu thức điều kiện. Biểu thức điều kiện phải
có kết quả là True hoặc False.
Cú pháp:
Do While <điều kiện>


25

<khối lệnh> điều kiện
Loop
Đúng Sai.
Khối lệnh sẽ đợc thi hành nếu khi nào điều kiện không còn
đúng nữa. Do biểu thức điều kiện đợc kiểm tra trớc khi thi
hành khối lệnh, do đó có thể khối lệnh
sẽ không đợc thực hiện một lần nào cả.
Khối lệnh Do Loop While


Cú pháp:
Do
<khối lệnh>
Loop While <điều kiện>.
Khối lệnh sẽ đợc thực hiện, sau đó biểu thức điều kiện đợc
kiểm tra, nếu điều kiện còn đúng thì khối lệnh sẽ đợc thực
hiện tiếp tục. Do biểu thức điều kiện đợc kiểm tra sau, do đó
khối lệnh sẽ đợc thực hiện ít nhất một lần.
b. Bẫy lỗi trong Visual Basic
Cú pháp:
On Error GoTo <Tên nhÃn>
<Các câu lệnh có thể gây ra lỗi>
<Tên nhÃn>:
<Các câu lệnh xử lý lỗi>.
ý nghĩa:
- <Tên nhÃn>: là một tên đợc đặt theo quy tắc của
một danh biểu.
- Nếu một lệnh trong lỗi> thì khi chơng trình thực thi đến câu lệnh đó, chơng
trình sẽ tự động nhảy đến chơng trình định nghĩa bên dới
< Tên nhÃn> để thực thi.


×