Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

M C L C Ụ Ụ

L I NÓI Đ U

M c dù trong các th k 18, 19 và đ u th k 20, s hình th c hóa trong khoa h c và ế ỉ ế ỉ ự ứ ầ ặ ọ

tính toán đã t o đi u ki n tiên quy t v m t trí tu cho vi c nghiên c u ế ề ặ ứ Trí tu nhân ệ ề ệ ệ ệ ạ

t oạ , nh ng ph i cho đ n th k 20 cùng v i s ra đ i c a máy tính s thì ờ ủ ớ ự ế ỉ ư ế ả ố Trí tu nhân ệ

ế t oạ m i tr thành m t ngành khoa h c có s c s ng. M t thành ph n không th thi u ớ ở ứ ố ể ầ ộ ọ ộ

đ c c a ượ ủ Trí tu nhân t o ạ là vi c dùng các máy tính s nh m t ph ư ộ ệ ệ ố ươ ọ ng ti n ch n ệ

ấ l a đ t o ra và th nghi m các lý thuy t v trí tu . Hai m i quan tâm n n t ng nh t ế ề ự ể ạ ề ả ử ệ ệ ố

c a các nhà nghiên c u ủ ứ Trí tu nhân t o ệ ạ là bi u di n tri th c và tìm ki m. S quan ứ ự ể ễ ế

tâm th nh t chú ý đ n v n đ n m b t theo m t ngôn ng tri th c đ y đ mà hành vi ứ ầ ủ ứ ấ ề ắ ữ ế ắ ấ ộ

thông minh đòi h i. Trong khi đó, tìm ki m là kĩ thu t gi i quy t v n đ theo cách ế ậ ỏ ả ế ấ ề

kh o sát có h th ng m t không gian tr ng thái bài toán, t c là các giai đo n tu n t ệ ố ầ ự và ứ ạ ạ ả ộ

có ch n l a trong quá trình gi ọ ự ả i quy t v n đ . ề ế ấ

Trong các chi n l ế ượ c tìm ki m, ng ế ườ i ta bi u di n quá trình gi ễ ể ả i quy t v n đ ế ấ ề

nh m t quá trình tìm ki m đ ng đi trên m t đ th không gian tr ng thái mà trong đó: ư ộ ế ườ ộ ồ ị ạ

m i tr ng thái bài toán đ c xem nh m t nút c a đ th hay còn g i là m t tr ng thái ỗ ạ ượ ủ ồ ị ộ ạ ư ộ ọ

và các đ ng chuy n tr ng thái khi áp d ng các phép toán h p l ườ ợ ệ ụ ể ạ vào m t tr ng thái ộ ạ

nào đó s chuy n bài toán t tr ng thái này sang tr ng thái khác đ ẽ ể ừ ạ ạ ượ ọ ế c g i là các liên k t

c a đ th . Đây không ph i ch là m t trong nh ng kĩ thu t hi u qu mà tính quy t c và ủ ồ ị ữ ệ ậ ả ắ ả ộ ỉ

chính xác c a nó làm cho vi c cài đ t trên máy tính mang tính tr c ti p. ặ ự ế ủ ệ

Trong bài t p l n này, em tìm hi u v và s d ng ngôn ậ ớ ề Thu t toán tìm ki m A* ế ậ ể ử ụ

ng l p trình Visual Basic đ xây d ng ch ng trình minh h a cho thu t toán. D a trên ữ ậ ự ể ươ ự ậ ọ

Sinh viên th c hi n: Ngô Hoàng Liêm

1

L p ĐHCQ K6B

s ch b o t n tình c a các th y cô giáo và s giúp đ c a các b n cùng l p, d a trên ự ỉ ả ậ ỡ ủ ự ủ ự ạ ầ ớ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

nh ng ki n th c đã h c, em đã hoàn thành đ tài này tuy nhiên v n còn nhi u sai sót, ữ ứ ế ề ề ẫ ọ

r t mong có s đóng góp ý ki n c a các th y cô và các b n đ đ tài c a em đ ấ ể ề ự ủ ủ ế ầ ạ ượ c

hoàn thi n h n. ệ ơ

Em xin chân thành c m n! ả ơ

Ph n I: LÝ THUY T C S

Ế Ơ Ở

I – TRÍ TU NHÂN T O LÀ GÌ Ạ Ệ

Thu t ng ữ trí tu nhân t o ạ đ ệ ậ ượ c John McCarthy đ a ra trong h i th o ư ả ở ộ

Dartmouth vào mùa hè năm 1956. Đây đ c xem là th i đi m ra đ i th t s c a lĩnh ượ ậ ự ủ ể ờ ờ

v c nghiên c u ự ứ trí tu nhân t o ệ ạ (TTNT).

Trong các sách vi t v TTNT các năm g n đây, các tác gi đã đ a ra nhi u đ nh ế ề ầ ả ư ề ị

nghĩa v TTNT, nh ng nhìn chung, ta có th hi u: “TTNT là s thi ể ể ư ự ề ế ế ứ t k và nghiên c u

các ch ng trình này đ c xây ươ ng trình máy tính ng x m t cách thông minh. Các ch ử ộ ứ ươ ượ

ng i và đ ng v t chúng ta xem là d ng đ th c hi n các hành vi mà khi th c hi n ự ể ự ệ ở ự ệ ườ ậ ộ

thông minh” (“Dean, Allen and Aloimonos, 1995).

Hi n nay nhi u nhà nghiên c u quan ni m r ng, TTNT là lĩnh v c nghiên c u s ệ ứ ự ứ ự ệ ề ằ

thi t k các tác nhân thông minh (intelligent agent). Tác nhân thông minh là b t c cái gì ế ế ấ ứ

i trong môi tr t n t ồ ạ ườ ọ ủ ng và hành đ ng m t cách thông minh. M c tiêu khoa h c c a ụ ộ ộ

TTNT là hi u đ c b n ch t các hành vi thông minh. M c tiêu th c ti n, công ngh ể ượ ụ ự ễ ả ấ ệ

c a TTNT là xây d ng nên các h thông minh, các máy thông minh. ệ ủ ự

M t s ngành khoa h c khác cũng nghiên c u các năng l c đ c xem là thông minh ộ ố ự ượ ứ ọ

t h c, Tâm lý h c… Nh ng khác v i các ngành khoa h c trên, c a con ng ủ ườ i nh : Tri ư ế ọ ư ọ ọ ớ

TTNT là m t ngành c a khoa h c máy tính – nghiên c u x lý thông tin b ng máy tính. ứ ử ủ ằ ộ ọ

Do đó, TTNT đ t ra m c tiêu nghiên c u: làm th nào đ hi u đ c các hành vi thông ể ể ụ ứ ế ặ ượ

Sinh viên th c hi n: Ngô Hoàng Liêm

2

L p ĐHCQ K6B

minh b ng thu t toán, r i nghiên c u các ph ng pháp cài đ t các ch ng trình có th ứ ằ ậ ồ ươ ặ ươ ể

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

th c hi n đ c các hành vi thông minh. Nh v y chúng ta c n xây d ng các mô hình ự ệ ượ ư ậ ự ầ

tính toán (computational models) ph c v cho vi c gi i thích, mô t các hành vi thông ụ ụ ệ ả ả

minh b ng thu t toán, ti p theo ta c n ch ra tính hi u qu , tính kh thi c a thu t toán ủ ế ệ ầ ả ả ậ ằ ậ ỉ

th c hi n m t nhi m v và t đó đ a ra các ph ng pháp cài đ t. ự ụ ệ ệ ộ ừ ư ươ ặ

II – GI I QUY T V N Đ B NG TÌM KI M Ả Ế Ấ Ề Ằ Ế

V n đ tìm ki m, m t cách t ng quát, có th hi u là tìm m t đ i t ộ ố ượ ể ể ề ế ấ ộ ổ ng th a mãn ỏ

m t s đòi h i nào đó, trong m t t p h p r ng l n các đ i t ợ ộ ộ ố ộ ậ ố ượ ỏ ớ ự ng. Trong các lĩnh v c

ng xuyên ph i đ i đ u v i v n đ tìm nghiên c u c a trí tu nhân t o, chúng ta th ệ ứ ủ ạ ườ ả ố ầ ớ ấ ề

ki m. Đ c bi t trong l p k ho ch và h c máy, tìm ki m đóng vai trò r t quan tr ng. ế ặ ệ ậ ế ạ ế ấ ọ ọ

Trong khuôn kh ch ng trình gi ng d y c a nhà tr ng, chúng ta s đ c tìm ổ ươ ủ ả ạ ườ ẽ ượ

