Đại Học Quốc Gia TP.HCM
Trường Đại Học Công Nghệ Thông Tin
TIỂU LUẬN MÔN HỌC
ĐIỆN TOÁN LƯỚI VÀ ĐÁM MÂY
SONG SONG HÓA THUẬT GIẢI ACO
GIẢI BÀI TOÁN TSP
GVHD: PGS. TS. NGUYỄN PHI KHỨ
HVTH: NGUYỄN MINH PHÁT
MSHV: CH1301047
TP. HỒ CHÍ MINH
Tháng 6/2014
TỔNG QUAN
Mục đích của bài toán tối ưu tổ hợp là tìm lời giải tốt nhất trong các lời giải có thể và
không gian tìm kiếm lời giải của bài toán là rời rạc .Nhiều bài toán tối ưu tổ hợp có độ phức tạp
tính toán cao và được phân lọai thuộc lớp NP khó .Việc tìm ra lời giải tối ưu cho các bài toán
này cho các hệ thống song song lớn nhất cũng không thể hoàn thành được trong giới hạn thời
gian cho phép vì vậy các kỹ thuật heuristic cho việc giải các bài toán tổ hợp theo hướng xấp xỉ
đã được phát triển để tìm ra các lời giải gần tối ưu (hay xấp xỉ )trong giới hạn thời gian cho
phép. Bài toán người du lịch (TSP) là một bài toán cổ điển thuộc lớp NP được nghiên cứu sâu
trong lĩnh vực tối ưu tổ hợp.
Metaheuristic là một cách gọi chung cho các giải thuật heuristic trong việc giải quyết các
bài toán tổ hợp khó. Metaheuristic bao gồm những chiến lược khác nhau trong việc khám phá
không gian tìm kiếm bằng cách sử dụng những phương thức khác nhau và phải đạt được sự cân
bằng giữa tính đa dạng và chuyên sâu của không gian tìm kiếm. Một cài đặt thành công của
metaheuristic trong một bài toán tổ hợp phải cân bằng giữa sự khai thác được kinh nghiệm thu
thập được trong quá trình tìm kiếm để xác định được những vùng với những lời giải có chất
lượng cao gần tối ưu. Những ví dụ của metaheuristic bao gồm giải thuật luyện thép (SA) , giải
thuật di truyền (GA) , giải thuật đàn kiến (ACO) ,…Giải thuật đàn kiến là metaheuristic dùng
chiến lược của kiến trong thế giới thực để giải bài toán tối ưu.
Với độ phức tạp tính toán cao của các bài toán tối ưu tổ hợp cũng như đòi hỏi về mặt thời
gian , việc giải các bài toán này yêu cầu cần phải có những siêu máy tính. Con người hy vọng sẽ
đem sức mạnh của siêu máy tính tới tất cả người dùng PC đơn lẻ trên thế giới. Để giải quyết vấn
đề này người ta đã sử dụng Điện toán lưới và Điện toán đám mây.
Trong phạm vi tiểu luận này sẽ tìm hiểu cài đặt song song hóa giải thuật ACO để giải quyết bài
toán TSP. Song song hóa các giải thuật metaheuristic phải đạt được 2 yêu cầu : đa dạng hóa để
khám phá được nhiều vùng trong không gian tìm kiếm và tăng tốc độ tìm kiếm . Nhiều mô hình
song song hoái đã được đề xuất cho nhiều metaheuristic. ACO và GA đều là các cách tiếp cận
dựa trên tập cá thể và vì vậy khá tự nhiên cho việc xử lý song song .
Tiểu luận nhằm mục đích nghiên cứu ,cài đặt thực tế giải thuật song song hóa ACO nhằm
mục đích so sánh hiệu quả của giải thuật ACO thông thường và khả năng song song hóa của các
mô hình song song cho việc tìm kiếm lời giản gần tối ưu của bài tóan TSP. Mô hình thực
nghiệm dùng MPI và một vài bài toán trong thư viện TSPLIB.
1. Bài toán TSP (Traveling Salesman Problem)
1.1 Giới thiệu bài toán
!"#$%&'
()"*+,#$$-"./0
121'3+#$4256
)#%
Hình 1: Việc kết nối 15 thành phố lớn nhất nước Đức với lộ trình ngắn
nhất là một phép tính khá phức tạp.
""78(6(9:.;7<"./<
=>>#">?@8A9:
2-B1%CA9:1-"8
B881#%DBE 7###'#
F2""($/#(E"
G"BH2A1'"%I"6J
.;)E#9:1"*"#H
$8.;9879:"+KIL%
MB9N9#.##O'#!-/
#P'1P;#%86O'#.
##8BFO5'8GQR,S#$-T
24US6VEQ#W#"1--2;%
&"I./9X=>Y>Z">?"*
"12"7%D2'#F
"88[2\/6.9:]8"8'(6
F6.\Q9[59*EH%
1.2. Nhắc lại bài toán Người du lịch
&"I./9X6-./0"./.
=>?68J7./")#[
#$6]4.;#$984]8
#$4\#(^6.;#1"'_`a5
"7.]$LYbc"de""
Z>8"f6.;"$"-gh8'RXP
' i)j"9%I225"2A"
'\5#A#F"3>"$k="8
F"./J7l*"IZ@2?%I./
04B$']"88([
3`mno=omQ?6"'3,SSo
".;\$Q\,o%maV6
9O"TJ'#:3"*%
&"21#19.\B*R
X.
D"RXQ48
27$pq=M@F#Q6r@F#
?2"B.\%--e"
2P7$
H%
1.3. Ý tưởng mô phỏng hành vi của đàn kiến thực trong tự nhiên
I3`mVm67./sCK>>"O
B$']A(E'L>="
'''\?67(EtD'4Bu=K">&9>
r)#>>?%
D:167v'4BR=929
!406.-T?$P '\R
A362'04]" l
""/ \%f']4"'>"
'4\$.;4.6.
$/]./F8"'2).\7
01=VS@`SSw$.;?%
f'].;7h.K"(O
(276+"'981B1.;2
7'x=#>"">?././-l
T>""./2.;xF%D'x8*
"28>"/69"F84-.;x5
)#Q.6."/X
0T2.;xF"\99"k.;
x4)#Q.#$59F#$x5
8TB98!2906*k9"
.;x9kTX8"x
"/%
I3`mm`6\5'] (EP'6
"7./&QC"K""v)89OF"'=L
L"68J7eE'6LY8>?4A9:"
"./9X6B$"F'y B%"
"86$\EF"L@D8>=F
"P'E]"\#F"eE'?.;B
$3`mmU#(h8' zrrr=z>"jr>9
r>"r>>6E#ABE"7
4'\?%eE86K""Ov)89O.;E
'#A#A9:"
"22hy"7
ON%
1.4. Thuật toán đàn kiến giải bài toán
người du lịch
s10.\ "'
O6K"")89O"'"={?k2
.'x1./34'>"R
x1O7"./2Rx"1%M\"
I./9XRX"B\7$"
r9>*Q|6K""0\+=6}?"7
$9=6}?R'x2%&46Rx
+.;5"!!$"2%
Phương pháp tìm đường đi mô phỏng hành vi con kiến
D"'T'-./[Q)#]
"Q]85Q46Q"'T7
Q..;]"F# >")
"2
@~M=?F#Q ..;"'E]%
7B>l#()OO7
"']8'X[Q]Q%
211BA.
]8'XO7Q'#>"1 "
'.;O7G>")=A
Q"2)"T23.;
7"6.B2yQ2
)#B.;72.;7\#
B?%•.58.;1E]€F&)>)$$=g">8
b>>?T.;-8%M)8=837Q'#
>" "'?_EF\R'x.;7
=>"( "'O?_EX\96
*E$11EO7 "'#("%
Kỹ thuật bánh xe xổ số
s8€F#P'89:"#.##-'
9O")6E"#W#"D77=Y>>"? F
"98=p>>L"?%D:1€F.
pMq•
`
6
,
6‚6
ƒF# 6#
`
6#
,
6‚6#)
O7Q'#>"[ .A
`
6
,
6‚6
A007`"Q1'#%s1
".' *Q2)\6.
G" Q2)#
./$G
=S6„R7H""
D8B#H" J
]8)P$=J.;#4B
!?6…]8B'
]8TQ"#4".k2
1F88#4\T3"2%
D(-F8€F8.;7&)>)P$%
I.F86"'[Q)#64.;\3
Q'#>">"]80=3)"9l?"'
3\Q$x]8Q46'l-%
†-8.;##6-$=290?
T.;F#F"'"/ $=B./(
">"$J#6\./;#H=$Q‡q,SS?$J#
!nSS -']$.6J\./;#\#
\$4#\6x8"[9*E:1%
Y"]-"'-./'x=?
.;F#F6-lX'P9"]-89"]-
(k8 "'2%D2F#Fx6+
2.5X'.; F"%DF#F
x.
Y+J#="'-.;- -?6'
x+.;F#F>"BA
"2 7$8=59y7.F8-+4F#
F.;x=6}?T.; ./.;
7S6V"8.-%I".;8
2+=6}?J.;(:.;x Xx8
"["']6:1.;(.
"2†!$6g
9- "'A%
I/EF#Fx86+J#=8+4"
''-?6R'xT8P="
"394?.5']8'X7 "'62
15.\#871.'.\#G"
'2B]2*%I/F8F"23-
.;/$"*./;#9*EO\%
2. Điện toán lưới và điện toán đám mây
2.1 Giới thiệu Điện toán lưới ( Grid computing)
p9"E$#6$(""6"#W#
"^681OF#;#R8F#
Xh6x8>"3ˆ26B6"6#(84
.;9X: ./9:%
sE".\=sCg?2y"#4
28(68 'X.*"9"E#6.;
t"2u=‰>?+8(\%M-sCg#2*
3("B.;9:"/1|6l2
1"#W#9"E#3./$6A
)hBO'6lŠ8]8-("F"%
"26#(GT.;*5A#-sCg21.;)8
9O[(4E262##4"O8$.
3("%
sCg"#W#"2A3("#k.
R)h63B3.*61[2"
E$R6"#W#./9:A9:8F#
B$"(3E"\%p$../.\d>
)>9$]d>6./9:sCgk-8
8("O\98%
7 sCg9OF#;#5 Š
"A6(9:f'l9X:.\5=ipYL?6"#W#]
B./+##Xh%M\sCg6PA
9"E#21$.23("R9*E6F#
l*$A\6^l]
lŠ8O#$;#6.%
p9:6./2'8(22#
A)h".\9$8A9:JH
A)h-BE.;]8''82
T.;O#P\8".\t+u
BX.9:A(2"BE"%
‹89O.\921.E"#W#$
.;HZD">>".*F9:*3.
.;'%[]8B14H6./9:2
19494"F#A5.\x8>"4 9"E#%
g.\8BQ21']8-" #F
21#$;##J\"F('A
4 $9"E#F#%
2.2 Điện toán đám mây – Cloud computing
sE"8 ="9"#?6J7 E"8
"6B- E" 9:BE 8( #19O
" z>>%F*<8<58$2Š9:Q
z>> =9O".;$( 2"R8(?
..5#A# 54A"2%Œ
B-E"8673]' BEB
.;#9.\9<9X:<6"#W#./9:8F#
9X:BE[#"2<"8<B
4#2'A6EBE26k.B
4]'54#::BE2%
>"PA ‹v8(zrrr <I2-G"2B
.;.*./O8 z>>Q.;.;.
*/586"R8(6(6
8("9"E#6#.E8(486%%%<%sE
"8EP1"RE. #4
9X:6 b>,%S )E486).\
BEPF6"2 8' 29O"z>>
1#A*4E" ./9x%M(9:69X: p"">
L##r> #*A9:9"O8'B./62
18F#[ -98Ed>6J #4 9*E .;
.*8 %
3. Giao thức truyền gói tin(MPI) và các vấn đề song song
hóa
3.1 Kiến trúc máy tính song song
C8(""2'l&\#\9x
%
C8("">"'l\#O
F#8(4O=7•"9>?xE1]8'
%C+l238F#"\ 2
8F#"\ lB]"'#6./
"'#2$"%K*E.;"P*l2
.;8"'#%
C8(""\9x6)h9x
B\!\$"%fB
\9x"#W#)h"P^E8F#9*
EE]%Y$.;)h9x"B-\9x
2\H%gh9"$.;9*E.;8]
\')h2\%
'E'#>" 8(""E89:';#
*'l\#\9x%C…l2
)h9x\l.;'$!
"'#$"%
3.2 Phân tách bài toán
&.\41''F""#(
4]8'H%Y26H.;
")hER/%M621H
`%Z9*E=K"9>"#""?%
,%ZBE=Ž"9>"#""?%
3.3 Phân tách dữ liệu
"B-#9*E8""29*E69*E
.;#42(.\)#)Q.A\)
h%C+)h2E#49*E.A\
2%)h214#"P9*E\
*"/X%
CB-""29*EQ2R1%C
F""9*E"R#W#)h4O#x;#\9*E
C#W#)h.;04Q#W#)h.\2v'l%CB-
.-9*E=Y>@Z"@C#>@K=YZCK??"2
.-.;5)hHvB-""
28%
D'.;8#x;#\F"2)h21
("\#49*E2(.\\6O"P9*EQO
E\$.;9*EH5"4#%
3.4 Phân tách công việc
D'.;#9*EB#F""
2$".-""%"./;##9*
E6#4 9*E.A\'-)hT
4*"/.$%eE3 .
-X\5$ )hF%f2/+
)hB.;9:%"./;#86B-#
BE8""2BEE]B-#
9*E%"""2BE6".;#
$.;\E:HBEH.;"
)h#x;#%D)hT'l2
BE.;"BE'#>"%
Y""2BE.;OE'l>@>>%
DE:.;##"2'-#::!
'-(%f'l>@>>21OE4.
1.-%
3.5 Song song hóa dữ liệu và mô hình truyền tin
MX62'#F1'.-"
"
`%Y9:B*""9*E!Q9G=K>>@>9
9@#>>?
,%82!7".E B*
./%
" B * " " 9* E ! Q 9G6 . e
Z>j">Ž"=eZŽ?8i#>CZ69JE4O.;O
E""!"Q9G=2)E.
l("9JE4O?"".-9X'#
9*EE$\)h%D'#9*E6
("6"'#*)h.;"5.-
9X%IB*""9*E./.;OE'l
\^5-B\2BE
.-9X%
"'#F826./F#-#O#9*
EBE")h#]hE"P
9*E*l%D'#F8#A#%
3.6 Tối ưu chương trình song song
C:(('.-"".;E
3OE$"\.-4O%M\:(862
$lh4]''.-""1.;
E3$21%D842
ZBE%
$12"P9*E%
RF#*"P9*E("%
3.7 Phân chia công việc
ZBEE:#BE*)h
ˆ%s8219N9OE#W#"$
.;OE5)h=9*E?%
I.25B4.//OE'-
#:"X9*EE%f2O'P\"/
OE6#OE#.##1]8'
8%
3.8 Tối thiểu hóa trao đổi dữ liệu
P/OE;(( .-"
"5-2#44"'
.-%D2•#4"/OE
`%/("%
,%/+%
•%/"PB%
t/(u/9x1OE("9*
E%./;#h.5";'2P)hE1
]8'-BET'l""/`•P"\
/OE4O%s82y"/)
hT9x1("%
t/+u/)h9x1;9*E[)h
%"/86)hBE%
t/"P9*Eu/1)hF2%
/"P9*E2#:"N3B%sN
/41'F#"A1"P%&3B$
89*E6(!$8X/%D.
-4OB2O"P9*E*)h%K"26l
#$12/"P12E3OE.;'
$%
3.9 Giảm chồng chéo giữa trao đổi dữ liệu và tính toán:
D211/+ )h6(
9:ORW"*"P9*E("%s2E'*
'-"8BE\"2/"
P9*E1'l%
3.10 MPI
CZz.;".ŠOE B-t82u
"("""% †-(""""R$
.;'-6+'-E\9*E:%C+'
-2':6B2'"1'-21
8F#O'#"\ '-%"P9*E*
'-.;OE!826#.E98
1OEF9*E*'-%Dlh!B
-"R'-6802B4#8
)h%
gh9"('B-85*9:-2OO#P
'%M671("""21OE
B-82%"26B-8
@D21OE6['l
)h9x\'EF(8
)h%
@D"#W#]h9*E'-'"\A9:
"">"B-\9x%e*.-21
"E3)9:"%
3.11 Lịch sử phát triển MPI
CZz'0 C>>Zz>j>%s2.E
="D?"'-"="Ž"?"#W#‘"
""9>1OE"P9*E*'-%
CZz.;#13B]O"PCZzj"6
22US./9E""oSPA%DŠCZz@`
.;/x)3`mmo%
@DŠ8]8X6AO7'] '-"
8.;75Ž"aaD%.-OE
CZz# F861"3OE%D.
-CZz9X82+;ŠCZz%
@D'OE .E9"#O)89O
#"'X 7%
@D#O CZz@`2X
%
CŠCZz@,kv.;Xy%I2"E(
\B2"ŠCZz@`6"RB:"E""
"6+;#D’’Ž"mS6O]h'-%
eE6$#OE CZzv(;##4
ŠCZz@,.Š48 G.2%
3.12 Mục đích của MPI
C:(( CZz#.E(‘.-
R1@D.-CZz219X8.|
"%
@D"#W#O2E]"'l%
CZzk#$\A31"P9*E
6'-E1F#;##W#)h6"#W#
./9xOXy"A8%
@e+;'l""BR%
C$B2"ŠCZz@`
@D'()154.-CZz%B./6
2#:" .-T4A
EE1'.'"%
@†h'-62O8P$.;'-
.-8%
@p“+%
@M"@""=Z>z•i?%
3.13 Các đặc tính cơ bản của một chương trình MPI
C.-CZz"R.-4O2"P
9*E\B]E7".E%D8
$\#
`%f5"6]h'l"P%
,%"P*'-%
•%"P*2'-%
o%"X99*E|%
g\#4.;7154]-"P6)
X$.;)h.;9:6"2")h6)
X)h"8.-E%
CZz”z=?•5"]-""%
CZz”މ>=?•'l]-""%
CZz”D"”=?•)X'-%
CZz”D"”‰>=?•)XP$'-8""•
g\#A6.;71"P9*E1@'@16
\1F9*E*)h%
CZz”Y>9=?•9*E''-%
CZz”c>=?•F9*E['-%
g\#A"#W#OE"P""*
2)h%D
CZz”&=?• 9*E['-'-%
CZz”c>9>=?•9*E['-'-
CZz”&>=?•9x1R"*8
CZz”p>=?•F9*E['-%
CZz”Y>=?•9*E''-%
g\#$x#1"l9*E#A
# ./9x%D
CZz”8#>”=?•"19*ECZz ./9x
CZz”8#>”"=?•J]-Xy19*ECZz%
4. Thuật toán bầy kiến và bầy kiến song song
&"./9X"NP-khó%D"E-'
/$.E23B/
"9k $#$"E-'WB
%DF")#)Q.;#11-*/$
!"F)#)Q$\/$.%C).\\E8
2#9:F">""$.!-
*X4\X$.%
4.1 Sơ đồ chung của thuật toán bầy kiến
4.1.1 Giới thiệu chung về thuật toán bầy kiến
DF"'44.;\E5K""
O.'#F\$.P;#26
."./9X=YZ?6"./..%eE8$.;
A9:83"7vA9:2"
$./%DA9:48211'.
"F#X6BRX6X.\"8B6
%‚
DF"'F"9O"O]48
'O%f'"1$48%Dl"'#\B
]xl1-l]%C+'
]"./T1"2l7
x%Y$.;xT32'x]%D"'
T-./9O"Fx./6Fx\-
l2).\7%KO"-'8(
-.;./0[P'RA32]85P
-%
Y8(9:R 'O'
f'>"./–*Lr
f2.\F'T7.\62.\\
3'T7.%
./0-x=#>"">?
Hình 2
Hình 3
‹>-•(…-$"-,%
p"Keq&eqK&]Dq`6D1!*&
K=-,?%&8/l)>)W-)8*"
//qS6`6,‚pX!•S"'\[L'&6•S
"[r'K6+'981\$X/9
81'1/1E#>"">\R`%s1
l)W.;#>"">8"":"
"/=’`6’,?%
/1qS6-B2Ex"2•S'5
&6•S5K%MEO7./ lG9"26-
[+l2`n"'T'e`n"T'D=-,?
/1q`6•S"'\[L'&6l82T7
.\'D".\'e%.\'e2Ex`n9"`n"
'[&'e6.\'D2Ex•S9"`n'[&'K
`n"[K'&B]D=-,?%K"23'.\
'7./'D69"2$'"$'DT#B$
''e=,S"'D`S"'e?%.O.F8"•S"
'\[K'&%
†-T:"''T7./0
%
8lB-' 48'O%Y86
lT-1F"'%
F"$.48'=LDi?AE$"
9O"-' 48'O.;9:1]8'
$ . / %F " 48 ' - '=LDi
>”>?44.;K""6KD"p9>)
"3`mmm%
LDi>@>6"2F#"'"
#$;#-'##$"$./%YO#$
;#8'$$… F"LDi%D"'"
\B]./7x%
DF"LDi.;9:1]8'$.P
;#y%Dy52(
B8P"$]-]8'%DJ
-.;$X 28
8P"]-]8'6(9:"./..
98#">
eE$LDi44.;C"K""\E"F
3 -"3`mm,6.;7eE$'=LY8>68
LY?%LY'] EA.\'#F(E8(
!$.P;#K"".;.\9G5Z">"9"\O
;# L>"D""M""C>‰‰"%LY4.;#9:
""./9X=YZ?†LZ
Dk"3`mm,6XO$"445
—6K""OvB$O$..;#$5
'%
'#>"X]$'A]8'"
""O5eg=`mm,?6BOvB$
A( F'%
f1[3`mmnK""6p9>Y˜‰>v#1
RLY%K""p9>v)eE$48'=L
D""8Y8>68LDY?"Y˜‰>9e"")CL‹@CzIL
Y8>=CCLY?%#9:""./9X$)A8
B$)A"']€v%K""6p9>9Y˜‰>
k)*# LDi\-'X#."%
M"3`mmn6g%C%p9>C%K""v)E$
L@†6'#F73./"""YZ%M2.;
#9:"e7C8%
'# 26 " 3 `mmU6 " " B E -
&)>>C%K""g%C%p9>vB$E$LD""8
Y8>%s8E$F#'7#$;##9:""
YZ%
Dk"3`mmU86%Y˜‰>e%e%e""v)E
$ C)@C L Y8> . s8 E $ ' E $
LY8>4.;E$("".%
Y26"3`mma6p%KD"C%K""v)E$
LI>%s8'#FX.\O(%M#$
x E$LI>18Bv.;B
$"3`mmV%
M"3,SS`6D%&6L%c"6C%K""v"B$E
$'\e8#>D>•LDi%Z5'#2v.;
B$"3,SSo%
e4'A48LDiF#"E#1
F"'113E3(" F"L
Y8>4%
8.;F"'6:'#>"TB
R F"'%
Sơ đồ chung của thuật toán bầy kiến
ProcedureLDi
Initial();
While=™sf9[?9"
D"Y""=?•
g"Y>=?•//|h6212"B
~#9>=?•
End•
End•
"2
sf9[=AE9[?E.;F"5
'l%M\"./..-sf9[E
.;$J# F"q$J#\9"./9x
OXy"'>"./=A./
0?%
D"Y""=?)89O##21>"#.
##-'=>@>?6\"./..-2
)89O-"+'%
~#9>=?F#Fx"-'v]%
g"Y>=?-'X#.6l#-$.:%
Hình 4%YR F"48'
s2R F"48'6:'#>"T"
BF"48'""./..e"
RX+;#%
4.1.2 Nội dung thuật toán
.\29F"48'-1
'"O6)>1" 'O
%[221.14'6\F"
48'%
Đàn kiến tự nhiên: g"2PA"6+"'9
81T1.;B#>"">%s8
#.E191'"PB-'
A3%f-'A3Y-8RA36-+
"'T-./ 21[P\RA3%Dl
T"'#"PB\6/'
4.->""./0[P\RA3%
YA"8'" 'O
"]--/0[P\RA39O
80
s./0.;)XB]B
Z>"">6"2"'9x1"P
B\%
f981-+"'T1.;Z>"">
./2v]%
"]-981-./6"'T.;X
.\5B#>"">v.;1./%
C+"'981GB2B
#>"">"./%
D./2.;#>"">\-).;7
"6.;"./2.;#>"">#-)
.;7W%
[EA'" 'Ov"/
F"48'%CB(A212F"48
'48'"1".%
Hệ thống Ant Colony – Thuật toán bầy kiếng'
"=L{L?B#H" 'O%
2$8P6Q"\'O13
(E] F"%"2"( "'
"-./9O".;BZ>"">v1
+"./%D'" '"
&"4T.;.9RX48 \
".;1E!BA"7%ME
"2T.-./="F#Q?H
v "%D80.;.
B#>"">.;("+"./%
Il4"./ +"'.;7
G%
s./.;O79O80
KO"B#>"">2"./1(
) "'#>".;7"./
"'%
‹ \ " " ./ 2 .;
#>"">.;%M./2.;B
#>"">WT2).;7#%
D"''#:E-./"\"
./ 2=HvE9[ "'?%
C./"Q.;7/=""?"
"%D/T.;#(6"1
-#.$.21%s2/$. "%
Y"'""/ 2-T
'F#FB#>"">"%Y$.;
#>"">T.;("Q1-.;
#.$.$%
D/$T2$.;#>"">\1
v.;]%I.;/RT2$
.;#>"">W%
‹"""'7./2#>"">
\%
†-#"'#4\'"'7x
./=#.: /?%
Mã giả cho thuật toán Ant colony
Z">9> AntColonyAlgorithm
&`f5"BZ>"">"./
&,Do while=Chưa thỏa mãn điều kiện dừng?
&• Do until=Mỗi Ant hoàn thành một đường đi?
&o DF#FB#>"">:=g"#9>?
&n End Do
&U Z(/.;=L8‰>""?
&a DF# F B #>""> " : =p"
#9>?
&VEnd Do
r9Z">9>
s$\F"LDi6O:.;"8$/
-B'.\6./9:1]8'$
1%
./".\.;!F"LDi#.;
'P.9RX48 27$%&"Rl
BX.\%Y'P"9#x;#\
#9:F"LDi1%RX8"'T)8
9O/""%
Y8B-:1F"LDi%CBF"
LDi\EOE""" "'%
`ProcedureLDi”C>>
,#>>”‰"
•while =>"”>"”"”{>9?
oschedule_activities
n”>>"”9”8=?
U#>"">”>#""=?
a9>"”"=?•"#"ƒ
Vend schedule_activities
mend while
`Send Procedure
`Procedure ”>>"”9”8=?
,repeat in parallel forq`to =>”"j”?
•>d”=?
oend repeat in parallel
nend Procedure
`Procedure >d”=”9?
,‰>”=”9?
•gq#9>””>"8=?
oWhile =>”>
≠
>”>?
nZq"#>”"”#">=L6g6
Ω
?
U>)”>q##8””9>"”#"8=Z6
Ω
?
a">”"”>)”>=>)”>?
If="”>”>#@8@>#@#>"">”#9>?
V 9>#"”#>"">”"”>”>9”>9>=?
end if
mgq#9>@>”>=?
`Send while
if=">”9>8>9”#>"">”#9>?
``for >>9>9>
`,9>#"”#>"">”"”>”>9”>9>=?
`•end for
end if
`o>>>””>">=”9?
`nend Procedure
"2 : ants_generation_and_activity() :(6
F% :8BE(R"5"
B$"'%M\+"'"T')89O
/"".HvE9[%
I"2 :#:"
Pheromone_evaporation()g B./1
B#>"">>"/% :81'0"
-'"#W#'5B-'%
Daemon_action()g :+;B#"O'
=B25'O?%g :1QB
$4'3(E] F"%M(9: :-
':6 :5"B#>"">#'0
"-'%
4.2 Các sơ đồ thuật toán
IF"v.;.9OB-F"
metaheuristic ACO%"B-.1]8'
"P;#$.NP-khóF3-8'nB-%
DB-8#19OB-F"LDi:1
-85#4•%,8%>"A"89:
F"48'2B#>"">>2
1#9:"l"$%"F".
8-B#>"">>Q0\B%
4.2.1 Thuật toán Ant System (AS)
s.;#15K""6C>‰‰"D""3`mm`6F"
LDi4%&42•'1LY@K>86LY@
†8 LY@D8> 5 A F# F B
Z>"">%
"2
LY@K>8-'T#>"">"]-
)89O/=">>#@8@>##>"">#9>?6.;
#>"">1F#F!$%
LY@†8-'T#>"">"]-
)89O/=">>#@8@>##>"">#9>?6.;
#>"">1F#F#:""$=B
>?\"./]š
}
%
LY@D8>B#>"">T.;F#F/v
"=">9>8>9#>"">#9>?%s8B-
"']$.;".F"LY%
I.F8>"B- LY@8>-#>"">TF#F
"'"/ -%MEF#F#>"">.;'
.
s4#>"">T.;5
!$=#>"">>#""?%
(1 ). .
rs rs
p
τ τ
¬ −
M\›""=S6`?$8 #>"">%
'#>"+"'"T.;B
#>"">6.;#>"">8 .;/
"')89O%
, .
k
rs rs rs rs k
a S
τ τ τ
¬ + ∆ ∀ ∈
"2
( )
( ) .
k
rs k
f C S
τ
∆ =
&4LYB9:daemon action68T$
'"2 :-':13.;
/%DJ#.-1)Xl'#>""]-)8
9O/ "'.
.
, ( )
,
.
0, trái l i.
k
r
rs rs
k
k
rs
ru ru
u N
s N r
p
α β
α β
τ η
τ η
∈
∈
=
∑
¹
Tóm tắt về thuật toán này như sau
`Procedure >d”=”9?
,q”9•q>>>””>•
k
S r=
•
k
L r=
owhile =>@>
≠
>”>?
nfor>
∈
k
N
=?do
[ ] [ ]
[ ] [ ]
.
.
k
r
rs rs
k
rs
ru ru
u N
p
α β
α β
τ η
τ η
∈
=
∑
U>)”>q##8””9>"”#"8=Z6
( )
k
N r
?
aq>)”>•
,
k k
S S r=< >
V@@@
m
k k
L L r= ∪
`S>9d>
•>#>"">”>#""=?#">9>>
9
>#"> #>""> >>8 >9>
( )
: 1 .
rs rs rs
a p
τ τ
= −
ƒ
`` for>>9>
rs k
a S∈
do
`,
( )
( )
rs rs k
f C S
τ τ
= +
`•end for
`o>>>””>">=”9?
`nend Procedure%
4.2.2 Thuật toán Ant Colony System(ACS)
Z1[F"LY\$E.