Tổng hợp các khái niệm về thuật toán thuật giải cũng như bàn luận chuyên sâu về các thuật toán thuật giải như thuật toán tìm kiếm heuristic, thuật giải AT, thuật giải AKT, thuật giải A...
Trang 1"Don't study, don't know - Studying you will know!"
NGUYEN TRUNG HOA
Trang 2GS.TSKH HOÀNG KI M
GIÁO TRÌNH MÔN H C
Trang 3CHƯƠNG 1 : THU T TOÁN – THU T GI I
I KHÁI NI M THU T TOÁN – THU T GI I
II THU T GI I HEURISTIC
III CÁC PHƯƠNG PHÁP TÌM KI M HEURISTIC
III.1 C u trúc chung c$a bài toán tìm ki.m
III.2 Tìm ki.m chi0u sâu và tìm ki.m chi0u r4ng
III.3 Tìm ki.m leo ñ9i
III.4 Tìm ki.m ưu tiên t=i ưu (best?first search)
III.5 ThuCt giDi AT
III.6 ThuCt giDi AKT
III.7 ThuCt giDi A*
III.8 Ví dM minh hNa hoOt ñ4ng c$a thuCt giDi A*
III.9 Bàn luCn v0 A*
III.10 Sng dMng A* ñT giDi bài toán Ta?canh
III.11 Các chi.n lưUc tìm ki.m lai
I T NG QUAN THU T TOÁN – THU T GI I
Trong quá trình nghiên cWu giDi quy.t các v n ñ0 – bài toán, ngưZi ta ñã ñưa ra nh\ng nhCn xét như sau:
Có nhi0u bài toán cho ñ.n nay van chưa tìm ra m4t cách giDi theo kiTu thuCt toán và cũng không bi.t là có t9n tOi thuCt toán hay không
Có nhi0u bài toán ñã có thuCt toán ñT giDi nhưng không ch p nhCn ñưUc vì thZi gian giDi theo thuCt toán ñó quá len hofc các ñi0u kign cho thuCt toán khó ñáp Wng
Có nh\ng bài toán ñưUc giDi theo nh\ng cách giDi vi phOm thuCt toán nhưng van ch p nhCn ñưUc
Th nh\ng nhCn ñinh trên, ngưZi ta th y rjng ckn phDi có nh\ng ñli mei cho khái nigm thuCt toán NgưZi ta ñã mm r4ng hai tiêu chunn c$a thuCt toán: tính xác ñinh
và tính ñúng ñon Vigc mm r4ng tính xác ñinh ñ=i vei thuCt toán ñã ñưUc thT hign qua
Trang 4các giDi thuCt ñg quy và ngau nhiên Tính ñúng c$a thuCt toán bây giZ không còn bot bu4c ñ=i vei m4t s= cách giDi bài toán, nh t là các cách giDi gkn ñúng Trong thqc tirn có nhi0u trưZng hUp ngưZi ta ch p nhCn các cách giDi thưZng cho k.t quD t=t (nhưng không phDi lúc nào cũng t=t) nhưng ít phWc tOp và higu quD Chsng hOn n.u giDi m4t bài toán bjng thuCt toán t=i ưu ñòi hti máy tính thqc hiên nhi0u năm thì chúng ta có thT svn lòng ch p nhCn m4t giDi pháp gkn t=i ưu mà chw ckn máy tính chOy trong vài ngày hofc vài giZ
Các cách giDi ch p nhCn ñưUc nhưng không hoàn toàn ñáp Wng ñky ñ$ các tiêu chunn c$a thuCt toán thưZng ñưUc gNi là các thuCt giDi Khái nigm mm r4ng này c$a thuCt toán ñã mm cxa cho chúng ta trong vigc tìm ki.m phương pháp ñT giDi quy.t các bài toán ñưUc ñft ra
M4t trong nh\ng thuCt giDi thưZng ñưUc ñ0 cCp ñ.n và sx dMng trong khoa hNc trí tug nhân tOo là các cách giDi theo kiTu Heuristic
II THU T GI I HEURISTIC
ThuCt giDi Heuristic là m4t sq mm r4ng khái nigm thuCt toán Nó thT hign cách giDi bài toán vei các ñfc tính sau:
ThưZng tìm ñưUc lZi giDi t=t (nhưng không choc là lZi giDi t=t nh t) GiDi bài toán theo thuCt giDi Heuristic thưZng dr dàng và nhanh chóng ñưa ra k.t quD hơn so vei giDi thuCt t=i ưu, vì vCy chi phí th p hơn ThuCt giDi Heuristic thưZng thT hign khá tq nhiên, gkn gũi vei cách suy nghĩ và hành ñ4ng c$a con ngưZi
Có nhi0u phương pháp ñT xây dqng m4t thuCt giDi Heuristic, trong ñó ngưZi ta
thưZng dqa vào m4t s= nguyên lý cơ bDn như sau:
Nguyên lý vét c$n thông minh: Trong m4t bài toán tìm ki.m nào ñó, khi không gian tìm ki.m len, ta thưZng tìm cách giei hOn lOi không gian tìm ki.m hofc thqc hign m4t kiTu dò tìm ñfc bigt dqa vào ñfc thù c$a bài toán ñT nhanh chóng tìm ra mMc tiêu
Nguyên lý tham lam (Greedy): L y tiêu chunn t=i ưu (trên phOm vi toàn cMc) c$a bài toán ñT làm tiêu chunn chNn lqa hành ñ4ng cho phOm vi cMc b4 c$a thng bưec (hay thng giai ñoOn) trong quá trình tìm ki.m lZi giDi
Nguyên lý th/ t0: Thqc hign hành ñ4ng dqa trên m4t c u trúc thW tq hUp
lý c$a không gian khDo sát nhjm nhanh chóng ñOt ñưUc m4t lZi giDi t=t Hàm Heuristic: Trong vigc xây dqng các thuCt giDi Heuristic, ngưZi ta thưZng dùng các hàm Heuristic Đó là các hàm ñánh già thô, giá tri c$a hàm phM thu4c vào trOng thái hign tOi c$a bài toán tOi m•i bưec giDi NhZ giá tri này, ta có thT chNn ñưUc cách hành ñ4ng tương ñ=i hUp lý trong thng bưec c$a thuCt giDi
Bài toán hành trình ng7n nh8t – /ng d9ng nguyên lý Greedy
Trang 5Bài toán: Hãy tìm m4t hành trình cho m4t ngưZi giao hàng ñi qua n ñiTm khác nhau, m•i ñiTm ñi qua m4t lkn và trm v0 ñiTm xu t phát sao cho tlng chi0u dài ñoOn ñưZng ckn ñi là ngon nh t GiD sx rjng có con ñưZng n=i trqc ti.p th gi\a hai ñiTm
b t kỳ
T t nhiên ta có thT giDi bài toán này bjng cách ligt kê t t cD con ñưZng có thT ñi, tính chi0u dài c$a m•i con ñưZng ñó r9i tìm con ñưZng có chi0u dài ngon nh t Tuy nhiên, cách giDi này lOi có ñ4 phWc tOp 0(n!) (m4t hành trình là m4t hoán v c$a n ñiTm, do ñó, tlng s= hành trình là s= lưUng hoán vi c$a m4t tCp n phkn tx là n!) Do
ñó, khi s= ñOi lý tăng thì s= con ñưZng phDi xét sƒ tăng lên r t nhanh
M4t cách giDi ñơn giDn hơn nhi0u và thưZng cho k.t quD tương ñ=i t=t là dùng m4t thuCt giDi Heuristic Wng dMng nguyên lý Greedy Tư tưmng c$a thuCt giDi như sau:
Th ñiTm khmi ñku, ta ligt kê t t cD quãng ñưZng th ñiTm xu t phát cho ñ.n n ñOi lý r9i chNn ñi theo con ñưZng ngon nh t
Khi ñã ñi ñ.n m4t ñOi lý, chNn ñi ñ.n ñOi lý k ti.p cũng theo nguyên toc trên Nghĩa là ligt kê t t cD con ñưZng th ñOi lý ta ñang ñWng ñ.n nh\ng ñOi lý chưa ñi ñ.n ChNn con ñưZng ngon nh t Lfp lOi quá trình này cho ñ.n lúc không còn ñOi lý nào ñT ñi
BOn có thT quan sát hình sau ñT th y ñưUc quá trình chNn lqa Theo nguyên lý
Greedy, ta l y tiêu chunn hành trình ngon nh t c$a bài toán làm tiêu chunn cho chNn lqa cMc b4 Ta hy v ng r ng, khi ñi trên n ño n ñư ng ng n nh t thì cu i cùng ta s
có m#t hành trình ng n nh t Đi0u này không phDi lúc nào cũng ñúng Vei ñi0u kign trong hình ti.p theo thì thuCt giDi cho chúng ta m4t hành trình có chi0u dài là 14 trong khi hành trình t=i ưu là 13 K.t quD c$a thuCt giDi Heuristic trong trưZng hUp này chw lgch 1 ñơn vi so vei k.t quD t=i ưu Trong khi ñó, ñ4 phWc tOp c$a thuCt giDi
Trang 6Hình : GiDi bài toán sx dMng nguyên lý Greedy
T t nhiên, thuCt giDi theo kiTu Heuristic ñôi lúc lOi ñưa ra k.t quD không t=t, thCm chí
r t tg như trưZng hUp m hình sau
Bài toán phân vi<c – /ng d9ng c=a nguyên lý th/ t0
kỳ máy nào M4t khi ñã gia công m4t chi ti.t trên m4t máy, công vig sƒ ti.p tMc cho
sao gia công xong toàn b4 n chi ti.t trong thZi gian sem nh t
hình sau:
Trang 7Theo hình này, tOi thZi ñiTm t=0, ta ti.n hành gia công chi ti.t J2 trên máy P1, J5 trên
tiên mình … Sơ ñ9 phân vigc theo hình m trên ñưUc gNi là lưUc ñ9 GANTT Theo lưUc ñ9 này, ta th y thZi gian ñT hoàn thành toàn b4 6 công vigc là 12 NhCn xét m4t cách cDm tính ta th y rjng phương án (L) vha thqc hign là m4t phương án không t=t
tOp c‡ O(mn) (vei m là s= máy và n là s= công vigc) Bây giZ ta xét ñ.n m4t thuCt giDi Heuristic r t ñơn giDn (ñ4 phWc tOp O(n)) ñT giDi bài toán này
Sop x.p các công vigc theo thW tq giDm dkn v0 thZi gian gia công Lkn lưUt sop x.p các vigc theo thW tq ñó vào máy còn dư nhi0u thZi gian nh t
Vei tư tưmng như vCy, ta sƒ có m4t phương án L* như sau:
Rõ ràng phương án L* vha thqc hign cũng chính là phương án t=i ưu c$a trưZng hUp
rjng m4t giDi Heuristic ñơn giDn như vCy sƒ là m4t thuCt giDi t=i ưu Nhưng ti.c thay,
Trang 8ta dr dàng ñưa ra ñưUc m4t trưZng hUp mà thuCt giDi Heuristic không ñưa ra ñưUc k.t quD t=i ưu
N.u gNi T* là thZi gian ñT gia công xong n chi ti.t máy do thuCt giDi Heuristic ñưa ra
Trong trưZng hUp M len thì t‰ s= 1/M xem như bjng 0 Như vCy, sai s= t=i ña mà ta
nh\ng trưZng hUp mà sai s= ñúng bjng giá tri cqc ñOi, dù trong trưZng hUp x u
nh t ThuCt giDi Heuristic trong trưZng hUp này rõ ràng ñã cho chúng ta nh\ng lZi giDi tương ñ=i t=t
III CÁC PHƯƠNG PHÁP TÌM KIBM HEURISTIC
Qua các phkn trưec chúng ta tìm hiTu tlng quan v0 ý tưmng c$a thuCt giDi Heuristic (nguyên lý Greedy và sop thW tq) Trong mMc này, chúng ta sƒ ñi sâu vào tìm hiTu m4t s= kŽ thuCt tìm ki.m Heuristic – m4t lep bài toán r t quan trNng và có nhi0u Wng dMng trong thqc t
III.1 C8u trúc chung c=a bài toán tìm kiFm
Trang 9ĐT tign lUi cho vigc trình bày, ta hãy dành chút thZi gian ñT làm rõ hơn "ñ=i tưUng" quan tâm c$a chúng ta trong mMc này M4t cách chung nh t, nhi0u v n ñ0?bài toán phWc tOp ñ0u có dOng "tìm ñưZng ñi trong ñ9 thi" hay nói m4t cách hình thWc hơn là
"xu t phát t) m#t ñ*nh c+a m#t ñ, th , tìm ñư ng ñi hi-u qu/ nh t ñ0n m#t ñ*nh nào ñó" M4t phát biTu khác thưZng gfp c$a dOng bài toán này là :
Tn = TG sao cho :
thta mãn m4t ñi0u kign cho trưec (thưZng là nht nh t)
Trong ñó, Ti thu4c tCp hUp S (gNi là không gian trOng thái – state space) bao g9m t t
dùng thuCt ng\ hư4ng ñi (vei ngM ý nói v0 sq lqa chNn)
Hình : Mô hình chung c$a các v n ñ0?bài toán phDi giDi quy.t bjng phương pháp tìm ki.m lZi giDi Không gian tìm ki.m là m4t tCp hUp trOng thái ? tCp các nút c$a ñ9 thi
dưei dOng các con s= njm trên cung n=i gi\a hai nút tưUng trưng cho hai trOng thái
Đa s= các bài toán thu4c dOng mà chúng ta ñang mô tD ñ0u có thT ñưUc biTu dirn dưei dOng ñ9 thi Trong ñó, m4t trOng thái là m4t ñwnh c$a ñ9 thi TCp hUp S bao g9m t t cD các trOng thái chính là tCp hUp bao g9m t t cD ñwnh c$a ñ9 thi Vigc bi.n
III.2 Tìm kiFm chiJu sâu và tìm kiFm chiJu rKng
ĐT bOn ñNc có thT hình dung m4t cách cM thT bDn ch t c$a thuCt giDi Heuristic, chúng ta nh t thi.t phDi nom v\ng hai chi0n lư7c tìm ki.m cơ bDn là tìm ki.m theo chi0u sâu (Depth First Search) và tìm ki.m theo chi0u r4ng (Breath First Search) Sm
dĩ chúng ta dùng th chi0n lư7c mà không phDi là phương pháp là bmi vì trong thqc t.,
Trang 10ngưZi ta hku như chsng bao giZ vCn dMng m4t trong hai kiTm tìm ki.m này m4t cách trqc ti.p mà không phDi sxa ñli gì
III.2.1 Tìm kiFm chiJu sâu (DepthIFirst Search)
Trong tìm ki.m theo chi0u sâu, tOi trOng thái (ñwnh) hign hành, ta chNn m4t trOng thái k ti.p (trong tCp các trOng thái có thT bi.n ñli thành th trOng thái hign tOi) làm trOng thái hign hành cho ñ.n lúc trOng thái hign hành là trOng thái ñích Trong
trưZng hUp tOi trOng thái hign hành, ta không thT bi.n ñli thành trOng thái k ti.p thì ta sƒ quay lui (back?tracking) lOi trOng thái trưec trOng thái hign hành (trOng thái bi.n ñli thành trOng thái hign hành) ñT chNn ñưZng khác N.u m trOng thái trưec này
mà cũng không thT bi.n ñli ñưUc n\a thì ta quay lui lOi trOng thái trưec n\a và cW th N.u ñã quay lui ñ.n trOng thái khmi ñku mà van th t bOi thì k.t luCn là không có lZi giDi Hình Dnh sau minh hNa hoOt ñ4ng c$a tìm ki.m theo chi0u sâu
Hình : Hình Dnh c$a tìm ki.m chi0u sâu Nó chw lưu ý "mm r4ng" trOng thái ñưUc chNn
mà không "mm r4ng" các trOng thái khác (nút màu trong trong hình vƒ) III.2.2 Tìm kiFm chiJu rKng (BreathIFirst Search)
NgưUc lOi vei tìm ki.m theo kiTu chi0u sâu, tìm ki.m chi0u r4ng mang hình Dnh c$a v.t dku loang Th trOng thái ban ñku, ta xây dqng tCp hUp S bao g9m các trOng thái
k ti.p (mà th trOng thái ban ñku có thT bi.n ñli thành) Sau ñó, 9ng v4i m:i trOng
lưUt bl sung các Sk vào S Quá trình này cW lfp lOi cho ñ.n lúc S có chWa trOng thái k.t thúc hofc S không thay ñli sau khi ñã bl sung t t cD Sk
Trang 11Hình : Hình Dnh c$a tìm ki.m chi0u r4ng TOi m4t bưec, mNi trOng thái ñ0u ñưUc mm
r4ng, không bt sót trOng thái nào
sâu trong cây tìm ki.m và
có m4t phương án chNn hưeng ñi chính xác Higu quD c$a chi.n lưUc phM thu4c vào phương án chNn hưeng ñi Phương án càng kém higu quD thì higu quD c$a chi.n lưUc càng giDm
ThuCn lUi khi mu=n tìm chw m4t lZi giDi
Higu quD khi lZi giDi njm gkn g=c c$a cây tìm ki.m Higu quD c$a chi.n lưUc phM thu4c vào ñ4 sâu c$a lZi giDi LZi giDi càng
xa g=c thì higu quD c$a chi.n lưUc càng giDm ThuCn lUi khi mu=n tìm nhi0u lZi giDi
TrưZng hUp t=t nh t Phương án chNn hưeng ñi
tuy-t ñ i chính xác LZi giDi ñưUc xác ñinh m4t cách trqc ti.p
Vét cOn toàn b4
Tìm ki.m chi0u sâu và tìm ki.m chi0u r4ng ñ0u là các phương pháp tìm ki.m có hg th=ng và choc chon tìm ra lZi giDi Tuy nhiên, do bDn ch t là vét cOn nên vei nh\ng bài toán có không gian len thì ta không thT dùng hai chi.n lưUc này ñưUc Hơn n\a,
Trang 12hai chi.n lưUc này ñ0u có tính ch t "mù quáng" vì chúng không chú ý ñ.n nh\ng thông tin (tri thWc) m trOng thái hign thZi và thông tin v0 ñích ckn ñOt tei cùng m=i quan hg gi\a chúng Các tri thWc này vô cùng quan trNng và r t có ý nghĩa ñT thi.t
k các thuCt giDi higu quD hơn mà ta sop sxa bàn ñ.n
III.3 Tìm kiFm leo ñPi
III.3.1 Leo ñPi ñơn giSn
Tìm ki.m leo ñ9i theo ñúng nghĩa, nói chung, thqc ch t chw là m4t trưZng hUp ñfc bigt c$a tìm ki.m theo chi0u sâu nhưng không thT quay lui Trong tìm ki.m leo ñ9i, vigc lqa chNn trOng thái ti.p theo ñưUc quy.t ñinh dqa trên m4t hàm Heuristic Hàm Heuristic là gì ?
ThuCt ng\ "hàm Heuristic" mu=n nói lên ñi0u gì? Chsng có gì ghê gem BOn ñã quen vei nó r9i! Đó ñơn giDn chw là m4t ư c lư ng v kh năng d n ñ n l i gi i tính th trOng thái ñó (kho/ng cách gi\a trOng thái hign tOi và trOng thái ñích) Ta sƒ quy ưec gNi hàm này là h trong su=t giáo trình này Đôi lúc ta cũng ñ0 cCp ñ.n chi phí t i
ưu th c s th m4t trOng thái dan ñ.n lZi giDi Thông thưZng, giá tri này là không thT tính toán ñưUc (vì tính ñưUc ñ9ng nghĩa là ñã bi.t con ñưZng ñ.n lZi giDi !) mà ta chw dùng nó như m4t cơ sm ñT suy luCn v0 mft lý thuy.t mà thôi ! Hàm h, ta quy ưec rjng, luôn trD ra k.t quD là m4t s= không âm ĐT bOn ñNc thqc sq nom ñưUc ý nghĩa c$a hai hàm này, hãy quan sát hình sau trong ñó minh hNa chi phí t=i ưu thqc sq và chi phí ưec lưUng
Hình Chi phí ưec lưUng h’ = 6 và chi phí t=i ưu thqc sq h = 4+5 = 9 (ñi theo ñưZng
1?3?7) BOn ñang m trong m4t thành ph= xa lO mà không có bDn ñ9 trong tay và ta mu=n ñi vào khu trung tâm? M4t cách suy nghĩ ñơn giDn, chúng ta sƒ nhom vào hư4ng nh\ng tòa cao =c c$a khu trung tâm!
Tư tưVng
1) N.u trOng thái bot ñku cũng là trOng thái ñích thì thoát và báo là ñã tìm ñưUc lZi
Trang 132) Lfp lOi cho ñ.n khi ñOt ñ.n trOng thái k.t thúc hofc cho ñ.n khi không t9n tOi m4t trOng thái ti.p theo hUp lg (Tk) c$a trOng thái hign hành :
b Đánh giá trOng thái Tk mei :
b.1 N.u là trOng thái k.t thúc thì trD v0 tri này và thoát b.2 N.u không phDi là trOng thái k.t thúc nhưng tWt hơn trOng thái hign hành thì cCp nhCt nó thành trOng thái hign hành b.3 N.u nó không t=t hơn trOng thái hign hành thì ti.p tMc vòng lfp
WHILE (Better=FALSE) AND (STOP=FALSE) DO BEGIN
IF <không t9n tOi trOng thái k ti.p h7p l- c$a Ti> THEN BEGIN
<không tìm ñưUc k.t quD >; Stop:=TRUE; END; ELSE BEGIN
Tk := <m4t trOng thái k ti.p h7p l- c$a Ti>;
IF <h(Tk) t=t hơn h(Ti)> THEN BEGIN
Ti :=Tk; Better:=TRUE;
Trang 14là len hơn h’(Tk) > h’(Ti) Chsng hOn, ñ=i vei bài toán tìm ñưZng ñi ngon nh t gi\a hai ñiTm N.u dùng hàm h’ là hàm cho ra kho/ng cách theo ñư ng chim bay gi\a vi trí hign tOi (trOng thái hign tOi) và ñích ñ.n (trOng thái ñích) thì t=t hơn nghĩa là nht hơn
V n ñ0 ckn làm rõ k ti.p là th nào là <m4t trOng thái k ti.p hUp lg c$a Ti>? M4t trOng thái k ti.p hUp lg là trOng thái chưa ñưUc xét ñ.n GiD sx h c$a trOng thái hign tOi Ti có giá tri là h(Ti) = 1.23 và th Ti ta có thT bi.n ñli sang m4t trong 3 trOng thái
cũng không ñưUc chNn và mgnh ñ0 <không th> sinh ra tr ng thái k0 ti0p c+a Ti> sƒ
có giá tri TRUE GiDi thích này có v— hiTn nhiên nhưng có lƒ ckn thi.t ñT tránh nhkm lan cho bOn ñNc
ĐT th y rõ hoOt ñ4ng c$a thuCt giDi leo ñ9i Ta hãy xét m4t bài toán minh hNa sau Cho 4 kh=i lCp phương gi ng nhau A, B, C, D Trong ñó các mft (M1), (M2), (M3), (M4), (M5), (M6) có thT ñưUc tô bjng 1 trong 6 màu (1), (2), (3), (4), (5), (6) Ban ñku các kh=i lCp phương ñưUc x.p vào m4t hàng M•i m4t bưec, ta chw ñưUc xoay
chi0u hay thuCn chi0u kim ñ9ng h9 cũng ñưUc) Hãy xác ñinh s= bưec quay ít nh t sao cho t t cD các mft c$a kh=i lCp phương trên 4 mft c$a hàng là có cùng màu như hình vƒ
Trang 15Hình : Bài toán 4 kh=i lCp phương
ĐT giDi quy.t v n ñ0, trưec h.t ta ckn ñinh nghĩa m4t hàm G dùng ñT ñánh giá m4t tình trOng cM thT có phDi là lZi giDi hay không? BOn ñNc có thT dr dàng ñưa ra m4t cài ñft c$a hàm G như sau :
IF (Gtrái + GphDi + Gtrên + Gdưei + Gtrưec + Gsau) = 16 THEN
G:=TRUE ELSE
G:=FALSE;
tq cho Gtrái, Gtrên, Ggi\a, Gtrưec, Gsau Tuy nhiên, do các kh=i lCp phương A,B,C,D
là hoàn toàn tương tq nhau nên tương quan gi\a các mft c$a m•i kh=i là gi=ng nhau Do ñó, n.u có 2 mft không ñ=i nhau trên hàng ñ9ng màu thì 4 mft còn lOi c$a hàng cũng ñ9ng màu Th ñó ta chw ckn hàm G ñưUc ñinh nghĩa như sau là ñ$ :
IF GphDi + Gdưei = 8 THEN
G:=TRUE ELSE
G:=FALSE;
Hàm h (ưec lưUng khD năng dan ñ.n lZi giDi c$a m4t trOng thái) sƒ ñưUc ñinh nghĩa như sau :
Bài toán này ñ$ ñơn giDn ñT thuCt giDi leo ñ9i có thT hoOt ñ4ng t=t Tuy nhiên, không phDi lúc nào ta cũng may mon như th.!
Đ.n ñây, có thT chúng ta sƒ nDy sinh m4t ý tưmng N.u ñã chNn trOng thái t t hơn làm trOng thái hign tOi thì tOi sao không chNn trOng thái t t nh t ? Như vCy, có l ta
sƒ nhanh chóng dan ñ.n lZi giDi hơn! Ta sƒ bàn luCn v0 v n ñ0: "ligu cDi ti.n này có thqc sq giúp chúng ta dan ñ.n lZi giDi nhanh hơn hay không?" ngay sau khi trình bày xong thuCt giDi leo ñ9i d=c ñWng
III.3.2 Leo ñPi dWc ñ/ng
V0 cơ bDn, leo ñ9i d=c ñWng cũng gi=ng như leo ñ9i, chw khác m ñiTm là leo ñ9i d=c ñWng sƒ duygt t t cD các hưeng ñi có thT và chNn ñi theo trOng thái t t nh t trong s= các trOng thái k ti.p có thT có (trong khi ñó leo ñ9i chw chNn ñi theo trOng thái k ti.p ñku tiên t t hơn trOng thái hign hành mà nó tìm th y)
Trang 16Tư tưVng
1) N.u trOng thái bot ñku cũng là trOng thái ñích thì thoát và báo là ñã tìm ñưUc lZi
2) Lfp lOi cho ñ.n khi ñOt ñ.n trOng thái k.t thúc hofc cho ñ.n khi (Ti) không t9n tOi m4t trOng thái k ti.p (Tk) nào t=t hơn trOng thái hign tOi (Ti)
WHILE <t9n tOi trOng thái k ti.p h7p l- c$a Ti> DO BEGIN
Tk := <m4t trOng thái k ti.p h7p l- c$a Ti>;
IF <h’(Tk) t=t hơn Best> THEN BEGIN
Best :=h’(Tk);
END;
Trang 17mà nó tìm ra ñưUc Do ñó, thZi gian ckn thi.t ñT leo ñ9i d=c ñWng chNn ñưUc m4t hưeng ñi sƒ len hơn so vei leo ñ9i ñơn giDn Tuy vCy, do lúc nào cũng chNn hưeng ñi t=t nh t nên leo ñ9i d=c ñWng thưZng sƒ tìm ñ.n lZi giDi sau m4t s= bưec ít hơn so vei leo ñ9i ñơn giDn Nói m4t cách ngon gNn, leo ñ9i d=c ñWng sƒ t=n nhi0u thZi gian hơn cho m4t bưec nhưng lOi ñi ít bưec hơn; còn leo ñ9i ñơn giDn t=n ít thZi gian hơn cho m4t bưec ñi nhưng lOi phDi ñi nhi0u bưec hơn Đây chính là y.u t= ñưUc và m t gi\a hai thuCt giDi nên ta phDi cân nhoc kŽ lư‡ng khi lqa chNn thuCt giDi
CD hai phương pháp leo núi ñơn giDn và leo núi d=c ñWng ñ0u có khD năng th t bOi trong vigc tìm lZi giDi c$a bài toán mfc dù lZi giDi ñó thqc sq hign h\u CD hai giDi thuCt ñ0u có thT k.t thúc khi ñOt ñưUc m4t trOng thái mà không còn trOng thái nào t=t hơn n\a có thT phát sinh nhưng trOng thái này không phDi là trOng thái ñích Đi0u này sƒ xDy ra n.u chương trình ñOt ñ.n m4t ñiTm cqc ñOi ñia phương, m4t ñoOn ñơn ñigu ngang
Đi>m cCc ñ i ñ a phương (a local maximum) : là m4t trOng thái t=t hơn t t cD lân cCn c$a nó nhưng không t=t hơn m4t s= trOng thái khác m xa hơn Nghĩa là tOi m4t ñiTm cqc ñOi ñia phương, mNi trOng thái trong m#t lân cEn c$a trOng thái hign tOi ñ0u x u hơn trOng thái hign tOi Tuy có dáng v— c$a lZi giDi nhưng các cqc ñOi ñia phương không phDi là lZi giDi thqc sq Trong trưZng hUp này, chúng ñưUc gNi là nh\ng ngNn ñ9i th p
Đo n ñơn ñi-u ngang (a plateau) : là m4t vùng bjng phsng c$a không gian tìm ki.m, trong ñó, toàn b4 các trOng thái lân cCn ñ0u có cùng giá tri
Trang 18Hình : Các tình hu=ng khó khăn cho tìm ki.m leo ñèo
ĐT ñ=i phó vei các các ñiTm này, ngưZi ta ñã ñưa ra m4t s= giDi pháp Ta sƒ tìm hiTu
2 trong s= các giDi pháp này Nh\ng giDi này, không thqc sq giDi quy.t trNn vœn v n ñ0 mà chw là m4t phương án cWu nguy tOm thZi mà thôi
Phương án ñku tiên là k.t hUp leo ñ9i và quay lui Ta sƒ quay lui lOi các trOng thái trưec ñó và thx ñi theo hưeng khác Thao tác này hUp lý n.u tOi các trOng thái trưec
ñó có m4t hưeng ñi t=t mà ta ñã bt qua trưec ñó Đây là m4t cách khá hay ñT ñ=i phó vei các ñiTm cqc ñOi ñia phương Tuy nhiên, do ñfc ñiTm c$a leo ñ9i là "bưec sau cao hơn bưec trưec" nên phương án này sƒ th t bOi khi ta xu t phát th m4t ñiTm quá cao hofc xu t phát th m4t ñwnh ñ9i mà ñT ñ.n ñưUc lZi giDi ckn phDi ñi qua m4t
"thung lũng" thCt sâu như trong hình sau
Hình : M4t trưZng hUp th t bOi c$a leo ñèo k.t hUp quay lui
Cách thW hai là thqc hign m4t bưec nh/y v t theo hưeng nào ñó ñT thx ñ.n m4t vùng mei c$a không gian tìm ki.m Nôm na là "bưec" liên tMc nhi0u "bưec" (chsng hOn 5,7,10, …) mà tOm thZi "quên" ñi vigc kiTm tra "bưec sau cao hơn bưec trưec" Ti.p cCn có v— higu quD khi ta gfp phDi m4t ñoOn ñơn ñigu ngang Tuy nhiên, nhDy vNt cũng có nghĩa là ta ñã bt qua cơ h4i ñT ti.n ñ.n lZi giDi thqc sq Trong trưZng hUp chúng ta ñang ñWng khá gkn lZi giDi, vigc nhDy vNt sƒ ñưa chúng ta sang m4t vi trí hoàn toàn xa lO, mà th ñó, có thT sƒ dan chúng ta ñ.n m4t roc r=i kiTu khác Hơn
Trang 19n\a, s= bưec nhDy là bao nhiêu và nhDy theo hưeng nào là m4t v n ñ0 phM thu4c r t nhi0u vào ñfc ñiTm không gian tìm ki.m c$a bài toán
Hình M4t trưZng hUp khó khăn cho phương án "nhDy vNt"
Leo núi là m4t phương pháp cMc b4 bmi vì nó quy.t ñinh sƒ làm gì ti.p theo dqa vào m4t ñánh giá v0 trOng thái hign tOi và các trOng thái k ti.p có thT có (t t hơn trOng thái hign tOi, trOng thái t t nh t t=t hơn trOng thái hign tOi) thay vì phDi xem xét m4t cách toàn dign trên t t cD các trOng thái ñã ñi qua ThuCn lUi c$a leo núi là ít gfp sq bùng nl tl hUp hơn so vei các phương pháp toàn cMc Nhưng nó cũng gi=ng như các phương pháp cMc b4 khác m ch• là không choc chon tìm ra lZi giDi trong trưZng hUp
x u nh t
M4t lkn n\a, ta khsng ñinh lOi vai trò quy.t ñinh c$a hàm Heuristic trong quá trình tìm ki.m lZi giDi Vei cùng m4t thuCt giDi (như leo ñ9i chsng hOn), n.u ta có m4t hàm Heuristic t=t hơn thì k.t quD sƒ ñưUc tìm th y nhanh hơn Ta hãy xét bài toán v0 các kh=i ñưUc trình bày m hình sau Ta có hai thao tác bi.n ñli là:
+ L y m4t kh=i m ñwnh m4t c4t b t kỳ và ñft nó lên m4t ch• tr=ng tOo thành m4t c4t mei Lưu ý là chw có thT tOo ra t=i ña 2 c4t mei
+ L y m4t kh=i m ñwnh m4t c4t và ñft nó lên ñwnh m4t c4t khác
Hãy xác ñinh s= thao tác ít nh t ñT bi.n ñli c4t ñã cho thành c4t k.t quD
Trang 20Hình : TrOng thái khmi ñku và trOng thái k.t thúc GiD sx ban ñku ta dùng m4t hàm Heuristic ñơn giDn như sau :
cho m•i kh=i ñft m vi trí sai so vei trOng thái ñích
Dùng hàm này, trOng thái k.t thúc sƒ có giá tri là 8 vì cD 8 kh=i ñ0u ñưUc ñft m vi trí ñúng TrOng thái khmi ñku có giá tri là 4 (vì nó có 1 ñiTm c4ng cho các kh=i C, D, E,
F, G, H và 1 ñiTm trh cho các kh=i A và B) Chw có thT có m4t di chuyTn th trOng thái
Đi0u ñó sinh ra m4t trOng thái vei s= ñiTm là 6 (vì vi trí c$a kh=i A bây giZ sinh ra 1 ñiTm c4ng hơn là m4t ñiTm trh) Th$ tMc leo núi sƒ ch p nhCn sq dich chuyTn ñó Th
ñưUc minh hNa trong hình dưei Nh\ng trOng thái này có s= ñiTm là : h’(Ta)= 4; h’(Tb) = 4 và h’(Tc) = 4
Trang 21Hình Các trOng thái có thT ñOt ñưUc th T1
Th$ tMc leo núi sƒ tOm dhng bmi vì t t cD các trOng thái này có s= ñiTm th p hơn trOng thái hign hành Quá trình tìm ki.m chw dhng lOi m m4t trOng thái cqc ñOi ñia phương mà không phDi là cqc ñOi toàn cMc
hign tOi), c4ng 1 ñiTm, ngưUc lOi trh 1 ñiTm
Dùng hàm này, trOng thái k.t thúc có s= ñiTm là 28 vì B njm ñúng vi trí và không có kh=i phM trU nào, C ñúng vi trí ñưUc 1 ñiTm c4ng vei 1 ñiTm do kh=i phM trU B njm ñúng vi trí nên C ñưUc 2 ñiTm, D ñưUc 3 ñiTm, TrOng thái khmi ñku có s= ñiTm là –
28 Vigc di chuyTn A xu=ng tOo thành m4t c4t mei làm sinh ra m4t trOng thái vei s=
phát sinh ti.p theo bây giZ có các ñiTm s= là : h’(Ta)=–28; h’(Tb)=–16 và h’(Tc) = –
15 Lúc này th$ tMc leo núi d=c ñWng sƒ chNn di chuy.n ñ.n trOng thái Tc, m ñó có
nghĩa là có nhiGu ưu ñi>m hơn mà còn phDi ít khuy0t ñi>m hơn Hơn n\a, khuy.t ñiTm không có nghĩa chw là sq sai bigt ngay tOi m4t vi trí mà còn là sq khác bigt trong tương quan gi\a các vi trí Rõ ràng là ñWng v0 mft k.t quD, cùng m4t th$ tMc
lOi hoOt ñ4ng m4t cách hoàn hDo (do bi.t ñánh giá cD ưu ñiTm và khuy.t ñiTm) Đáng ti.c, không phDi lúc nào chúng ta cũng thi.t k ñưUc m4t hàm Heuristic hoàn hDo như th Vì vigc ñánh giá ưu ñiTm ñã khó, vigc ñánh giá khuy.t ñiTm càng khó
và tinh t hơn Chsng hOn, xét lOi v n ñ0 mu=n ñi vào khu trung tâm c$a m4t thành ph= xa l ĐT hàm Heuristic higu quD, ta ckn phDi ñưa các thông tin v0 các ñưZng m4t chi0u và các ngõ cMt, mà trong trưZng hUp m4t thành ph= hoàn toàn xa lO thì ta khó hofc không thT bi.t ñưUc nh\ng thông tin này
Đ.n ñây, chúng ta hiTu rõ bDn ch t c$a hai thuCt giDi ti.p cCn theo chi.n lưUc tìm ki.m chi0u sâu Higu quD c$a cD hai thuCt giDi leo ñ9i ñơn giDn và leo ñ9i d=c ñWng phM thu4c vào :
+ Ch t lưUng c$a hàm Heuristic
+ Đfc ñiTm c$a không gian trOng thái
+ TrOng thái khmi ñku
Sau ñây, chúng ta sƒ tìm hiTu m4t ti.p cCn theo mei, k.t hUp ñưUc sWc mOnh c$a cD tìm ki.m chi0u sâu và tìm ki.m chi0u r4ng M4t thuCt giDi r t linh ñ4ng và có thT nói
là m4t thuCt giDi kinh ñiTn c$a Heuristic
Trang 22III.4 Tìm kiFm ưu tiên tWi ưu (bestIfirst search)
Ưu ñiTm c$a tìm ki.m theo chi0u sâu là không phDi quan tâm ñ.n sq mm r4ng c$a
t t cD các nhánh Ưu ñiTm c$a tìm ki.m chi0u r4ng là không bi sa vào các ñưZng dan
b toc (các nhánh cMt) Tìm ki.m ưu tiên t=i ưu sƒ k.t hUp 2 phương pháp trên cho phép ta ñi theo m4t con ñưZng duy nh t tOi m4t thZi ñiTm, nhưng ñ9ng thZi van
"quan sát" ñưUc nh\ng hưeng khác N.u con ñưZng ñang ñi "có v—" không triTn vNng bjng nh\ng con ñưZng ta ñang "quan sát" ta sƒ chuyTn sang ñi theo m4t trong s= các con ñưZng này ĐT tign lUi ta sƒ dùng ch\ vi.t tot BFS thay cho tên gNi tìm ki.m
ưu tiên t=i ưu
M4t cách cM thT, tOi m•i bưec c$a tìm ki.m BFS, ta chNn ñi theo trOng thái có khD năng cao nh t trong s= các trOng thái ñã ñưUc xét cho ñ0n th i ñi>m ñó (khác vei leo ñ9i d=c ñWng là chw chNn trOng thái có khD năng cao nh t trong s= các trOng thái
k ti.p có thT ñ.n ñưUc th trOng thái hign tOi) Như vCy, vei ti.p cCn này, ta sƒ ưu tiên ñi vào nh\ng nhánh tìm ki.m có khD năng nh t (gi=ng tìm ki.m leo ñ9i d=c ñWng), nhưng ta sƒ không bi lnn qunn trong các nhánh này vì n.u càng ñi sâu vào m4t hưeng mà ta phát hign ra rjng hưeng này càng ñi thì càng tg, ñ.n mWc nó x u hơn cD nh\ng hưeng mà ta chưa ñi, thì ta sƒ không ñi ti.p hưeng hign tOi n\a mà chNn ñi theo m4t hưeng t=t nh t trong s= nh\ng hưeng chưa ñi Đó là tư tưmng ch$ ñOo c$a tìm ki.m BFS ĐT hiTu ñưUc tư tưmng này BOn hãy xem ví dM sau :
Hình Minh hNa thuCt giDi Best?First Search
Khmi ñku, chw có m4t nút (trOng thái) A nên nó sƒ ñưUc mm r4ng tOo ra 3 nút mei B,C
và D Các con s= dưei nút là giá tri cho bi.t ñ4 t=t c$a nút Con s= càng nht, nút càng t=t Do D là nút có khD năng nh t nên nó sƒ ñưUc mm r4ng ti.p sau nút A và sinh ra 2 nút k ti.p là E và F Đ.n ñây, ta lOi th y nút B có v— có khD năng nh t (trong các nút B,C,E,F) nên ta sƒ chNn mm r4ng nút B và tOo ra 2 nút G và H Nhưng lOi m4t lkn n\a, hai nút G, H này ñưUc ñánh giá ít khD năng hơn E, vì th sq chú ý lOi
Trang 23trm v0 E E ñưUc mm r4ng và các nút ñưUc sinh ra th E là I và J • bưec k ti.p, J sƒ ñưUc mm r4ng vì nó có khD năng nh t Quá trình này ti.p tMc cho ñ.n khi tìm th y m4t lZi giDi
Lưu ý rjng tìm ki.m này r t gi=ng vei tìm ki.m leo ñ9i d=c ñWng, vei 2 ngoOi lg Trong leo núi, m4t trOng thái ñưUc chNn và t t cD các trOng thái khác bi loOi bt, không bao giZ chúng ñưUc xem xét lOi Cách xx lý dWt khoát này là m4t ñfc trưng c$a leo ñ9i Trong BFS, tOi m4t bưec, cũng có m4t di chuyTn ñưUc chNn nhưng nh\ng cái khác van ñưUc gi\ lOi, ñT ta có thT trm lOi xét sau ñó khi trOng thái hign tOi trm nên kém khD năng hơn nh\ng trOng thái ñã ñưUc lưu tr\ Hơn n\a, ta chNn trOng thái t=t nh t mà không quan tâm ñ.n nó có t t hơn hay không các trOng thái trưec
ñó Đi0u này tương phDn vei leo ñ9i vì leo ñ9i sƒ dhng n.u không có trOng thái ti.p theo nào t=t hơn trOng thái hign hành
ĐT cài ñft các thuCt giDi theo kiTu tìm ki.m BFS, ngưZi ta thưZng ckn dùng 2 tCp hUp sau :
OPEN : tCp chWa các trOng thái ñã ñưUc sinh ra nhưng chưa ñưUc xét ñ.n (vì ta ñã chNn m4t trOng thái khác) Thqc ra, OPEN là m4t loOi hàng ñUi ưu tiên (priority queue) mà trong ñó, phkn tx có ñ4 ưu tiên cao nh t là phkn tx t t nh t NgưZi ta thưZng cài ñft hàng ñUi ưu tiên bjng Heap Các bOn có thT tham khDo thêm trong các tài ligu v0 C u trúc d\ ligu v0 loOi d\ ligu này
CLOSE : tCp chWa các trOng thái ñã ñưUc xét ñ.n Chúng ta ckn lưu tr\ nh\ng trOng thái này trong b4 nhe ñT ñ0 phòng trưZng hUp khi m4t trOng thái mei ñưUc tOo ra lOi trùng vei m4t trOng thái mà ta ñã xét ñ.n trưec ñó Trong trưZng hUp không gian tìm ki.m có dOng cây thì không ckn dùng tCp này
Thuft giSi BESTIFIRST SEARCH
1 Đft OPEN chWa trOng thái khmi ñku
2 Cho ñ.n khi tìm ñưUc trOng thái ñích hofc không còn nút nào trong OPEN, thqc hign :
OPEN) 2.b N.u Tmax là trOng thái k.t thúc thì thoát
2.c NgưUc lOi, tOo ra các trOng thái k ti.p Tk có thT có th trOng thái Tmax Đ=i vei m•i trOng thái k ti.p Tk thqc hign :
Tính f(Tk); Thêm Tk vào OPEN
BFS khá ñơn giDn Tuy vCy, trên thqc t., cũng như tìm ki.m chi0u sâu và chi0u r4ng, hi.m khi ta dùng BFS m4t cách trqc ti.p Thông thưZng, ngưZi ta thưZng dùng các
Trang 24Thông tin vJ quá kh/ và tương lai
Thông thưZng, trong các phương án tìm ki.m theo kiTu BFS, ñ4 t=t f c$a m4t trOng thái ñưUc tính dqa theo 2 hai giá tri mà ta gNi là là g và h’ h’ chúng ta ñã bi.t, ñó là m4t ưec lưUng v0 chi phí th trOng thái hign hành cho ñ.n trOng thái ñích (thông tin tương lai) Còn g là "chi0u dài quãng ñưZng" ñã ñi th trOng thái ban ñku cho ñ.n trOng thái hign tOi (thông tin quá khW) Lưu ý rjng g là chi phí thqc sq (không phDi chi phí ưec lưUng) ĐT dr hiTu, bOn hãy quan sát hình sau :
Hình 6.14 Phân bigt khái nigm g và h’
K.t hUp g và h’ thành f’ (f’ = g + h’) sƒ thT hign m4t ưec lưUng v0 "tlng chi phí" cho con ñưZng th trOng thái bot ñku ñ.n trOng thái k.t thúc dNc theo con ñưZng ñi qua trOng thái hign hành ĐT thuCn tign cho thuCt giDi, ta quy ưec là g và h’ ñ0u không
âm và càng nht nghĩa là càng t=t
III.5 Thuft giSi AT
hàm g – tlng chi0u dài con ñưZng ñã ñi th trOng thái bot ñku ñ.n trOng thái hign tOi Thuft giSi AT
1 Đft OPEN chWa trOng thái khmi ñku
2 Cho ñ.n khi tìm ñưUc trOng thái ñích hofc không còn nút nào trong OPEN, thqc hign :
2.a ChNn trOng thái (Tmax) có giá trj g nhk nh8t trong OPEN (và
2.b N.u Tmax là trOng thái k.t thúc thì thoát
2.c NgưUc lOi, tOo ra các trOng thái k ti.p Tk có thT có th trOng thái Tmax Đ=i vei m•i trOng thái k ti.p Tk thqc hign :
Trang 25g(Tk) = g(Tmax) + cost(Tmax, Tk);
Thêm Tk vào OPEN
* Vì chw sx dMng hàm g (mà không dùng hàm ưec lưUng h’) fsñT ñánh giá ñ4 t=t c$a m4t trOng thái nên ta cũng có thT xem AT chw là m4t thuCt toán
III.6 Thuft giSi AKT
(Algorithm for Knowlegeable Tree Search)
c$a m4t trOng thái f là tlng c$a hai hàm g và h’
Thuft giSi AKT
1 Đft OPEN chWa trOng thái khmi ñku
2 Cho ñ.n khi tìm ñưUc trOng thái ñích hofc không còn nút nào trong OPEN, thqc hign :
2.a ChNn trOng thái (Tmax) có giá trj f nhk nh8t trong OPEN (và xóa
2.b N.u Tmax là trOng thái k.t thúc thì thoát
2.c NgưUc lOi, tOo ra các trOng thái k ti.p Tk có thT có th trOng thái Tmax Đ=i vei m•i trOng thái k ti.p Tk thqc hign :
g(Tk) = g(Tmax) + cost(Tmax, Tk);
Tính h’(Tk) f(Tk) = g(Tk) + h’(Tk);
Thêm Tk vào OPEN
III.7 Thuft giSi A*
này ñã có svn trong OPEN hofc CLOSE Khi xét ñ.n m4t trOng thái Ti bên cOnh vigc
thêm hai thông s= sau :
1 Tr ng thái cha c+a tr ng thái Ti (ký hi-u là Cha(Ti) : cho bi.t trOng thái dan ñ.n
cho chi phí ñi th trOng thái khmi ñku ñ.n Ti là th p nh t, nghĩa là :
Trang 26g(Ti) = g(Tcha) + cost(Tcha, Ti) là th p nh t
ti.p Tk c$a Ti sao cho chi phí ñ.n Tk thông qua Ti th trOng thái ban ñku là th p nh t Thqc ch t thì danh sách này có thT ñưUc tính ra th thu4c tính Cha c$a các trOng thái ñưUc lưu tr\ Tuy nhiên, vigc tính toán này có thT m t nhi0u thZi gian (khi tCp OPEN, CLOSE ñưUc mm r4ng) nên ngưZi ta thưZng lưu tr\ ra m4t danh sách riêng Trong thuCt toán sau ñây, chúng ta sƒ không ñ0 cCp ñ.n vigc lưu tr\ danh sách này Sau khi hiTu rõ thuCt toán, bOn ñNc có thT dr dàng ñi0u chwnh lOi thuCt toán ñT lưu tr\ thêm thu4c tính này
1 Đft OPEN chw chWa T0 Đft g(T0) = 0, h’(T0) = 0 và f’(T0) = 0
Đft CLOSE là tCp hUp r•ng
2 Lfp lOi các bưec sau cho ñ.n khi gfp ñi0u kign dhng
2.a N.u OPEN r•ng : bài toán vô nghigm, thoát
2.b NgưUc lOi, chNn Tmax trong OPEN sao cho f’(Tmax) là nht nh t
2.b.1 L y Tmax ra khti OPEN và ñưa Tmax vào CLOSE
Tmax
2.b.3 N.u Tmax không phDi là TG TOo ra danh sách t t c/ các trOng thái k ti.p c$a Tmax GNi m4t trOng thái này là Tk Vei m•i Tk, làm các bưec sau :
2.b.3.1 Tính g(Tk) = g(Tmax) + cost(Tmax, Tk)
Đft g(Tk’) = g(Tk) Tính lOi f’(Tk’) Đft Cha(Tk’) = Tmax
Đft g(Tk’) = g(Tk) Tính lOi f’(Tk’)
Trang 27Đft Cha(Tk’) = Tmax
Lan truy n sq thay ñli giá tri g, f’ cho t t
cD các trOng thái k ti.p c$a Ti (m t t cD các c p) ñã ñưUc lưu tr\ trong CLOSE và OPEN
CLOSE thì :
Thêm Tk vào OPEN Tính : f' (Tk) = g(Tk)+h’(Tk)
Có m4t s= ñiTm ckn giDi thích trong thuCt giDi này Đku tiên là vigc sau khi ñã tìm
ñơn giDn, bOn chw ckn lkn ngưUc theo thu4c tính Cha c$a các trOng thái ñã ñưUc lưu
ĐiTm thW hai là thao tác cCp nhCt lOi g(Tk’) , f’(Tk’) và Cha(Tk’) trong bưec 2.b.3.2
và 2.b.3.3 Các thao tác này thT hign tư tưmng : "luôn chNn con ñưZng t=i ưu nh t"
Tk’ Do ñó, n.u chúng ta phát hign th y m4t "con ñưZng" khác t=t hơn thông qua Tk (có chi phí nht hơn) con ñưZng hign tOi ñưUc lưu tr\ thì ta phDi chNn "con ñưZng" mei t=t hơn này TrưZng hUp 2.b.3.3 phWc tOp hơn Vì th Tk’ njm trong tCp CLOSE nên th Tk’ ta ñã lưu tr\ các trOng thái con k ti.p xu t phát th Tk’ Nhưng g(Tk’) thay ñli dan ñ.n giá tri g c$a các trOng thái con này cũng phDi thay ñli theo Và ñ.n lưUt các trOng thái con này lOi có thT có các các trOng thái con ti.p theo c$a chúng và
cW th cho ñ.n khi m•i nhánh k.t thúc vei m4t trOng thái trong OPEN (nghĩa là không có trOng thái con nào n\a) ĐT thqc hign quá trình cCp nhCt này, ta hãy thqc hign quá trình duygt theo chi0u sâu vei ñiTm khmi ñku là Tk’ Duygt ñ.n ñâu, ta cCp nhCt lOi g c$a các trOng thái ñ.n ñó ( dùng công thWc g(T) = g(Cha(T))
+cost(Cha(T), T) ) và vì th giá tri f’ c$a các trOng thái này cũng thay ñli theo
M4t lkn n\a, xin nhoc lOi rjng, bOn có thT cho rjng tCp OPEN lưu tr\ các trOng thái
"sƒ ñưUc xem xét ñ.n sau" còn tCp CLOSE lưu tr\ các trOng thái "ñã ñưUc xét ñ.n r9i"
Có thT bOn sƒ cDm th y khá lúng túng trưec m4t thuCt giDi dài như th V n ñ0 có lƒ s— trm nên sáng s$a hơn khi bOn quan sát các bưec giDi bài toán tìm ñưZng ñi ngon
nh t trên ñ9 thi bjng thuCt giDi A* sau ñây
Chúng ta sƒ minh hNa hoOt ñ4ng c$a thuCt giDi A* trong vigc tìm ki.m ñưZng ñi ngon
nh t th thành ph= Arad ñ.n thành ph= Bucharest c$a Romania BDn ñ9 các thành ph= c$a Romania ñưUc cho trong ñ9 thi sau Trong ñó m•i ñwnh c$a ñ9 thi c$a là m4t thành ph=, gi\a hai ñwnh có cung n=i nghĩa là có ñưZng ñi gi\a hai thành ph= tương Wng TrNng s= c$a cung chính là chi0u dài (tính bjng km) c$a ñưZng ñi n=i hai thành
Trang 28ph= tương Wng, chi0u dài theo ñưZng chim bay m4t thành ph= ñ.n Bucharest ñưUc cho trong bDng kèm theo
Hình : BDng ñ9 c$a Romania vei khoDng cách ñưZng tính theo km
BSng : KhoDng cách ñưZng chim bay th m4t thành ph= ñ.n Bucharest Chúng ta sƒ chNn hàm h’ chính là khoDng cách ñưZng chim bay cho trong bDng trên
Trang 29h’(Sibiu) 253
g(Sibiu) g(Arad)+cost(Arad,Sibiu)
0+140 140 f’(Sibiu) g(Sibiu)+h’(Sibiu)
140+253 393 Cha(Sibiu) Arad
h’(Timisoara) 329
g(Timisoara) g(Arad)+cost(Arad, Timisoara)
0+118 118 f’(Timisoara) g(Timisoara)+ h’(Timisoara)
118+329 447 Cha(Timisoara) Arad
h’(Zerind) 374
g(Zerind) g(Arad)+cost(Arad, Zerind)
0+75 75 f’(Zerind) g(Zerind)+h’(Zerind)
75+374 449 Cha(Zerind) Arad
Trang 30Do cD 3 nút Sibiu, Timisoara, Zerind ñ0u không có trong cD OPEN và CLOSE nên ta
bl sung 3 nút này vào OPEN
OPEN {(Sibiu,g 140,h’ 253,f’ 393,Cha Arad)
(Timisoara,g 118,h’ 329,f’ 447,Cha Arad) (Zerind,g 75,h’ 374,f’ 449,Cha Arad)}
CLOSE {(Arad,g 0,h’ 0,f’ 0)}
Hình : Bưec 1, nút ñưUc ñóng ngofc vuông (như [Arad]) là nút trong tCp CLOSE,
ngưUc lOi là trong tCp OPEN
Trong tCp OPEN, nút Sibiu là nút có giá tri f’ nht nh t nên ta sƒ chNn Tmax Sibiu
Ta l y Sibiu ra khti OPEN và ñưa vào CLOSE
OPEN {(Timisoara,g 118,h’ 329,f’ 447,Cha Arad)
(Zerind,g 75,h’ 374,f’ 449,Cha Arad)}
CLOSE {(Arad,g 0,h’ 0,f’ 0)
(Sibiu,g 140,h’ 253,f’ 393,Cha Arad)}
Th Sibiu có thT ñi ñ.n ñưUc 4 thành ph= là : Arad, Fagaras, Oradea, Rimnicu Ta lkn lưUt tính các giá tri g, h’, f’ cho các nút này
h’(Arad) 366
g(Arad) g(Sibiu)+cost(Sibiu,Arad)
140+140 280 f’(Arad) g(Arad)+h’(Arad)
280+366 646 h’(Fagaras) 178
g(Fagaras) g(Sibiu)+cost(Sibiu, Fagaras) 140+99 239
Trang 31f’(Fagaras) g(Fagaras)+ h’(Fagaras)
239+178 417 h’(Oradea) 380
g(Oradea) g(Sibiu)+cost(Sibiu, Oradea)
140+151 291 f’(Oradea) g(Oradea)+ h’(Oradea)
291+380 671 h’(R.Vilcea) 193
g(R.Vilcea) g(Sibiu)+cost(Sibiu, R.Vilcea)
140+80 220 f’(R.Vilcea) g(R.Vilcea)+ h’(R.Vilcea)
220+193 413 Nút Arad ñã có trong CLOSE Tuy nhiên, do g(Arad) mei ñưUc tOo ra (có giá tri 280) len hơn g(Arad) lưu trong CLOSE (có giá tri 0) nên ta sƒ không cCp nhCt lOi giá tri g
và f’ c$a Arad lưu trong CLOSE 3 nút còn lOi : Fagaras, Oradea, Rimnicu ñ0u không
có trong cD OPEN và CLOSE nên ta sƒ ñưa 3 nút này vào OPEN, ñft cha c$a chúng là Sibiu Như vCy, ñ.n bưec này OPEN ñã chWa tlng c4ng 5 thành ph=
OPEN {(Timisoara,g 118,h’ 329,f’ 447,Cha Arad)
(Zerind,g 75,h’ 374,f’ 449,Cha Arad) (Fagaras,g 239,h’ 178,f’ 417,Cha Sibiu)
Trang 32(Oradea,g 291,h’ 380,f’ 617,Cha Sibiu) (R.Vilcea,g 220,h’ 193,f’ 413,Cha Sibiu)}
CLOSE {(Arad,g 0,h’ 0,f’ 0)
(Sibiu,g 140,h’ 253,f’ 393,Cha Arad)}
Trong tCp OPEN, nút R.Vilcea là nút có giá tri f’ nht nh t Ta chNn Tmax R.Vilcea ChuyTn R.Vilcea th OPEN sang CLOSE Th R.Vilcea có thT ñi ñ.n ñưUc 3 thành ph= là Craiova, Pitesti và Sibiu Ta lkn lưUt tính giá tri f’, g và h’ c$a 3 thành ph= này
h’(Sibiu) 253
g(Sibiu) g(R.Vilcea)+ cost(R.Vilcea,Sibiu)
220+80 300 f’(Sibiu) g(Sibiu)+h’(Sibiu)
300+253 553 h’(Craiova) 160
g(Craiova) g(R.Vilcea)+ cost(R.Vilcea, Craiova)
220+146 366 f’(Craiova) g(Fagaras)+h’(Fagaras)
366+160 526 h’(Pitesti) 98
g(Pitesti) g(R.Vilcea)+ cost(R.Vilcea, Pitesti)
220+97 317 f’(Pitesti) g(Oradea)+h’(Oradea)
317+98 415 Sibiu ñã có trong tCp CLOSE Tuy nhiên, do g’(Sibiu) mei (có giá tri là 553) len hơn g’(Sibiu) (có giá tri là 393) nên ta sƒ không cCp nhCt lOi các giá tri c$a Sibiu ñưUc lưu trong CLOSE Còn lOi 2 thành ph= là Pitesti và Craiova ñ0u không có trong cD OPEN
và CLOSE nên ta sƒ ñưa nó vào OPEN và ñft cha c$a chúng là R.Vilcea
Trang 33OPEN {(Timisoara,g 118,h’ 329,f’ 447,Cha Arad)
(Zerind,g 75,h’ 374,f’ 449,Cha Arad) (Fagaras,g 239,h’ 178,f’ 417,Cha Sibiu)
(Oradea,g 291,h’ 380,f’ 617,Cha Sibiu) (Craiova,g 366,h’ 160,f’ 526,Cha R.Vilcea)
(Pitesti,g 317,h’ 98,f’ 415,Cha R.Vilcea) } CLOSE {(Arad,g 0,h’ 0,f’ 0)
(Sibiu,g 140,h’ 253,f’ 393,Cha Arad) (R.Vilcea,g 220,h’ 193,f’ 413,Cha Sibiu) }
Đ.n ñây, trong tCp OPEN, nút t=t nh t là Pitesti, th Pitesti ta có thT ñi ñ.n ñưUc R.Vilcea, Bucharest và Craiova L y Pitesti ra khti OPEN và ñft nó vào CLOSE Thqc hign ti.p theo tương tq như trên, ta sƒ không cCp nhCt giá tri f’,
g c$a R.Vilcea và Craiova lưu trong CLOSE Sau khi tính toán f’, g c$a
Bucharest, ta sƒ ñưa Bucharest vào tCp OPEN, ñft Cha(Bucharest) Pitesti h’(Bucharest) 0
g(Bucharest) g(Pitesti)+cost(Pitesti, Bucharest)
317+100 418 f’(Bucharest) g(Fagaras)+h’(Fagaras)
417+0 417
Trang 34• bưec k ti.p, ta sƒ chNn ñưUc Tmax Bucharest Và như vCy thuCt toán k.t thúc (thqc ra thì tOi bưec này, có hai Wng cx viên là Bucharest và Fagaras vì ñ0u cùng có f’ 417 , nhưng vì Bucharest là ñích nên ta sƒ ưu tiên chNn hơn)
ĐT xây dqng lOi con ñưZng ñi th Arad ñ.n Bucharest ta lkn theo giá tri Cha ñưUc lưu tr\ kèm vei f’, g và h’ cho ñ.n lúc ñ.n Arad
Đ.n ñây, ñT minh hNa m4t trưZng hUp phWc tOp hơn c$a thuCt giDi Ta thx sxa ñli lOi
c u trúc ñ9 thi và quan sát hoOt ñ4ng c$a thuCt giDi GiD sx ta có thêm m4t thành ph= tOm gNi là TP và con ñưZng gi\a Sibiu và TP có chi0u dài 100, con ñưZng gi\a
TP và Pitesti có chi0u dài 60 Và khoDng cách ñưZng chim bay th TP ñ.n Bucharest
là 174 Như vCy rõ ràng, con ñưZng t=i ưu ñ.n Bucharest không còn là Arad, Sibiu, R.Vilcea, Pitesti, Bucharest n\a mà là Arad, Sibiu, TP, Pitesti, Bucharest
Trong trưZng hUp này, chúng ta van ti.n hành bưec 1 như m trên Sau khi thqc hign hign bưec 2 (mm r4ng Sibiu), chúng ta có cây tìm ki.m như hình sau Lưu ý là có thêm nhánh TP
Trang 35R.Vilcea van có giá tri f’ th p nh t Nên ta mm r4ng R.Vilcea như trưZng hUp ñku tiên
Bưec k ti.p c$a trưZng hUp ñơn giDn là mm r4ng Pitesti ñT có ñưUc k.t quD Tuy nhiên, trong trưZng hUp này, TP có giá tri f’ th p hơn Do ñó, ta chNn mm r4ng TP Th
TP ta chw có 2 hưeng ñi, m4t quay lOi Sibiu và m4t ñ.n Pitesti ĐT nhanh chóng, ta sƒ không tính toán giá tri c$a Sibiu vì bi.t choc nó sƒ len hơn giá tri ñưUc lưu tr\ trong CLOSE (vì ñi ngưUc lOi)
h’(Pitesti) 98
g(Pitesti) g(TP)+cost(TP, Pitesti)
240+75 315 f’(Pitesti) g(TP)+h’(Pitesti) 315+98 413
Pistestti ñã xu t hign trong tCp OPEN và g’(Pitesti) mei (có giá tri là 315) th p hơn g’(Pitesti) cũ (có giá tri 317) nên ta phDi cCp nhCt lOi giá tri c$a f’,g, Cha c$a Pitesti lưu trong OPEN Sau khi cCp nhCt xong, tCp OPEN và CLOSE sƒ như sau :
Trang 36OPEN {(Timisoara,g 118,h’ 329,f’ 447,Cha Arad)
(Zerind,g 75,h’ 374,f’ 449,Cha Arad) (Fagaras,g 239,h’ 178,f’ 417,Cha Sibiu) (Oradea,g 291,h’ 380,f’ 617,Cha Sibiu) (Craiova,g 366,h’ 160,f’ 526,Cha R.Vilcea) (Pitesti,g 315,h’ 98,f’ 413,Cha TP) } CLOSE {(Arad,g 0,h’ 0,f’ 0)
(Sibiu,g 140,h’ 253,f’ 393,Cha Arad) (R.Vilcea,g 220,h’ 193,f’ 413,Cha Sibiu) }
Đ.n ñây ta th y rjng, ban ñku thuCt giDi chNn ñưZng ñi ñ.n Pitesti qua R.Vilcea Tuy nhiên, sau ñó, thuCt giDi phát hign ra con ñưZng ñ.n Pitesti qua TP là t=t hơn nên nó
sƒ sx dMng con ñưZng này Đây chính là trưZng hUp 2.b.iii.2 trong thuCt giDi
Bưec sau, chúng ta sƒ chNn mm r4ng Pitesti như bình thưZng Khi lkn ngưUc theo thu4c tính Cha, ta sƒ có con ñưZng t=i ưu là Arad, Sibiu, TP, Pitesti, Bucharest III.9 Bàn lufn vJ A*
Đ.n ñây, có lƒ bOn ñã hiTu ñưUc thuCt giDi này Ta có m4t vài nhCn xét khá thú vi v0 A* Đku tiên là vai trò c$a g trong vigc giúp chúng ta lqa chNn ñưZng ñi Nó cho chúng ta khD năng lqa chNn trOng thái nào ñT mm r4ng ti.p theo, không chw dqa trên vigc trOng thái ñó t=t như th nào (thT hign bmi giá tri h’) mà còn trên cơ sm con ñưZng th trOng thái khmi ñku ñ.n trOng thái hign tOi ñó t=t ra sao Đi0u này sƒ r t h\u ích n.u ta không chw quan tâm vigc tìm ra lZi giDi hay không mà còn quan tâm ñ.n higu quD c$a con ñưZng dan ñ.n lZi giDi Chsng hOn như trong bài toán tìm ñưZng ñi ngon nh t gi\a hai ñiTm Bên cOnh vigc tìm ra ñưZng ñi gi\a hai ñiTm, ta còn phDi tìm ra m4t con ñưZng ngon nh t Tuy nhiên, n.u ta chw quan tâm ñ.n vigc tìm ñưsc lti giSi (mà không quan tâm ñ.n higu quD c$a con ñưZng ñ.n lZi giDi), chúng ta có thT ñft g=0 m mNi trOng thái Đi0u này sƒ giúp ta luôn chNn ñi theo trOng thái có v— gkn nh t vei trOng thái k.t thúc (vì lúc này f’ chw phM thu4c vào h’ là hàm ưec lưUng "khoDng cách" gkn nh t ñT tei ñích) Lúc này thuCt giDi có dáng d p c$a tìm ki.m chi0u sâu theo nguyên lý hưeng ñích k.t hUp vei lkn ngưUc
NgưUc lOi, n.u ta mu=n tìm ra k.t quD vei sW bưuc ít nh8t (ñOt ñưUc trOng thái ñích vei s= trOng thái trung gian ít nh t), thì ta ñft giá tri ñT ñi th m4t trOng thái ñ.n các
(và van dùng m4t hàm ưec lưUng h’ như bình thưZng) Còn ngưUc lOi, n.u mu=n tìm chi phí r— nh t thì ta phDi ñft giá tri hàm cost chính xác (phDn ánh ñúng ghi phí thqc sq)
Trang 37Đ.n ñây, choc bOn ñNc ñã có thT bot ñku cDm nhCn ñưUc rjng thuCt giDi A* không hoàn toàn là m4t thuCt giDi t=i ưu tuygt ñ=i Nói ñúng hơn, A* chw là m4t thuCt giDi linh ñ4ng và cho chúng ta khá nhi0u tùy chNn Tùy theo bài toán mà ta sƒ có m4t b4 thông s= thích hUp cho A* ñT thuCt giDi hoOt ñ4ng higu quD nh t
ĐiTm quan tâm thW hai là v0 giá tri h’ – sq ưec lưUng khoDng cách (chi phí) th m4t trOng thái ñ.n trOng thái ñích N.u h’ chính là h (ñánh giá tuygt ñ=i chính xác) thì A*
sƒ ñi m4t mOch th trOng thái ñku ñ.n trOng thái k.t thúc mà không ckn phDi thqc hign b t kỳ m4t thao tác ñli hưeng nào! Dĩ nhiên, trên thqc t., hku như chsng bao giZ ta tìm th y m4t ñánh giá tuygt ñ=i chính xác Tuy nhiên, ñi0u ñáng quan tâm m ñây là h’ ñưUc ưec lưUng càng gkn vei h, quá trình tìm ki.m càng ít bi sai sót, ít bi rƒ vào nh\ng nhánh cMt hơn Hay nói ngon gNn là càng nhanh chóng tìm th y lZi giDi hơn
N.u h’ luôn bjng 0 m mNi trOng thái (trm v0 thuCt giDi AT) thì quá trình tìm ki.m sƒ ñưUc ñi0u khiTn hoàn toàn bmi giá tri g Nghĩa là thuCt giDi sƒ chNn ñi theo nh\ng hưeng mà sƒ t=n ít chi phí/bưec ñi nh t (chi phí tính th trOng thái ñku tiên ñ.n trOng thái hign ñang xét) b t ch p vigc ñi theo hưeng ñó có khD năng dan ñ.n lZi giDi hay không Đây chính là hình Dnh c$a nguyên lý tham lam (Greedy)
N.u chi phí th trOng thái sang trOng thái khác luôn là hjng s= (dĩ nhiên lúc này h’ luôn bjng 0) thì thuCt giDi A* trm thành thuCt giDi tìm ki.m theo chi0u r4ng! Lý do là
vì t t cD nh\ng trOng thái cách trOng thái khmi ñku n bưec ñ0u có cùng giá tri g và vì
th ñ0u có cùng f’ và giá tri này sƒ nht hơn t t cD các trOng thái cách trOng thái khmi ñku n+1 bưec Và n.u g luôn bjng 0 và h’ cũng luôn bjng 0, mNi trOng thái ñang xét ñ0u tương ñương nhau Ta chw có thT chNn bjng trOng thái k ti.p bjng ngau nhiên ! Còn n.u như h’ không thT tuygt ñ=i chính xác (nghĩa là không bjng ñúng h) và cũng không luôn bjng 0 thì sao? Có ñi0u gì thú vi v0 cách xx lý c$a quá trình tìm ki.m hay không? Câu trD lZi là có N.u như bjng m4t cách nào ñó, ta có thT choc chon rjng, ưec lưUng h’ luôn nht hơn h (ñ=i vei mNi trOng thái) thì thuCt giDi A* sƒ
thưZng tìm ra con ñưZng t=i ưu (xác ñinh bmi g) ñT ñi ñ.n ñích, n.u ñưZng dan ñó t9n tOi và quá trình tìm ki.m sƒ ít khi bi sa lky vào nh\ng con ñưZng quá dm Còn n.u vì m4t lý do nào ñó, ưec lưUng h’ lOi len hơn h thì thuCt giDi sƒ dr dàng bi vưeng vào nh\ng hưeng tìm ki.m vô ích ThCm chí nó lOi có khuynh hưeng tìm ki.m m nh\ng hưeng ñi vô ích trưec! Đi0u này có thT th y m4t cách dr dàng th vài ví dM
Xét trưZng hUp ñưUc trình bày trong hình sau GiD sx rjng t t cD các cung ñ0u có giá tri 1 G là trOng thái ñích Khmi ñku, OPEN chw chWa A, sau ñó A ñưUc mm r4ng nên B,
C, D sƒ ñưUc ñưa vào OPEN (hình vƒ mô tD trOng thái 2 bưec sau ñó, khi B và E ñã ñưUc mm r4ng) Đ=i vei m•i nút, con s= ñku tiên là giá tri h’, con s= k ti.p là g Trong ví dM này, nút B có f’ th p nh t là 4 = h’+g = 3 + 1 , vì th nó ñưUc mm r4ng trưec tiên GiD sx nó chw có m4t nút con ti.p theo là E và h’(E) = 3, do E các A hai cung nên g(E) = 2 suy ra f’(E) = 5, gi=ng như f’(C) Ta chNn mm r4ng E k ti.p GiD
sx nó cũng chw có duy nh t m4t con k ti.p là F và h’(F) cũng bjng 3 Rõ ràng là chúng ta ñang di chuyTn xu=ng và không phát triTn r4ng Nhưng f’(F) = 6 len hơn f’(D) Do ñó, chúng ta sƒ mm r4ng C ti.p theo và ñOt ñ.n trOng thái ñích Như vCy, ta
th y rjng do ñánh giá th p h(B) nên ta ñã lãng phí m4t s= bưec (E,F), nhưng cu=i cùng ta cùng phát hign ra B khác xa vei ñi0u ta mong ñUi và quay lOi ñT thx m4t ñưZng dan khác
Trang 38Hình : h’ ñánh giá th p h
Bây giZ hãy xét trưZng hUp m hình ti.p theo Chúng ta cũng mm r4ng B m bưec ñku tiên và E m bưec thW hai K ti.p là F và cu=i cùng G, cho ñưZng dan k.t thúc có ñ4 dài là 4 Nhưng giD sx có ñưZng dan trqc ti.p th D ñ.n m4t lZi giDi có ñ4 dài h thCc
sC là 2 thì chúng ta sƒ không bao gi tìm ñưUc ñưZng dan này (tuy rjng ta có thT tìm th y lZi giDi) Bmi vì vigc ñánh giá quá cao h’(D), chúng ta sƒ làm cho D trông dm ñ.n n•i mà ta phDi tìm m4t ñưZng ñi khác – ñ.n m4t lZi giDi tg hơn ? mà không bao giZ nghĩ ñ.n vigc mm r4ng D Nói chung, n.u h’ ñánh giá cao h thì A* sƒ có thT không thT tìm ra ñưZng dan t=i ưu ñ.n lZi giDi (n.u như có nhi0u ñưZng dan ñ.n lZi giDi) M4t câu hti thú vi là "Li-u có m#t nguyên t c chung nào giúp chúng ta ñưa ra m#t cách ư4c lư7ng h’ không bao gi ñánh giá cao h hay không?" Câu trD lZi là "hku như không", bmi vì ñ=i vei hku h.t các v n ñ0 thqc ta ñ0u không bi.t h Tuy nhiên, cách duy nh t ñT bDo ñDm h’ không bao giZ ñánh giá cao h là ñft h’ bjng 0 !
Hình : h’ ñánh giá cao h
Đ.n ñây chúng ta ñã k.t thúc vigc bàn luCn v0 thuCt giDi A*, m4t thuCt giDi linh ñ4ng, tlng quát, trong ñó hàm chWa cD tìm ki.m chi0u sâu, tìm ki.m chi0u r4ng và nh\ng nguyên lý Heuristic khác Chính vì th mà ngưZi ta thưZng nói, A* chính là thuCt giDi tiêu biTu cho Heuristic
Trang 39A* r t linh ñ4ng nhưng van gfp m4t khuy.t ñiTm cơ bDn – gi=ng như chi.n lưUc tìm ki.m chi0u r4ng – ñó là t=n khá nhi0u b4 nhe ñT lưu lOi nh\ng trOng thái ñã ñi qua – n.u chúng ta mu=n nó choc chon tìm th y lZi giDi t=i ưu Vei nh\ng không gian tìm ki.m len nht thì ñây không phDi là m4t ñiTm ñáng quan tâm Tuy nhiên, vei nh\ng không gian tìm ki.m khlng l9 (chsng hOn tìm ñưZng ñi trên m4t ma trCn kích thưec
ñã ñưa ra khá nhi0u các hưeng ti.p cCn lai ñT giDi quy.t v n ñ0 này Chúng ta sƒ tìm hiTu m4t s= phương án nhưng quan trNng nh t, ta ckn phDi nom rõ vi trí c$a A* so vei nh\ng thuCt giDi khác
III.10 vng d9ng A* ñw giSi bài toán TaIcanh
Bài toán Ta?canh ñã thng là m4t trò chơi khá phl bi.n, ñôi lúc ngưZi ta còn gNi ñây
là bài toán 9?puzzle Trò chơi bao g9m m4t hình vuông kích thWơc 3x3 ô Có 8 ô có s=, m•i ô có m4t s= th 1 ñ.n 8 M4t ô còn tr=ng M•i lkn di chuyTn chw ñưUc di
chuyTn m4t ô njm cOnh ô tr=ng v0 phía ô tr=ng V n ñ0 là th m4t trOng thái ban ñku
b t kỳ, làm sao ñưa ñưUc v0 trOng thái cu=i là trOng thái mà các ô ñưUc sop lkn lưUt
th 1 ñ.n 8 theo thW tq th trái sang phDi, th trên xu=ng dưei, ô cu=i dùng là ô tr=ng
Cho ñ.n nay, ngoOi trh 2 giDi pháp vét cOn và tìm ki.m Heuristic, ngưZi ta van chưa tìm ñưUc m4t thuCt toán chính xác, t=i ưu ñT giDi bài toán này Tuy nhiên, cách giDi
nào cũng tìm ñưUc lZi giDi) NhCn xét rjng: TOi m•i thZi ñiTm ta chw có t=i ña 4 ô có thT di chuyTn V n ñ0 là tOi thZi ñiTm ñó, ta sƒ chNn lqa di chuyTn ô nào? Chsng hOn
m hình trên, ta nên di chuyTn (1), (2), (6), hay (7) ? Bài toán này hoàn toàn có c u
TOi m4t trOng thái ñang xét Tk, ñft d(i,j)là sW ô ckn di chuyTn ñT ñưa con s= m ô (i,j) v0 ñúng vi trí c$a nó m trOng thái ñích
Hàm ưec lưUng h’ tOi trOng thái Tk b t kỳ bjng tlng c$a các d(i,j) sao cho vi trí (i,j) không phDi là ô tr=ng
Như vCy ñ=i vei trOng thái m hình ban ñku, hàm f(Tk) sƒ có giá tri là
Fk=2+1+3+1+0+1+2+2=12 III.11 Các chiFn lưsc tìm kiFm lai
Chúng ta ñã bi.t qua 4 kiTu tìm ki.m : leo ñèo (LĐ), tìm theo chi0u sâu (MC), tìm theo chi0u r4ng (BR) và tìm ki.m BFS B=n kiTu tìm ki.m này có thT ñưUc xem như 4 thái cqc c$a không gian liên tMc bao g9m các chi.n lưUc tìm ki.m khác nhau ĐT giDi thích ñi0u này rõ hơn, sƒ tign hơn cho chúng ta n.u nhìn m4t chi.n lưUc tìm ki.m lZi giDi dưei hai chi0u sau :
Trang 40Chi u kh năng quay lui (R): là khD năng cho phép quay lOi ñT xem xét nh\ng trOng thái xét ñ.n trưec ñó n.u gfp m4t trOng thái không thT ñi ti.p Chi u ph'm vi c)a s ñánh giá (S): s= các trOng thái xét ñ.n trong m•i quy.t ñinh
Hình : Tương quan gi\a các chi.n lưUc leo ñèo, quay lui và t=t nh t
Theo hưeng R, chúng ta th y leo ñèo njm m m4t thái cqc (nó không cho phép quay lOi nh\ng trOng thái chưa ñưUc xét ñ.n), trong khi ñó tìm ki.m quay lui và BFS m m4t thái cqc khác (cho phép quay lOi t t cD các hưeng ñi chưa xét ñ.n) Theo hưeng S chúng ta th y leo ñèo và lkn ngưUc njm m m4t thái cqc (chw tCp trung vào m4t phOm
vi hœp trên tCp các trOng thái mei tOo ra th trOng thái hign tOi) và BFS njm m m4t thái cqc khác (trong khi BF xem xét toàn b4 tCp các con ñưZng ñã có, bao g9m cD nh\ng con ñưZng mei ñưUc tOo ra cũng như t t cD nh\ng con ñưZng không ñưUc xét tei trưec ñây trưec m•i m4t quy.t ñinh)
Nh\ng thái cqc này ñưUc trqc quan hóa bjng hình m trên Vùng in ñCm biTu dirn m4t mft phsng liên tMc các chi.n lưUc tìm ki.m mà nó k.t hUp m4t s= ñfc ñiTm c$a m4t trong ba thái cqc (leo ñèo, chi0u sâu, BFS) ñT có ñưUc m4t hòa hUp các ñfc tính tính toán c$a chúng
N.u chúng ta không ñ$ b4 nhe ckn thi.t ñT áp dMng thuCt toán BFS thukn túy Ta có thT k.t hUp BFS vei tìm theo chi0u sâu ñT giDm bet yêu cku b4 nhe Dĩ nhiên, cái giá
mà ta phDi trD là s= lưUng các trOng thái có thT xét ñ.n tOi m4t bưec sƒ nht ñi M4t loOi k.t hUp như th ñưUc chw ra trong hình dưei Trong hình này, thuCt giDi BFS ñưUc
áp dMng tOi ñwnh c$a ñ9 thi tìm ki.m (biTu dirn bjng vùng tô tCm) và tìm ki.m theo chi0u sâu ñưUc áp dMng tOi ñáy (biTu dirn bmi tam giác tô nhOt) Đku tiên ta áp dMng
lúc nào ñó, s= lưUng trOng thái ñưUc lưu tr\ chi.m dMng m4t không gian b4 nhe vưUt quá m4t mWc cho phép nào ñó Đ.n lúc này, ta sƒ áp dMng tìm ki.m chi0u sâu xu t phát th trOng thái t=t nh t Tmax trong OPEN cho tei khi toàn b4 không gian con phía
"dưei" trOng thái ñó ñưUc duygt h.t N.u không tìm th y k.t quD, trOng thái Tmax này ñưUc ghi nhCn là không dan ñ.n k.t quD và ta lOi chNn ra trOng thái t=t thW hai trong OPEN và lOi áp dMng tìm ki.m chi0u sâu cho cho phkn không gian phía "dưei" trOng thái này