hi u các k thu t sau: ỹ ể ậ

 Các k thu t tìm ki m mù. ậ ế ỹ

 Các k thu t tìm ki m kinh nghi m (tìm ki m heuristic). ế ệ ế ậ ỹ

i u.  Các k thu t tìm ki m t ậ ế ỹ ố ư

 Các ph ươ ng pháp tìm ki m có đ i th . ủ ế ố

III – CÁC CHI N L C TÌM KI M T I U Ế ƯỢ Ế Ố Ư

V n đ tìm ki m t ề ế ấ ố ư ộ ố i u, m t cách t ng quát, có th phát bi u nh sau: m t đ i ư ể ể ộ ổ

ng x trong không gian tìm ki m đ c gán v i m t s đo giá tr c a đ i t ng đó t ượ ế ượ ị ủ ố ượ ộ ố ớ

f(x), m c tiêu c a ta là tìm đ ng có giá tr ủ ụ c đ i t ượ ố ượ ị f(x) l n nh t (ho c nh nh t) trong ặ ấ ấ ớ ỏ

không gian tìm ki m. Hàm f(x) đ c g i là hàm m c tiêu. ế ượ ọ ụ

Các chi n l c tìm ki m bao g m: ế ượ ế ồ

 Các k thu t tìm đ ng đi ng n nh t trong không gian tr ng thái: Thu t toán ậ ỹ ườ ắ ấ ạ ậ

Sinh viên th c hi n: Ngô Hoàng Liêm

3

L p ĐHCQ K6B

A*, thu t toán nhánh – và – c n. ậ ậ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

ng t  Các k thu t tìm ki m đ i t ậ ố ượ ế ỹ ố ế t nh t: Tìm ki m leo đ i, tìm ki m ế ấ ồ

Gradient, tìm ki m mô ph ng luy n kim. ế ệ ỏ

 Tìm ki m b t ch ế ắ ướ ự ế c s ti n hóa: Thu t toán di truy n. ậ ề

3.1 – M t s quy

c trong bài toán tìm đ

ng đi

ộ ố

ướ

ườ

 Giá tr c a cung (a,b) là đ dài đ ng n i t ị ủ ộ ườ ố ừ a đ n b. ế

ng đi t tr ng thái đ u đ n tr ng thái k t thúc là t ng đ dài các  Đ dài đ ộ ườ ừ ạ ế ế ầ ạ ổ ộ

cung trên đ ng đi. ườ

 Không gian tìm ki m: T t c các đ ng đi t tr ng thái đ u đ n tr ng thái ấ ả ế ườ ừ ạ ế ầ ạ

đích.

3.2 – Xây d ng hàm đánh giá

Gi s i (đi t tr ng thái đ u đ n ả ử u là m t tr ng thái t ộ ạ ớ ừ ạ ế u), xây d ng các hàm: ự ầ

 g(u): đánh giá đ dài đ ng đi t tr ng thái đ u đ n u. ộ ườ ừ ạ ế ầ

 h(u): đánh giá đ dài đ ng đi t u đ n tr ng thái đích. ộ ườ ừ ế ạ

 f(u) = g(u) + h(u): đánh giá đ dài đ ng đi t tr ng thái đ u đ n tr ng thái ộ ườ ừ ạ ế ầ ạ

đích mà đi qua u.

IV – THU T TOÁN A* Ậ

Thu t toán A* là thu t toán s d ng k thu t tìm ki m t t nh t đ u tiên v i hàm ử ụ ế ậ ậ ậ ỹ ố ấ ầ ớ

đánh giá f(u). T c là: trong các tr ng thái ch phát tri n, ch n tr ng thái có giá tr hàm ứ ể ạ ạ ờ ọ ị

đánh giá nh nh t (ho c l n nh t) đ phát tri n ti p. Đ nh đ ặ ớ ể ể ế ấ ấ ỏ ỉ ượ c phát tri n có th ể ể ở

m c hi n t i ho c các m c trên. ệ ạ ứ ứ ặ

4.1 – Thu t toán

1. Kh i t o danh sách L ch ch a tr ng thái ban đ u; ỉ ứ ở ạ ạ ầ

Sinh viên th c hi n: Ngô Hoàng Liêm

4

L p ĐHCQ K6B

2. Loop do

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

2.1. If L r ng then ỗ

{ thông báo th t b i; ấ ạ stop;}

đ u danh sách L; 2.2. Lo i tr ng thái u ạ ạ ở ầ

then 2.3. if u là tr ng thái đích ạ

{ thông báo thành công; stop;}

2.4. for m i tr ng thái v k u do ỗ ạ ề

{ g(v) ← g(u) + k(u,v);

f(v) ← g(v) + h(v);

Đ t v vào danh sách L; } ặ

2.5. S p x p L theo th t tăng d n c a hàm f sao cho tr ng thái có ắ ế ứ ự ầ ủ ạ

giá tr c a hàm f nh nh t đ u danh sách; ị ủ ấ ở ầ ỏ

End loop;

4.2 – M t s nh n xét v thu t toán A*

ộ ố

Chúng ta đ a ra m t s nh n xét v thu t toán A* nh sau: ộ ố ậ ư ư ề ậ

Ng i ta ch ng minh đ c r ng, n u hàm đánh giá h(u) là đánh giá th p (tr ườ ứ ượ ằ ế ấ ườ ng

t, u) thì thu t toán A* là thu t toán h p đ c bi ặ ợ ệ h(u) = 0 v i m i tr ng thái ọ ạ ớ ậ ậ i uố ư , t cứ t

là nghi m mà nó tìm ra là ngi m t i u. Ngoài ra, n u đ dài c a các cung không nh ệ ệ ố ư ủ ế ộ ỏ

ng δ nào đó thì thu t toán A* là thu t toán h n m t s d ơ ộ ố ươ ậ ậ đ y đầ ủ theo nghĩa r ng, nó ằ

luôn d ng và tìm ra cây nghi m. ừ ệ

Trong tr ng h p hàm đánh giá h(u) = 0 v i m i ườ ợ ậ ọ u, thu t toán A* chính là thu t ậ ớ

toán tìm ki m t g(u). ế ố t nh t đ u tiên v i hàm đánh giá ớ ấ ầ

Thu t toán A* đã đ r ng là thu t toán hi u qu nh t trong s các ậ ượ c ch ng t ứ ỏ ằ ệ ậ ả ấ ố

Sinh viên th c hi n: Ngô Hoàng Liêm

5

L p ĐHCQ K6B

thu t toán đ y đ và t i u cho v n đ tìm ki m đ ầ ủ ậ ố ư ề ế ấ ườ ng đi ng n nh t. ắ ấ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

4.3 – Ví d minh h a ụ

Đ th y đ c thu t toán A* làm vi c ra sao, ta xét đ th không gian tr ng thái nh ể ấ ượ ồ ị ệ ạ ậ ư

hình v . Trong đó tr ng thái ban đ u là tr ng thái A, tr ng thái đích là B, các s ghi ẽ ạ ầ ạ ạ ố

c nh các cung là đ dài cung đó, các s c nh các đ nh là giá tr c a hàm ạ ố ạ ị ủ ộ ỉ h. Đ u tiên, ầ

A sinh ra các đ nh con C, D, E và F. Tính giá tr hàm f t i các đ nh này ta phát tri n đ nh ể ỉ ỉ ị ạ ỉ

có:

g(C) = 9 f(C) = 9 + 15 = 24

g(D) = 7 f(D) = 7 + 6 = 13

g(E) = 13 f(E) = 13 + 8 = 21

g(F) = 20 f(F) = 20 + 7 = 27

Nh v y đ nh t ư ậ ỉ ố t nh t là ấ D (vì f(D) = 13 là nh nh t). phát tri n đ nh ỏ ỉ D, ta nh nậ ể ấ

đ ượ c các đ nh con ỉ H và E. ta đánh giá H và E (m i).ớ

g(H) = g(D) + đ dài cung (D, H) = 7 + 8 = 15 ộ

f(H) = 15 + 10 = 25

Sinh viên th c hi n: Ngô Hoàng Liêm

6

L p ĐHCQ K6B

Đ ng đi t i ườ ớ E qua D có đ dài: ộ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

g(E) = g(D) + đ dài cung (D,E) = 7 + 4 = 11 ộ

f(E) = g(E) + h(E) = 11 + 8 = 19

E v i đánh giá f(E) = 19 là đ nh t Trong s các đ nh ch phát tri n thì đ nh ờ ể ố ỉ ỉ ớ ỉ ố ấ t nh t.

Phát tri n đ nh này, ta nh n đ c các đ nh con c a nó là K và I. Chúng ta ti p t c quá ể ậ ỉ ượ ủ ỉ ế ụ

