1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đề tài xây dựng chương trình minh họa thuật toán a

33 800 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 33
Dung lượng 628,47 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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ỗitrạng thái bài toán

Trang 1

MỤC LỤC

MỤC LỤC 1

LỜI NÓI ĐẦU 2

Phần I: LÝ THUYẾT CƠ SỞ 3

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

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

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

3.1 – Một số quy ước trong bài toán tìm đường đi 4

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

IV – THUẬT TOÁN A* 5

4.1 – Thuật toán 5

4.2 – Một số nhận xét về thuật toán A* 6

4.3 – Ví dụ minh họa 6

Phần II: XÂY DỰNG CHƯƠNG TRÌNH MINH HỌA 9

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 9

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

2.1 – Cấu trúc chương trình 10

2.2 – Hoạt động 11

2.3 – Các lớp được sử dụng 11

2.4 – Một số giao diện chương trình 12

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

3.1 – Định nghĩa các lớp 14

3.2 – Các thủ tục vẽ 16

3.3 – Các thủ tục và hàm hỗ trợ 20

3.4 – mainForm – Form chính của chương trình 23

KẾT LUẬN 32

Trang 2

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 đòihỏ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ốngmộ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ỗitrạ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áccủ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ề Thuật toán tìm kiếm A* và sử dụng ngôn

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

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ênnhữ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ấtmong 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ànthiện hơn

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

Trang 3

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 địnhnghĩa về TTNT, nhưng nhìn chung, ta có thể hiểu: “TTNT là sự thiết kế và nghiên cứucác chương trình máy tính ứng xử một cách thông minh Các chương trình này được xâydựng để thực hiện các hành vi mà khi thực hiện ở người và động vật chúng ta xem là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ìtồn tại trong môi trường và hành động một cách thông minh Mục tiêu khoa học củaTTNT 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ủaTTNT 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 minhcủa con người như: Triết học, Tâm lý học… Nhưng khác với các ngành khoa học trên,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ôngminh 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ể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ìnhtính toán (computational models) phục vụ cho việc giải thích, mô tả các hành vi thôngminh 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ánthực hiện một nhiệm vụ và từ đó đưa ra các phương pháp cài đặt

Trang 4

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 nghiêncứu của trí tuệ nhân tạo, chúng ta thường xuyên phải đối đầu với vấn đề tìm kiếm Đặcbiệ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ểucá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)

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

 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 tượ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 đó f(x), mục tiêu của ta là tìm được đối tượng có giá trị 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ánA*, thuật toán nhánh – và – cận

 Các kỹ thuật tìm kiếm đối tượng tốt nhất: Tìm kiếm leo đồi, tìm kiếmGradient, 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

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

Trang 5

 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ử u là một trạng thái tới (đi từ trạng thái đầu đến 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ứchiệ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;

2 Loop do

2.1 If L rỗng then

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

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

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

{ 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);

Trang 6

Đặ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

hợp đặc biệt, h(u) = 0 với mọi trạng thái u) thì thuật toán A* là thuật toán tối ưu, tức 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ỏ hơn

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

Để 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, phát triển đỉnh 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 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

Trang 7

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

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

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

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

Trong số các đỉnh chờ phát triển thì đỉnh E với đánh giá f(E) = 19 là đỉnh tố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ới khi đỉnh được chọn để phát triển là đỉnh kết thúc B, độ dài đường đ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

Trang 8

Với quy ước: đỉnh u g(u) f (u)

Ta có bảng phân tích như sau

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

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

Trang 9

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 VB) là một ngôn ngữ lập trình hướng sự kiện (event-driven)

và môi trường phát triển tích hợp (IDE) kết bó được phát triển đầu tiên bởi 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 Basicbắ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 (GUI) theo mô hình phát triển ứng dụng nhanh (Rapid Application Development, RAD); truy cập các cơ sở dữ liệu dùng DAO (Data Access Objects), RDO (Remote Data

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

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ụngWindows API, nhưng làm vậy thì phải sử dụng các khai báo hàm bên ngoài

Trong lĩnh vực lập trình thương mại, Visual Basic có một trong những nhóm kháchhà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 đổiqua 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 đangchuyể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

Trang 10

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

2.1 – Cấu trúc chương trình

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

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

 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ủaVisual 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

Trang 11

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 củaform này chỉ lấy thông tin chương trình rồi đưa ra hiển thị (code được viết bên trongphầ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ộtlistView 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ànhình (viết trong phần onload của form)

Chúng ta sẽ đi chi tiết hơn ở phần định nghĩa các hàm, thủ tục trong module và địnhnghĩa các class sử dụng trong chương trình ở phần sau

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áchàm, thủ tục được định nghĩa trong các module Để phục vụ cho thuật toán A* - thuậttoá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 tượ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 được khai báotrong 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ụngtrong 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 trongthuật toán A* (tọa độ, tên đỉnh, giá trị hàm đánh giá, các đỉnh con và khoảngcách tương ứng, các đỉnh cha, giá trị hàm f và g)

Trang 12

 Child là lớp các con của một đỉnh, nó gồm các thuộc tính như cname (têncon) 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ậttoá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à danhsách L)

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

2.4 – Một số giao diện chương trình

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

Trang 13

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

Trang 14

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

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ínhtrực tiếp (định nghĩa giống cú pháp <phạm vi> <tên thuộc tính> as <kiểu dữ liệu>) 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ácthuộ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ìnhhướng đối tượng thì phương pháp này được khuyến khích sử dụng vì có nhiều ưu điểmhơ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)

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

Trang 15

 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

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

 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

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

<phạm vi> Property <tên thuộc tính>([tham biến nếu có]) As <kiể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 trongchươ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 chocá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ư việncủa Microsoft (http://msdn.microsoft.com)

Trang 16

Các lớp nói chung, đa số đều được định nghĩa tuân theo tư tưởng lập trình hướng đốitượng Nhưng do tính phức tạp của chương trình chưa phải là cao, nên một số thuộc tínhvẫ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

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

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ảngcá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 ứng (vì childs là một danh sách các đối tượng thuộc lớp Child)

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

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

 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ứng

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 (formprocess.vb) Các giá trị hàm f, g sẽ được chuyển sang xâu ký tự trước khi thêm vàothuộc tính u, v và L của đối tượng thuộc lớp này

Ngày đăng: 07/12/2015, 20:05

HÌNH ẢNH LIÊN QUAN

Bảng   kết   quả   nằm   trên   Form   process.vb   và   trong   form   này   có   một   control   là ListView1 - Đề tài xây dựng chương trình minh họa thuật toán a
ng kết quả nằm trên Form process.vb và trong form này có một control là ListView1 (Trang 22)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w