trình trên cho t ng đi ớ i khi đ nh đ ỉ ượ c ch n đ phát tri n là đ nh k t thúc ể ể ế ọ ỉ B, đ dài đ ộ ườ

ng n nh t t i ả ấ ớ B là g(B) = 19. Đ theo dõi quá trình làm vi c c a thu t toán, ta l p b ng ệ ủ ể ậ ậ ắ

phân tích g m 4 c t: ồ ộ

 L n l p: s l n l p c a thu t toán ố ầ ặ ủ ầ ặ ậ

 u: đ nh phát tri n u ể ỉ

 v: các đ nh con c a u ỉ ủ

 L: Danh sách L

V i quy c: đ nh . Ta có b ng phân tích nh sau ớ ướ ư ả ỉ

Sinh viên th c hi n: Ngô Hoàng Liêm

7

L p ĐHCQ K6B

Đ ng đi ng n nh t: A → D → E → I → B ườ ắ ấ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

Quá trình tìm ki m trên đ c mô t b i cây tìm ki m sau. ế ượ ả ở ế

Ph n II: XÂY D NG CH

NG TRÌNH MINH H A

ƯƠ

I – GI I THI U S L C V NGÔN NG L P TRÌNH VISUAL BASIC VÀ Ớ Ơ ƯỢ Ệ Ữ Ậ Ề

CÔNG C L P TRÌNH MICROSOFT VISUAL BASIC Ụ Ậ

Visual Basic (vi t t t h ng s ki n ế ắ VB) là m t ộ ngôn ng l p trình ữ ậ ướ ự ệ (event-driven)

và môi tr c phát tri n đ u tiên b i ườ ng phát tri n tích h p ể ợ (IDE) k t bó đ ế ượ ở Alan ể ầ

Cooper d i tên D án Ruby ( Project Ruby), và sau đó đ ướ ự ả ế c ượ Microsoft mua và c i ti n

nhi u. Visual Basic đã đ c thay th b ng ề ượ ế ằ Visual Basic.NET. Phiên b n cũ c a Visual ủ ả

Basic b t ngu n ph n l n t ồ ầ ớ ừ BASIC và đ l p trình viên phát tri n các ể ậ ể ắ giao di n ng ệ ườ i

dùng đ h a (Rapid Application ồ ọ (GUI) theo mô hình phát tri n ng d ng nhanh ể ứ ụ

Development, RAD); truy c p các ậ ơ ở ữ ệ dùng DAO (Data Access Objects), RDO c s d li u

ố (Remote Data Objects), hay ADO (ActiveX Data Objects); và l p các đi u khi n và đ i ề ể ậ

Sinh viên th c hi n: Ngô Hoàng Liêm

8

L p ĐHCQ K6B

ng ượ ActiveX. t

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

M t l p trình viên có th phát tri n ng d ng ộ ậ ể ể ứ ụ dùng các thành ph nầ (component) có

s n trong Visual Basic. Các ch ẵ ươ ể ử ụ ng trình b ng Visual Basic cũng có th s d ng ằ

Windows API, nh ng làm v y thì ph i s d ng các khai báo hàm bên ngoài. ả ử ụ ư ậ

ng m i Trong lĩnh v c ự l p trình th ậ ươ ạ , Visual Basic có m t trong nh ng nhóm khách ữ ộ

hàng l n nh t. Theo m t s ngu n, vào năm 2003, 52% c a nh ng l p trình viên s ộ ố ủ ữ ậ ấ ớ ồ ử

d ng Visual Basic, làm nó thành ngôn ng l p trình ph bi n nh t vào lúc đó. Tuy ụ ổ ế ữ ậ ấ

nhiên, cu c nghiên c u c a Evans Data cho r ng 43% c a các l p trình viên đó có ý ứ ủ ủ ằ ậ ộ

đ nh đ i qua m t ngôn ng khác. Dù v y, trong th c hành thí nghi m thì VB v n đ ị ữ ự ệ ậ ẫ ộ ổ ượ c

dùng khá ph bi n vì s g n gũi và d h c d làm c a nó. Hi n nay xu h ổ ế ự ầ ễ ọ ủ ệ ễ ướ ậ ng l p

trình đang chuy n d n sang .NET vì nh ng u đi m và l i th tuy t v i c a nó. ữ ư ể ầ ể ợ ệ ờ ủ ế

Microsoft Visual Basic. NET hay còn g i là VB.NET đ c Microsoft phát tri n t ọ ượ ể ừ

cu i ố th p niên 1990 ậ và ra phiên b n đ u vào năm ả ầ 2002 (cùng v i ớ Visual C# và

ASP.NET). Phiên b n m i nh t hi n nay là Visual Basic. NET 2010. ệ ấ ả ớ

II – T NG QUAN V CH NG TRÌNH Ổ Ề ƯƠ

ng trình

2.1 – C u trúc ch ấ

ươ

Ch ng trình g m có các thành ph n nh sau: ươ ư ầ ồ

 Form chính: mainForm.vb

 Form tác gi : author.vb ả

 Form h ng d n s d ng: tutorial.vb ướ ẫ ử ụ

 Form hi n th b ng k t qu : process.vb ị ả ể ế ả

 Module ch a các hàm và th t c h tr : functions.vb ủ ụ ỗ ợ ứ

 Module ch a các hàm và th t c v : draw.vb ủ ụ ẽ ứ

Sinh viên th c hi n: Ngô Hoàng Liêm

9

L p ĐHCQ K6B

 Module ch a các hàm và th t c l u, m đ th : saveload.vb ủ ụ ư ở ồ ị ứ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

 Khai báo các l p s d ng trong ch ng trình: classes.vb ớ ử ụ ươ

Form giao di n chính c a ch ệ ủ ươ ủ ng trình (mainForm.vb) bao g m các control c a ồ

Visual Basic, các s ki n c a control đ c l p trình bên trong code c a mainForm.vb. ự ệ ủ ượ ậ ủ

Thu t toán A* và các thao tác nh p, xu t đ c th hi n form này. Các b n có th m ấ ượ ậ ậ ể ệ ở ể ở ạ

project đi kèm v i t p báo cáo này đ bi t thêm chi ti t. ớ ậ ể ế ế

Form h ng d n s d ng (tutorial.vb) hi n th nh ng h ng d n c b n và m t s ướ ẫ ử ụ ị ữ ể ướ ẫ ơ ả ộ ố

chú ý khi s d ng ch ng trình. ử ụ ươ

Form tác gi (author.vb) bao g m các thông tin v ch ng trình và tác gi . Code ả ề ồ ươ ả

ng trình r i đ a ra hi n th (code đ c vi t bên c a form này ch l y thông tin ch ủ ỉ ấ ươ ồ ư ể ị ượ ế

trong ph n onload c a form). ủ ầ

Form hi n th k t qu (process.vb) bao g m hai control, m t label ghi tiêu đ và ị ế ề ể ả ộ ồ

m t listView. Code c a form này ch l y k t qu tính toán đ vào listView và hi n th ra ỉ ấ ế ủ ể ả ộ ổ ị

màn hình (vi t trong ph n onload c a form). ế ủ ầ

ph n đ nh nghĩa các hàm, th t c trong module và Chúng ta s đi chi ti ẽ t h n ế ơ ở ủ ụ ầ ị

Sinh viên th c hi n: Ngô Hoàng Liêm

10

L p ĐHCQ K6B

ng trình ph n sau. đ nh nghĩa các class s d ng trong ch ị ử ụ ươ ở ầ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

2.2 – Ho t đ ng

ạ ộ

ấ ế Các th t c và s ki n trong form chính s ch a các dòng l nh nh p và xu t k t ẽ ứ ự ệ ủ ụ ệ ậ

qu . Quá trình nh p và xu t đ c th c hi n thông qua các ph ng th c có s n c a VB ấ ượ ả ậ ự ệ ươ ẵ ủ ứ

và các hàm, th t c đ c đ nh nghĩa trong các module. Đ ph c v cho thu t toán A* - ủ ụ ượ ị ể ụ ụ ậ

thu t toán chính c a ch ng trình - thì các thành ph n h tr cho nó cũng đ ủ ậ ươ ỗ ợ ầ ượ c đ nh ị

nghĩa đ y đ trong các module. ầ ủ

2.3 – Các l p đ

c s d ng

ượ ử ụ

Đ làm vi c có hi u qu h n và t n d ng các u đi m c a l p trình h ậ ủ ậ ả ơ ư ụ ệ ệ ể ể ướ ố ng đ i

ng, ch ng trình đã s d ng ph ng pháp l p trình này. M t l p các đ nh đ t ượ ươ ử ụ ươ ộ ớ ậ ỉ ượ c

khai báo trong file classes.vb. Th c ch t đây là file đ c thêm vào t menu add new ự ấ ượ ừ

item, class.

Các b n m file này ra s th y các đ nh nghĩa cho các l p. Có 3 l p đ ẽ ấ ớ ượ ử ụ c s d ng ạ ở ớ ị

trong ch ng trình là lopDinh, Child và listItem trong đó: ươ

 lopDinh là l p chính bao g m các thu c tính c n thi ầ ớ ồ ộ ế ủ t c a m t đ nh trong ộ ỉ

ả thu t toán A* (t a đ , tên đ nh, giá tr hàm đánh giá, các đ nh con và kho ng ị ọ ộ ậ ỉ ỉ

cách t ng ng, các đ nh cha, giá tr hàm f và g) ươ ứ ỉ ị

 Child là l p các con c a m t đ nh, nó g m các thu c tính nh cname (tên ộ ỉ ủ ư ớ ộ ồ

con) và cdistance(kho ng cách t cha c a nó đ n nó) ả ừ ủ ế

 listItem là l p đ ớ ượ ử ụ ế c s d ng đ l u k t qu tính toán và đ a ra b ng k t ể ư ư ế ả ả

qu . L p này g m 4 thu c tính t ồ ả ớ ộ ươ ệ ng ng v i b ng s d ng đ th c hi n ử ụ ể ự ớ ả ứ

thu t toán A* (các thu c tính g m s l n l p, đ nh u, t p các đ nh con v, và ố ầ ặ ậ ậ ộ ồ ỉ ỉ

danh sách L).

Sinh viên th c hi n: Ngô Hoàng Liêm

11

L p ĐHCQ K6B

Chi ti c chi ti t hóa ph n sau. t v l p s đ ế ề ớ ẽ ượ ế ở ầ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

2.4 – M t s giao di n ch

ng trình

ộ ố

ươ

Sinh viên th c hi n: Ngô Hoàng Liêm

12

L p ĐHCQ K6B

Giao di n chính c a ch ng trình ủ ệ ươ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

i trong ch ng trình X lý l ử ỗ ươ

Sinh viên th c hi n: Ngô Hoàng Liêm

13

L p ĐHCQ K6B

Sau khi tìm ki m thành công ế

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

K t qu tìm ki m ế ế ả

III – C U TRÚC CHI TI T Ấ Ế

3.1 – Đ nh nghĩa các l p

c s d ng trong ch ng trình đ Các l p đ ớ ượ ử ụ ươ ượ c đ nh nghĩa đ y đ trong file ầ ủ ị

classes.vb

3.1.1 – L p các đ nh – l p chính c a ch

ươ

ng trình – l p lopDinh ớ

L p đ nh cũng nh các l p khác trong ch ư ớ ớ ỉ ươ ng trình, không đ nh nghĩa thu c tính ị ộ

tr c ti p (đ nh nghĩa gi ng cú pháp as ) mà ể ữ ệ ự ế ạ ố ộ ị

đ nh nghĩa các bi n riêng đ l u giá tr và đ nh nghĩa các thu c tính đ thông qua các ị ể ư ế ể ộ ị ị

thu c tính đó, l u các giá tr c n thi t vào các bi n riêng. Theo các tài li u l p trình ị ầ ư ộ ế ệ ậ ế

ng đ i t ng thì ph ng pháp này đ h ướ ố ượ ươ ượ ề ư c khuy n khích s d ng vì có nhi u u ử ụ ế

đi m h n và h n ch đ c các nh c đi m c a khai báo thu c tính tr c ti p. ế ượ ể ạ ơ ượ ự ế ủ ể ộ

Các thu c tính c a lopDinh bao g m: ủ ộ ồ

 x: t a đ x c a đ nh, ki u s nguyên (Short) ọ ộ ể ố ủ ỉ

 y: t a đ y c a đ nh, ki u s nguyên (Short) ọ ộ ể ố ủ ỉ

Sinh viên th c hi n: Ngô Hoàng Liêm

14

L p ĐHCQ K6B

 name: tên đ nh, ki u Char ỉ ể

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

 value: giá tr hàm đánh giá h, ki u s nguyên (Short) ể ố ị

 fval: giá tr hàm f, ki u s nguyên (Short) ể ố ị

 gval: giá tr hàm g, ki u s nguyên (Short) ể ố ị

 childs: các đ nh con, thu c tính này là t p h p các đ i t ố ượ ậ ộ ợ ỉ ng thu c l p Child ộ ớ

c nói đ n ngay sau ph n này. s đ ẽ ượ ế ầ

 parents: có ki u là string, l u tên các đ nh cha ư ể ỉ

Riêng 2 thu c tính childs và parents đ c đ nh nghĩa tr c ti p. ộ ượ ị ự ế

ế

ế

Property ([tham bi n n u có]) As

M i thu c tính đ ộ ỗ ượ ị c đ nh nghĩa b ng phát bi u: ằ ể

Ki u có th là ki u d li u nguyên th y ho c các l p đ i t ng… ể ữ ệ ố ượ ủ ể ể ặ ớ

Vi c đ nh nghĩa thu c tính nh trên gi ng cho t t c các l p đ c s d ng trong ư ệ ộ ố ị ấ ả ớ ượ ử ụ

ch ng trình. ươ

Hai th t c New và New(danh sách tham bi n) dùng đ kh i t o giá tr m c đ nh ở ạ ị ặ ủ ụ ể ế ị

cho các thu c tính c a l p. Chi ti ủ ớ ộ ế ề ị t v đ nh nghĩa l p, các b n có th tìm hi u trên th ạ ể ể ớ ư

Sinh viên th c hi n: Ngô Hoàng Liêm

15

L p ĐHCQ K6B

vi n c a Microsoft ( http://msdn.microsoft.com). ệ ủ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

Các l p nói chung, đa s đ u đ c đ nh nghĩa tuân theo t ng l p trình h ố ề ớ ượ ị t ư ưở ậ ướ ng

ng. Nh ng do tính ph c t p c a ch đ i t ố ượ ứ ạ ư ủ ươ ng trình ch a ph i là cao, nên m t s ả ộ ố ư

thu c tính v n đ ẫ ượ ị c đ nh nghĩa m t cách tr c ti p. ộ ự ế ộ

3.1.2 – L p các con - l p Child

L p này g m có các thu c tính sau: ộ ồ ớ

 cname: ki u Char, l u tên c a đ nh con ủ ỉ ư ể

cha nó đ n nó  cdistance: ki u Short, l u giá tr là kho ng cách t ư ể ả ị ừ ế

ả M t đ nh thu c lopDinh s có m t thu c tính childs l u t p h p các con và kho ng ư ậ ộ ỉ ẽ ộ ợ ộ ộ

cách t ươ ứ ớ ng ng. V i m t dinh thu c lopDinh thì các con c a nó s là dinh.childs(i), v i ủ ẽ ộ ớ ộ

i là ch s t ng thu c l p Child). ỉ ố ươ ứ ng ng (vì childs là m t danh sách các đ i t ộ ố ượ ộ ớ

3.1.3 – l p listItem ớ

L p này g m các thu c tính t ng ng v i b ng quá trình tính toán: ồ ộ ớ ươ ứ ớ ả

 lanlap: ki u Short, l u s l n l p c a thu t toán ư ố ầ ặ ủ ể ậ

ng ng  u: ki u String, l u tên đ nh u và các giá tr hàm f, g t ỉ ư ể ị ươ ứ

 v: ki u String, l u tên các đ nh v và các giá tr hàm f, g t ng ng ư ể ị ỉ ươ ứ

 L: ki u String, l u danh sách L g m tên các đ nh và các giá tr hàm f, g t ồ ư ể ị ỉ ươ ng

Sinh viên th c hi n: Ngô Hoàng Liêm

16

L p ĐHCQ K6B

ngứ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

L p này đ c s d ng đ l u các k t qu tính toán và đ a ra b ng tính toán (form ớ ượ ử ụ ể ư ư ế ả ả

process.vb). Các giá tr hàm f, g s đ c chuy n sang xâu ký t c khi thêm vào ẽ ượ ị ể tr ự ướ

thu c tính u, v và L c a đ i t ủ ố ượ ộ ng thu c l p này. ộ ớ

3.2 – Các th t c v

ủ ụ ẽ

Các th t c v đ c đ nh nghĩa trong Module functions.vb. ủ ụ ẽ ượ ị

3.2.1 – V m t đ nh c a đ th ồ ị

ẽ ộ ỉ

S d ng các th t c và hàm có s n đ v . T o m t đ i t ng đ h a trên panel ể ẽ ạ ộ ố ượ ử ụ ủ ụ ẵ ồ ọ

ủ ụ v (panel này có tên là pnlMain và thu c form chính mainForm). S d ng th t c ẽ ử ụ ộ

FillEllipse v i chi u r ng b ng chi u ngang đ v m t hình tròn không vi n và s ể ẽ ộ ề ộ ề ề ằ ớ ử

ng t , v m t elip khác bên trên elip d ng th t c DrawEllipse đ v vi n cho nó. T ụ ể ẽ ề ủ ụ ươ ự ẽ ộ

Sinh viên th c hi n: Ngô Hoàng Liêm

17

L p ĐHCQ K6B

cũ đ th hi n giá tr hàm đánh giá. ể ể ệ ị

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

Các l nh r nhánh If … Then đ c dùng đ căn ch nh v trí cho các ký t có đ ẽ ệ ượ ể ị ỉ ự ộ

t. Th t c drawString dùng đ v m t xâu ký t lên màn hình v trí đ r ng đ c bi ộ ặ ệ ể ẽ ộ ủ ụ ự ở ị ượ c

ch đ nh. Th t c này dùng đ v tên đ nh và giá tr hàm đánh giá. th t c v mũi tên ể ẽ ủ ụ ỉ ỉ ị ị Ở ủ ụ ẽ

c s d ng đ v giá tr kho ng cách gi a hai đ nh. n i hai đ nh c a đ th , nó cũng đ ố ủ ồ ị ỉ ượ ử ụ ể ẽ ữ ả ỉ ị

sFont, vFont là ki u font v i kích c và ki u (đ m, nghiêng, th ng, g ch chân…) ể ể ậ ớ ỡ ườ ạ

cho các xâu ký t ng ng (tên đ nh, giá tr hàm đánh giá), ta khai báo hai ki u Font t ự ươ ứ ể ị ỉ

này đ ph c v cho l nh drawString. ể ụ ụ ệ

Các tham bi n truy n vào th t c này g m có: ủ ụ ế ề ồ

Sinh viên th c hi n: Ngô Hoàng Liêm

18

L p ĐHCQ K6B

 dinh: đ i t ng thu c lopDinh ố ượ ộ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

 p: đ i t ố ượ ng thu c l p System.Drawing.pen dùng đ v vi n ể ẽ ề ộ ớ

 b: đ i t ng thu c l p System.Drawing.brush dùng đ tô màu ố ượ ộ ớ ể

3.2.2 – Th t c v mũi tên n i hai đ nh c a đ th ồ ị

ủ ụ ẽ

Trong th t c này, chúng ta s s d ng m t chút ki n th c v toán h c. Hình v ẽ ử ụ ứ ề ủ ụ ế ọ ộ ẽ

th hi n cách nghĩ và ph ể ệ ươ ng pháp th c hi n c a th t c này. ệ ủ ủ ụ ự

hình v , r là bán kính c a đ c các Ở ủ ườ ẽ ng tròn. T các t a đ c a 2 đ nh, ta tính đ ọ ộ ủ ừ ỉ ượ

dx = x2 – x1 và dy = d2 – d1, ta tính đ ượ ộ c đ dài đo n th ng n i 2 tâm c a nó, và nh ố ủ ạ ẳ ờ

đó tính đ c sinα và cosα. Theo ph ng trình đ ng tròn thì ta s tìm đ ượ ươ ườ ẽ ượ ể c giao đi m

ng tròn t ng ng. c a đo n th ng n i 2 tâm c a 2 đ nh v i đ ủ ớ ườ ủ ạ ẳ ố ỉ ươ ứ

x = x1 + r*sinα và y = y1 + r*cosα

Tùy vào h ng c a đo n th ng (v trí c a đ nh th 2 so v i đ nh th nh t) mà ta s ướ ứ ấ ủ ỉ ớ ỉ ủ ứ ẳ ạ ị ẽ

ng ng. Sau khi tính đ c 2 t a đ giao đi m, ta v m t đ c ng ho c tr ộ ặ t ừ ươ ứ ượ ẽ ộ ườ ng ể ọ ộ

th ng n i 2 t a đ này và v m t hình tam giác th hi n cho mũi tên ể ệ ẽ ộ ẳ ố ọ ộ ở ạ cu i đo n ố

th ng. Cách tính t a đ này còn đ ọ ộ ằ ượ c m r ng đ tìm các v trí thích h p đ v giá tr ị ể ẽ ở ộ ể ợ ị

kho ng cách t đ nh cha t i đ nh con. ả ừ ỉ ớ ỉ

Các l nh đ ệ ượ ử ụ c s d ng g m drawLine đ v đo n th ng, drawString đ v xâu ký ạ ể ẽ ể ẽ ẳ ồ

t ự . Bi n arrow dùng đ t o ra m t hình mũi tên ể ạ ế ộ ở ố cu i đo n th ng. ạ ẳ Ở ố ớ đây thì đ i v i

đ nh th 2, đi m cu i c a đo n th ng s cách giao đi m c a đo n th ng đó kéo dài và ỉ ố ủ ứ ủ ể ẽ ể ẳ ạ ẳ ạ

đ ườ ng tròn m t kho ng = 4. Ta s dùng kho ng tr ng này đ v ph n nh n c a mũi ả ọ ủ ể ẽ ẽ ầ ả ộ ố

tên.

Các tham bi n truy n vào c a th t c này g m có: ủ ụ ủ ế ề ồ

 Đ nh cha và đ nh con: đ i t ng thu c l p lopDinh. ố ượ ỉ ỉ ộ ớ

Sinh viên th c hi n: Ngô Hoàng Liêm

19

L p ĐHCQ K6B

ng ng: ki u s nguyên Short  Kho ng cách t ả ươ ứ ể ố

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

 db (dinh brush), dp (dinh pen): t ng ng thu c l p brush và l p pen. Tham ươ ộ ớ ứ ớ

bi n này dùng đ xác đ nh giá tr màu cho vi n và màu tô cho đ nh. ị ế ể ề ị ỉ

 lb (line brush), lp (line pen): t ng ng thu c l p brush và l p pen. Tham ươ ộ ớ ứ ớ

bi n này dùng đ xác đ nh giá tr màu cho đo n th ng và màu mũi tên. ế ể ạ ẳ ị ị

3.2.3 – Th t c v toàn b đ th ộ ồ ị

ủ ụ ẽ

ề Th t c này dùng đ v toàn b đ th v i màu ban đ u (ta coi màu tr ng, vi n ộ ồ ị ớ ể ẽ ủ ụ ầ ắ

xanh, đ ng n i màu xám là các màu ban đ u c a đ th ). ườ ầ ủ ồ ị ố

Cách nghĩ c a th t c này là: ủ ụ ủ

 Ki m tra xem đ th có r ng hay không. N u r ng thì l nh return đ ế ỗ ồ ị ể ệ ỗ ượ ự c th c

hi n.ệ

 N u đ th không r ng, duy t t ồ ị ệ ấ ả ớ t c các đ nh thu c danh sách đ nh, ng v i ứ ế ỗ ộ ỉ ỉ

m i đ nh, v mũi tên n i đ nh đó v i các con c a nó. V trí các đ nh con trong ỗ ỉ ố ỉ ủ ẽ ớ ị ỉ

Sinh viên th c hi n: Ngô Hoàng Liêm

20

L p ĐHCQ K6B

danh sách đ ượ c tìm qua th t c pSearch. ủ ụ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

3.2.4 – Các th t c khác

ủ ụ

Ngoài các th t c nêu trên thì trong module này còn hai th t c ủ ụ ủ ụ

 clearPanel: dùng đ xóa panel v (s d ng khi nh n nút [đ th m i] và khi ẽ ử ụ ồ ị ớ ể ấ

nh n nút [m đ th ], đi u ki n c a m đ th là ph i m thành công thì th ở ồ ị ở ồ ị ệ ủ ề ả ấ ở ủ

t c này m i th c hi n) ớ ụ ự ệ

 coloredDraw: dùng đ v m t đ th v i m t màu khác, ch c n truy n tham ể ẽ ộ ồ ị ớ ỉ ầ ề ộ

s màu cho th t c n i đ nh ố ố ỉ ủ ụ ở ụ ử ụ m c 3.2.2. Trong th t c này có s d ng ủ ụ

vòng l p đ l y giá tr kho ng cách t thu c tính childs. ể ấ ả ặ ị ừ ộ

3.3 – Các th t c và hàm h tr

ủ ụ

ỗ ợ

Các th t c và hàm h tr này đ c đ nh nghĩa trong Module functions.vb và đa s ỗ ợ ủ ụ ượ ị ố

Sinh viên th c hi n: Ngô Hoàng Liêm

21

L p ĐHCQ K6B

có ph m vi public đ có th s d ng m i n i trong ch ể ử ụ ể ạ ở ọ ơ ươ ồ ng trình. Nó cũng bao g m

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

các hàm và th t c có ph m vi private nh ng ch dùng đ ph c v cho các hàm và th ư ể ụ ụ ủ ụ ạ ỉ ủ

t c trong module. ụ

3.3.1 – Xóa đ nhỉ

T t ng c a thu t toán xóa đ nh r t đ n gi n. Đ u tiên tìm đ nh con c a nó và ư ưở ấ ơ ủ ủ ầ ả ậ ỉ ỉ

t ươ ứ ộ ng ng v i m i con, lo i b giá tr trùng v i giá tr tên c a đ nh c n xóa trong thu c ớ ạ ỏ ủ ỉ ầ ỗ ớ ị ị

tính đ nh cha (parents). T ng t ỉ ươ ự , tìm đ nh cha c a đ nh c n xóa và t ủ ỉ ầ ỉ ươ ứ ỗ ng ng v i m i ớ

cha, lo i b thành ph n trùng v i tên đ nh c n xóa trong thu c tính đ nh con (childs). ạ ỏ ầ ầ ớ ộ ỉ ỉ

c xóa, các Giá tr tr v c a hàm này là m t danh sách các đ nh v i đ nh đã đ ộ ị ả ề ủ ớ ỉ ỉ ượ

Sinh viên th c hi n: Ngô Hoàng Liêm

22

L p ĐHCQ K6B

thu c tính c a các đ nh liên quan đ n đ nh đó cũng b xóa. ủ ế ộ ỉ ị ỉ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

Tham bi n truy n vào c a hàm này là m t đ nh thu c l p lopDinh và m t danh sách ộ ỉ ộ ớ ủ ế ề ộ

các đ nh. ỉ

3.3.2 – Đ a d li u vào b ng k t qu

ư ữ ệ

ế

B ng k t qu n m trên Form process.vb và trong form này có m t control là ả ằ ế ả ộ

ListView1. Listview này có 4 sub item (ta coi nó là 4 c t). T ng ng chúng ta đã đ nh ộ ươ ứ ị

nghĩa m t l p listItem g m 4 thành ph n, và khai báo danh sách đ i t ộ ớ ố ượ ầ ồ ộ ớ ng thu c l p

đó. Do v y ng trong danh ậ ở đây ch vi c thêm các giá tr c a thu c tính c a m i đ i t ị ủ ỗ ố ượ ỉ ệ ủ ộ

sách vào trong ListView1. Công vi c c a th t c này có th đ ệ ủ ủ ụ ể ượ ố c hi u đ n gi n gi ng ể ả ơ

nh là thêm m t b n ghi vào m t b ng. ộ ả ộ ả ư

3.3.3 – Các th t c và hàm khác ủ ụ

Các th t c và hàm này cũng có t ng và thu t toán r t đ n gi n. ủ ụ t ư ưở ấ ơ ả ậ

 Hàm thêm m t đ nh m i: Ki m tra xem đ nh đó đã có trong danh sách ch a, ư ộ ỉ ể ớ ỉ

ng t v i các hàm thêm n u có thì tr v false, và ch a thì tr v true. T ế ả ề ả ề ư ươ ự ớ

đ nh cha, thêm đ nh con. Ch khác là 2 hàm này thêm giá tr vào thu c tính ỉ ộ ỉ ỉ ị

c a m t đ nh ch không ph i thêm đ nh. ủ ộ ỉ ứ ả ỉ

c: Hàm này s tr v giá tr là v trí c a đ nh  Hàm tìm đ nh có tên cho tr ỉ ướ ẽ ả ề ủ ỉ ị ị

Sinh viên th c hi n: Ngô Hoàng Liêm

23

L p ĐHCQ K6B

trong danh sách đ nh n u tìm đ c và tr v -1 n u không tìm đ c. T ế ỉ ượ ả ề ế ượ ư

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

ng ch là so sánh tên v i tên c a t t ưở ủ ấ ả t c các đ nh thu c danh sách đ nh, ộ ớ ỉ ỉ ỉ

n u tên trùng, có nghĩa là đã có đ nh đó. ế ỉ

 Hàm xóa m t ký t ộ ự trong xâu: Ki m tra v trí ký t ể ị ự ầ ầ c n xóa, l y các ph n ấ

còn l i c a xâu mà không bao g m ký t đó, gán tr l i cho xâu cũ. Giá tr ạ ủ ồ ự ở ạ ị

tr v là m t xâu đã xóa ký t c n xóa. Hàm này dùng đ xóa tên đ nh cha ả ề ộ ự ầ ể ỉ

trong thu c tính parents c a m t đ nh và nó ph c v cho hàm xóa đ nh. ụ ụ ộ ỉ ủ ộ ỉ

 Hàm s p x p danh sách L: S p x p danh sách L theo thu t toán s p x p n i ổ ế ế ế ắ ậ ắ ắ

b t.ọ

 Th t c xóa tr ng các textbox: dùng đ xóa textbox khi c n thi t. ủ ụ ể ầ ắ ế

3.4 – mainForm – Form chính c a ch

ng trình

ươ

3.4.1 – Các khai báo

Trong Form này, khai báo 3 danh sách bao g m:ồ

 dinh: danh sách các đ i t ố ượ ủ ng thu c l p lopDinh. Đây là danh sách chính c a ộ ớ

ch ng trình. ươ

 Dlist: danh sách các đ i t ng thu c l p lopDinh. Dùng đ l u danh sách L ố ượ ộ ớ ể ư

(danh sách th c s ) và l u danh sách k t qu . Khi tìm ki m thành công, nó ự ự ư ế ế ả

đ c xóa đi và s đ c dùng l ng đi. ượ ẽ ượ ạ ể ư i đ l u các đ nh n m trên đ ỉ ằ ườ

ng thu c l p listItem, danh sách này đ  resultList: m t danh sách đ i t ộ ố ượ ộ ớ ượ c

s d ng đ l u k t qu tìm ki m khi tìm ki m thành công. Ph m vi public ử ụ ể ư ế ế ế ả ạ

đ có th s d ng khi đ nh nghĩa th t c đ a d li u vào b ng k t qu ể ể ử ụ ữ ệ ủ ụ ư ế ả ị ả

(m c 3.3.2). ụ

3.4.2 – Nh p d li u vào

ữ ệ

Vi c nh p d li u vào đ ậ ữ ệ ệ ượ ư ấ c thông qua các th t c ki m soát các s ki n nh b m ự ệ ủ ụ ể

Sinh viên th c hi n: Ngô Hoàng Liêm

24

L p ĐHCQ K6B

chu t, nh n nút… ấ ộ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

Các th t c nh p nh v m t đ nh b ng chu t, v đ nh b ng nút, nh p đ nh cha, ư ẽ ộ ỉ ủ ụ ẽ ỉ ằ ậ ằ ậ ộ ỉ

đ nh con, nh p đ nh đ u, đ nh cu i (đ v đ ầ ỉ ể ẽ ườ ậ ố ỉ ỉ ộ ng mũi tên n i hai đ nh) đ u có m t ề ố ỉ

i có th x y ra, khi có l đo n l nh đ u đ b t các l ầ ạ ệ ể ắ ỗ ể ả ỗ i thì s có m t b ng thông báo l ộ ả ẽ ỗ i

c th c hi n. đây t (messageBox) hi n lên và ti p sau đó câu l nh return s đ ế ẽ ượ ệ ệ ệ Ở ự ấ ả t c

các th t c nh p đ u có ki m tra l ng trình ủ ụ ể ề ậ ỗ i và l nh return s đ a quá trình ch y ch ẽ ư ệ ạ ươ

c kích ho t. N u l nh return đ v tr ng thái mà th t c ch a nó ch a đ ủ ụ ề ạ ứ ư ượ ế ệ ạ ượ ự c th c

hi n thì các l nh sau nó s không đ c th c hi n. ẽ ệ ệ ượ ự ệ

ử ụ V đ nh b ng chu t th c ch t là m t s ki n click chu t trên panel v . Ta s d ng ộ ự ệ ẽ ỉ ự ẽ ấ ằ ộ ộ

ng s ki n e và 2 thu c tính c a nó là x và y đ l y t a đ click chu t. T a đ đ i t ố ượ ể ấ ọ ộ ự ệ ọ ộ ủ ộ ộ

này s đ c l u vào thu c tính c a m t đ i t ng đ nh thu c danh sách các đ i t ẽ ượ ư ộ ố ượ ủ ộ ố ượ ng ộ ỉ

đ nh (dinh) thu c l p lopDinh khi không có l ỉ ộ ớ ỗ i nào x y ra. Hai l nh đ u tiên (sau các ệ ầ ả

Sinh viên th c hi n: Ngô Hoàng Liêm

25

L p ĐHCQ K6B

l nh khai báo) s hi n th giá tr t a đ click chu t ra 2 ô textbox đ ti n theo dõi. ệ ị ọ ộ ẽ ể ể ệ ộ ị

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

Khi đã nh p đ y đ các d ki n, thì m t đ nh s đ c v ra panel v thông qua ữ ệ ộ ỉ ẽ ượ ủ ầ ậ ẽ ẽ

th t c drawDinh đ c đ nh nghĩa trong module draw.vb. Th t c này s đ c g i khi ủ ụ ượ ị ủ ụ ẽ ượ ọ

click chu t trên panel v ho c b m nút v đ nh. Các giá tr s đ ặ ấ ị ẽ ượ ư ộ c l u vào các thu c ẽ ỉ ẽ ộ

tính t ng này thu c l p lopDinh) và thêm vào danh ươ ứ ng ng c a m t đ nh t m (đ i t ộ ỉ ố ượ ủ ạ ộ ớ

ộ sách dinh thông qua th t c có s n (add) c a ki u danh sách (list (of T)). Khi thêm m t ủ ủ ụ ể ẵ

ng đ nh vào danh sách thì hàm ki m tra thêm đ nh m i s đ c g i (hàm này đ i t ố ượ ớ ẽ ượ ể ỉ ỉ ọ

i trong danh sách thì ta l đ nh nghĩa trong module functions.vb). N u đ nh đó đã t n t ị ồ ạ ế ỉ ạ i

c khi th s d ng messageBox đ báo l ử ụ ể ỗ i và m t l nh return đ quay v tr ng thái tr ể ề ạ ộ ệ ướ ủ

Sinh viên th c hi n: Ngô Hoàng Liêm

26

L p ĐHCQ K6B

c kích ho t… t c đ ụ ượ ạ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

Nút v đ th có ch c năng v mũi tên n i 2 đ nh, và nó s g i đ n th t c v mũi ố ẽ ọ ế ủ ụ ẽ ẽ ồ ị ứ ẽ ỉ

tên (dconnect) trong module draw.vb. T t ng c a nó ch là: tìm v trí đ nh cha và đ nh ư ưở ủ ỉ ị ỉ ỉ

con (tên c a hai đ nh này đ bàn phím) thông qua th t c pSearch ủ ỉ ượ c nh p t ậ ừ ủ ụ

c thêm vào m t đ i t (functions.vb). Sau đó thu c tính c a đ nh cha s đ ộ ủ ỉ ẽ ượ ộ ố ượ ộ ng thu c

l p Child t ớ ươ ứ ủ ng ng v i tên đ nh con v a nh p, và thu c tính parents (ki u String) c a ừ ể ậ ớ ộ ỉ

c thêm vào m t ký t t đ nh con cũng đ ỉ ượ ộ ự ươ ứ ố ng ng v i tên đ nh cha v a nh p. Các đ i ừ ậ ớ ỉ

ng đ nh cha, đ nh con (thu c l p lopDinh), giá tr kho ng cách, và các giá tr màu tô, t ượ ộ ớ ả ị ỉ ỉ ị

màu v s đ c dùng làm tham bi n th c s khi g i đ n th t c v mũi tên (dconnect ẽ ẽ ượ ủ ụ ẽ ự ự ọ ế ế

trong module draw.vb).

Khi nh n nút v đ th , các hàm ki m tra s đ c g i đ ki m tra xem đ nh cha, ẽ ồ ị ẽ ượ ể ấ ọ ể ể ỉ

đ nh con có t n t ỉ ồ ạ ồ i trong đ th hay không. N u m t trong hai, ho c c hai không t n ộ ặ ả ồ ị ế

i. Các hàm ki m tra (addChild, addParent) đ c đ nh nghĩa trong module t ạ i thì s báo l ẽ ỗ ể ượ ị

Sinh viên th c hi n: Ngô Hoàng Liêm

27

L p ĐHCQ K6B

funtions.vb.

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

V i nút b t đ u tìm ki m, s d ng hàm pSearch đ tìm v trí đ nh trong danh sách ắ ầ ử ụ ế ể ớ ị ỉ

các đ i t ng đ nh. Sau khi tìm đ c v trí hai đ nh đó (t ố ượ ỉ ượ ỉ ị ươ ng ng v i tên đ nh đ ớ ứ ỉ ượ c

nh p t bàn phím) thì th t c astar s đ ậ ừ ủ ụ ẽ ượ ế c g i v i hai đ nh truy n vào là tham bi n ọ ớ ề ỉ

th c s . Khi nút này đ c nh n thì ngoài các th t c và hàm nói trên đ c kích ho t thì ự ự ượ ủ ụ ấ ượ ạ

còn có thêm m t th t c khác n a đ c g i, đó là drawAll đ v l i đ th v i màu ủ ụ ữ ượ ộ ể ẽ ạ ồ ị ớ ọ

ban đ u. Th t c này đ c g i ra c đó mà có ủ ụ ầ ượ ọ ở đây đ n u có ti n hành tìm ki m tr ế ể ế ế ướ

k t qu tìm ki m thành công thì nó s đ a cách hi n th c a đ th v tr ng thái ban ế ị ủ ồ ị ề ạ ẽ ư ể ế ả

đ u đ sau đó ti n hành tìm ki m l n ti p theo. ầ ế ế ể ế ầ

3.4.3 – Th t c astar – th t c th hi n thu t toán A* ủ ụ

ể ệ

ủ ụ

Trong th t c này ta khai báo 2 đ i t ng là: ủ ụ ố ượ

 Dtemp: thu c l p đ nh, coi là m t đ nh t m đ s d ng trong các l nh ti p ế ể ử ụ ộ ớ ộ ỉ ệ ạ ỉ

Sinh viên th c hi n: Ngô Hoàng Liêm

28

L p ĐHCQ K6B

theo.

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

ng này đ  itemTemp: thu c l p listItem, đ i t ộ ớ ố ượ ượ ữ ệ c dùng đ đ a các d li u ể ư

vào danh sách k t qu (resultList). ế ả

Đo n l nh trên dùng đ kh i t o các giá tr ban đ u cho các đ i t ạ ệ ở ạ ố ượ ể ầ ị ế ng và các bi n.

Trong đó:

 m: s l n l p ố ầ ặ

 txtResult: textbox trên mainForm, dùng đ th hi n k t qu . ả ể ể ệ ế

 resultList.Add: Thêm m t đ i t ộ ố ượ ng vào danh sách k t qu (danh sách này ế ả

dung đ đ a k t qu ra b ng k t qu ), ban đ u danh sách k t qu có các ả ể ư ế ế ế ả ả ầ ả

ầ thu c tính ch a giá tr l n l p = 0 và u, v = r ng, thu c tính L ch a đ nh đ u ị ầ ặ ứ ỉ ứ ộ ỗ ộ

Sinh viên th c hi n: Ngô Hoàng Liêm

29

L p ĐHCQ K6B

(tên đ nh và các giá tr hàm f, g đã chuy n sang ki u string). ể ể ị ỉ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

 Dlist.Add: Thêm đ nh đ u vào danh sách k t qu th c s (danh sách này ả ự ự ế ầ ỉ

dùng đ v đ th v i màu khác và đ thêm các giá tr vào resultList). ể ẽ ồ ị ớ ể ị

Thu c tính f c a đ nh đ c kh i t o giá tr b ng v i giá tr hàm đánh giá c a đ nh ủ ỉ ộ ượ ủ ỉ ở ạ ị ằ ớ ị

đó, vì đ nh đ u có giá tr hàm g = 0. ầ ị ỉ

Gi ng nh t t ư ư ưở ố ứ ng thu t toán thì ban đ u s l n l p = 0, u, v r ng, và L ch a ầ ố ầ ặ ậ ỗ

tr ng thái đ u tiên. Đo n l nh trên th hi n đ y đ đi u này. ầ ủ ề ể ệ ạ ệ ạ ầ

B t đ u vào thân vòng l p thì ta s s d ng l p vô t n khi đi u ki n l p luôn ẽ ử ụ ắ ầ ệ ặ ề ậ ặ ặ

đúng, vòng l p s d ng t ặ ẽ ừ ươ ằ ng ng v i các đi u ki n d ng c a thu t toán A* b ng ừ ủ ứ ệ ề ậ ớ

l nh return. ệ

Ban đ u ki m tra xem danh sách L có r ng hay không (Dlist), n u không r ng thì ỗ ế ể ầ ỗ

đ u c a danh sách L ra, ta s x lý nó đo n l nh sau. l y ph n t ấ ầ ử ầ ẽ ử ủ ở ạ ệ Ở ử đây x lý

tr ng h p khi danh sách L r ng (Dlist.Count = 0) thì thông báo tìm ki m th t b i ra ườ ấ ạ ế ợ ỗ

màn hình, t ng ng các control textbox và danh sách c a b ng k t qu cũng thêm các ươ ứ ủ ả ế ả

giá tr th hi n tìm ki m. Sau đó l nh return s đ ị ể ệ ẽ ượ ế ệ ư c th c hi n, thoát vòng l p và đ a ự ệ ặ

Sinh viên th c hi n: Ngô Hoàng Liêm

30

L p ĐHCQ K6B

ch ươ ng trình tr v tr ng thái tr ở ề ạ ướ c khi th t c này đ ủ ụ ượ c kích ho t ạ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

Đo n l nh sau x lý tr ạ ệ ử ườ ng h p tìm ki m thành công, ế ợ ở ể ệ dòng đ u c a nó th hi n ầ ủ

đ u trong danh sách L. L nh này t ng ng v i b vi c lo i b m t ph n t ạ ỏ ộ ầ ử ầ ệ ệ ươ ớ ướ ứ ạ c lo i

b trong thu t toán. ỏ ậ

Ki m tra n u tên đ nh u (Dtemp) trùng v i tên đ nh k t thúc thì d ng thu t toán, ớ ừ ế ể ế ậ ỉ ỉ

Sinh viên th c hi n: Ngô Hoàng Liêm

31

L p ĐHCQ K6B

c khi th c s d ng thì các k t qu , các x lý s đ c l p trình tr c. nh ng tr ư ướ ự ự ừ ẽ ượ ậ ử ế ả ướ

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

Các x lý và k t qu này dùng đ thông báo k t qu tìm ki m ra màn hình. Các ử ế ể ế ế ả ả

bi n đ c khai báo: ế ượ

 Bi n resultPath ki u String đ l u chu i th hi n đ ng đi ể ệ ườ ể ư ế ể ỗ

 Bi n Vtemp ki u String đ l u thu c tính v c a list k t qu (resultList) ể ư ủ ế ể ế ả ộ

 Bi n Utemp ki u String đ l u thu c tính u c a list k t qu . ả ể ư ủ ế ể ế ộ

 Bi n p ki u Short đ làm ch s l p cho vòng l p, ban đ u đ c gán = m ỉ ố ặ ế ể ể ặ ầ ượ

(s l n l p khi tìm ki m thành công) ố ầ ặ ế

Khi tìm ki m thành công thì Dlist s b xóa, và đ c dùng l ẽ ị ế ượ ạ ể ư ằ i đ l u các đ nh n m ỉ

trên đ ng đi, các đ nh này đ ườ ỉ ượ ấ c l y thông qua tên ch a trong danh sách k t qu ứ ế ả

(t ng ng v i cách l y đ ng đi t ươ ứ ấ ườ ớ d ừ ướ i lên trên b ng k t qu trong thu t toán A*). ả ế ả ậ

V l ẽ ạ i Dlist v i màu khác, đây chính là đ th k t qu . Ta v ra màn hình v i màu ồ ị ế ẽ ả ớ ớ

khác đ th hi n đ ng đi. ể ể ệ ườ

ầ Đo n l nh cu i trong th t c này th hi n các x lý c a thu t toán A*. Ban đ u ể ệ ạ ệ ủ ụ ử ủ ậ ố

tính l i các giá tr f và g cho các đ nh đ ạ ị ỉ ượ ố c phát tri n, sau khi tính xong thì đ a đ i ư ể

ng đ nh đó vào danh sách L (danh sách Dlist). đây ngoài đ i t ng dinhTemp là t ượ ỉ Ở ố ượ

đ i t ố ượ ộ ng t m dùng đ làm trung gian khi tính các giá tr f, g thì còn s d ng thêm m t ử ụ ể ạ ị

ng t m dinh4Add thu c l p lopDinh dùng đ thêm đ nh đã tính l đ i t ố ượ ộ ớ ể ạ ỉ ạ i f, g v i các ớ

thu c tính c n thi t vào trong danh sách Dlist. Vì trong thân vòng l p for, m i l n tính ầ ộ ế ỗ ầ ặ

i f, g thì dinhTemp l i có m t giá tr khác nhau, n u thêm th ng đ nh này vào danh l ạ ạ ế ẳ ộ ị ỉ

sách Dlist thì l n phát tri n khác, v i m t đ nh đ ở ầ ộ ỉ ể ớ ượ ế c sinh ra trùng v i đ nh cũ, n u ớ ỉ

Dlist đã ch a đ nh trùng v i đ nh v a sinh ra thì các giá tr f, g c a các đ nh này s trùng ứ ỉ ớ ỉ ừ ủ ẽ ị ỉ

nhau, và nh v y không đúng v i thu t toán. ư ậ ậ ớ

Sau khi tính toán các giá tr này thì thu c tính u, v, L t ị ộ ươ ng ng c a b ng k t qu ủ ả ứ ế ả

Sinh viên th c hi n: Ngô Hoàng Liêm

32

L p ĐHCQ K6B

i (sau khi các giá tr thu c tính đó đã chuy n sang ki u String). s l u l ẽ ư ạ ể ể ộ ị

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

Sau khi tính toán và thêm các đ i t ng đ nh vào trong danh sách Dlist thì danh sách ố ượ ỉ

này s đ c s p x p l i nh hàm Lsort. Dlist đ c s p x p và gán tr l i cho chính ẽ ượ ắ ế ạ ờ ượ ắ ở ạ ế

nó.

Ta t ng tóm t t các đo n l nh c a th t c này nh sau: ổ ắ ạ ệ ủ ụ ủ ư

 Kh i t o danh sách L ch a tr ng thái đ u tiên, các danh sách c a b ng k t ế ủ ả ở ạ ứ ạ ầ

qu , các đ i t ng trung gian, các bi n kh i t o giá tr ban đ u… ố ượ ả ở ạ ế ầ ị

 B t đ u thân vòng l p, x lý các tr ắ ầ ử ặ ườ ng h p k t thúc c a thu t toán. Hai ủ ế ậ ợ

tr ng h p k t thúc đ c x lý và đ a k t qu ra màn hình. ườ ợ ế ượ ử ư ế ả

 Ph n l p chính c a thu t toán, tính các giá tr f, g cho các đ nh đ c phát ầ ặ ủ ậ ị ỉ ượ

tri n, và l u các giá tr này vào các đ i t ng, các bi n c n thi t đ đ a ra ố ượ ư ể ị ế ầ ế ể ư

Sinh viên th c hi n: Ngô Hoàng Liêm

33

L p ĐHCQ K6B

b ng k t qu ả ế ả

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

K T LU N

Thu t toán tìm ki m t i u nói chung và Thu t toán tìm ki m A* nói riêng là ế ậ ố ư ế ậ

thu t toán mang tính ng d ng th c t cao, đ c bi t là trong l p k ho ch và h c máy. ự ế ụ ứ ậ ặ ệ ế ạ ậ ọ

Sinh viên th c hi n: Ngô Hoàng Liêm

34

L p ĐHCQ K6B

Qua vi c th c hi n bài t p l n này, em đã có thêm ki n th c đ y đ và sâu s c h n v ứ ầ ủ ắ ơ ậ ớ ự ệ ế ệ ề

Đ tài: Xây d ng ch

ươ

ng trình minh h a thu t toán A* ọ

GVHD: Nông Th Hoa

các thu t toán tìm ki m nói chung và Thu t toán tìm ki m A* nói riêng. Ngoài ra, ế ậ ế ậ

chúng em cũng có c h i tìm hi u thêm v ngôn ng l p trình Visual Basic và công c ề ơ ộ ữ ậ ể ụ

l p trình Microsoft Visual Basic… ậ

D a trên s ch b o t n tình c a các th y cô giáo và s giúp đ c a các b n cùng ầ ự ỉ ả ậ ỡ ủ ự ự ủ ạ

l p, d a trên nh ng ki n th c đã h c, em đã hoàn thành bài t p l n này. Tuy nhiên có ớ ậ ớ ữ ự ứ ế ọ

ng pháp v n ch a th c s t th ph ể ươ ự ự ố ư ự ỉ ả i u và còn nhi u sai sót, r t mong s ch b o ư ề ấ ẫ

Sinh viên th c hi n: Ngô Hoàng Liêm

35

L p ĐHCQ K6B

c hoàn thi n h n. c a các th y cô và các b n đ đ tài c a em đ ủ ể ề ủ ạ ầ ượ ệ ơ