Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 32 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
32
Dung lượng
628,47 KB
Nội dung
Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* MỤC LỤC LỜI NÓI ĐẦU Mặc dù kỉ 18, 19 đầu kỉ 20, hình thức hóa khoa học tính toán tạo điều kiện tiên mặt trí tuệ cho việc nghiên cứu Trí tuệ nhân tạo, phải kỉ 20 với đời máy tính số Trí tuệ nhân tạo trở thành ngành khoa học có sức sống Một thành phần thiếu Trí tuệ nhân tạo việc dùng máy tính số phương tiện chọn lựa để tạo thử nghiệm lý thuyết trí tuệ Hai mối quan tâm tảng nhà nghiên cứu Trí tuệ nhân tạo biểu diễn tri thức tìm kiếm Sự quan tâm thứ ý đến vấn đề nắm bắt theo ngôn ngữ tri thức đầy đủ mà hành vi thông minh đòi hỏi Trong đó, tìm kiếm kĩ thuật giải vấn đề theo cách khảo sát có hệ thống không gian trạng thái toán, tức giai đoạn có chọn lựa trình giải vấn đề Trong chiến lược tìm kiếm, người ta biểu diễn trình giải vấn đề trình tìm kiếm đường đồ thị không gian trạng thái mà đó: trạng thái toán xem nút đồ thị hay gọi trạng thái đường chuyển trạng thái áp dụng phép toán hợp lệ vào trạng thái chuyển toán từ trạng thái sang trạng thái khác gọi liên kết đồ thị Đây kĩ thuật hiệu mà tính quy tắc xác làm cho việc cài đặt máy tính mang tính trực tiếp Trong tập lớn này, em tìm hiểu Thuật toán tìm kiếm A* 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 bảo tận tình thầy cô giáo giúp đỡ bạn lớp, dựa kiến thức học, em hoàn thành đề tài nhiên nhiều sai sót, Sinh viên thực hiện: Ngô Hoàng Liêm Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* mong có đóng góp ý kiến thầy cô bạn để đề tài em hoàn thiệ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 John McCarthy đưa hội thảo Dartmouth vào mùa hè năm 1956 Đây xem thời điểm đời thật lĩnh vực nghiên cứu trí tuệ nhân tạo (TTNT) Trong sách viết TTNT năm gần đây, tác giả đưa nhiều định nghĩa TTNT, nhìn chung, ta hiểu: “TTNT thiết kế nghiên cứu chương trình máy tính ứng xử cách thông minh Các chương trình xây dựng để thực hành vi mà thực người động vật xem thông minh” (“Dean, Allen and Aloimonos, 1995) Hiện nhiều nhà nghiên cứu quan niệm rằng, TTNT lĩnh vực nghiên cứu thiết kế tác nhân thông minh (intelligent agent) Tác nhân thông minh tồn môi trường hành động cách thông minh Mục tiêu khoa học TTNT hiểu chất hành vi thông minh Mục tiêu thực tiễn, công nghệ TTNT xây dựng nên hệ thông minh, máy thông minh Một số ngành khoa học khác nghiên cứu lực xem thông minh người như: Triết học, Tâm lý học… Nhưng khác với ngành khoa học trên, TTNT ngành khoa học máy tính – nghiên cứu xử lý thông tin máy tính Do đó, TTNT đặt mục tiêu nghiên cứu: làm để hiểu hành vi thông minh thuật toán, nghiên cứu phương pháp cài đặt chương trình thực hành vi thông minh Như cần xây dựng mô hình tính toán (computational models) phục vụ cho việc giải thích, mô tả hành vi thông Sinh viên thực hiện: Ngô Hoàng Liêm Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* minh thuật toán, ta cần tính hiệu quả, tính khả thi thuật toán thực nhiệm vụ từ đưa 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, cách tổng quát, hiểu tìm đối tượng thỏa mãn số đòi hỏi đó, tập hợp rộng lớn đối tượng Trong lĩnh vực nghiên cứu trí tuệ nhân tạo, thường xuyên phải đối đầu với vấn đề tìm kiếm Đặc biệt lập kế hoạch học máy, tìm kiếm đóng vai trò quan trọng Trong khuôn khổ chương trình giảng dạy nhà trường, tìm hiểu 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, cách tổng quát, phát biểu sau: đối tượng x không gian tìm kiếm gán với số đo giá trị đối tượng f(x), mục tiêu ta tìm đối tượng có giá trị f(x) lớn (hoặc nhỏ nhất) không gian tìm kiếm Hàm f(x) gọi 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 ngắn không gian trạng thái: Thuật toán A*, thuật toán nhánh – – 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ếm Gradient, tìm kiếm mô luyện kim Tìm kiếm bắt chước tiến hóa: Thuật toán di truyền 3.1 – Một số quy ước toán tìm đường Giá trị cung (a,b) độ dài đường nối từ a đến b Độ dài đường từ trạng thái đầu đến trạng thái kết thúc tổng độ dài cung đường Sinh viên thực hiện: Ngô Hoàng Liêm Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* Không gian tìm kiếm: Tất đường 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 trạng thái tới (đi từ trạng thái đầu đến u), xây dựng hàm: g(u): đánh giá độ dài đường từ trạng thái đầu đến u h(u): đánh giá độ dài đường từ u đến trạng thái đích f(u) = g(u) + h(u): đánh giá độ dài đường từ trạng thái đầu đến trạng thái đích mà qua u IV – THUẬT TOÁN A* Thuật toán A* thuật toán sử dụng kỹ thuật tìm kiếm tốt với hàm đánh giá f(u) Tức là: trạng thái chờ phát triển, chọn trạng thái có giá trị hàm đánh giá nhỏ (hoặc lớn nhất) để phát triển tiếp Đỉnh phát triển mức mức 4.1 – Thuật toán Khởi tạo danh sách L chứa trạng thái ban đầu; Loop 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 trạng thái đích then { thông báo thành công; stop;} 2.4 for trạng thái v kề u { g(v) ← g(u) + k(u,v); f(v) ← g(v) + h(v); Đặt v vào danh sách L; } Sinh viên thực hiện: Ngô Hoàng Liêm Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* 2.5 Sắp xếp L theo thứ tự tăng dần hàm f cho trạng thái có giá trị hàm f nhỏ đầu danh sách; End loop; 4.2 – Một số nhận xét thuật toán A* Chúng ta đưa số nhận xét thuật toán A* sau: Người ta chứng minh rằng, hàm đánh giá h(u) đánh giá thấp (trường hợp đặc biệt, h(u) = với trạng thái u) thuật toán A* thuật toán tối ưu, tức nghiệm mà tìm ngiệm tối ưu Ngoài ra, độ dài cung không nhỏ số dương δ thuật toán A* thuật toán đầy đủ theo nghĩa rằng, dừng tìm nghiệm Trong trường hợp hàm đánh giá h(u) = với u, thuật toán A* thuật toán tìm kiếm tốt với hàm đánh giá g(u) Thuật toán A* chứng tỏ thuật toán hiệu số thuật toán đầy đủ tối ưu cho vấn đề tìm kiếm đường ngắn 4.3 – Ví dụ minh họa Để thấy thuật toán A* làm việc sao, ta xét đồ thị không gian trạng thái hình vẽ Trong trạng thái ban đầu trạng thái A, trạng thái đích B, số ghi cạnh cung độ dài cung đó, số cạnh đỉnh giá trị hàm h Đầu tiên, phát triển đỉnh A sinh đỉnh C, D, E F Tính giá trị hàm f đỉnh ta có: g(C) = f(C) = + 15 = 24 g(D) = f(D) = + = 13 g(E) = 13 f(E) = 13 + = 21 g(F) = 20 f(F) = 20 + = 27 Sinh viên thực hiện: Ngô Hoàng Liêm Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* Như đỉnh tốt D (vì f(D) = 13 nhỏ nhất) phát triển đỉnh D, ta nhận đỉnh H E ta đánh giá H E (mới) g(H) = g(D) + độ dài cung (D, H) = + = 15 f(H) = 15 + 10 = 25 Đường tới E qua D có độ dài: g(E) = g(D) + độ dài cung (D,E) = + = 11 f(E) = g(E) + h(E) = 11 + = 19 Trong số đỉnh chờ phát triển đỉnh E với đánh giá f(E) = 19 đỉnh tốt Phát triển đỉnh này, ta nhận đỉnh K I Chúng ta tiếp tục trình đỉnh chọn để phát triển đỉnh kết thúc B, độ dài đường ngắn tới B g(B) = 19 Để theo dõi trình làm việc thuật toán, ta lập bảng phân tích gồm cột: Lần lặp: số lần lặp thuật toán u: đỉnh phát triển u v: đỉnh u L: Danh sách L Với quy ước: đỉnh Ta có bảng phân tích sau Sinh viên thực hiện: Ngô Hoàng Liêm Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* Đường ngắn nhất: A→D→E→I→B Quá trình tìm kiếm mô tả tìm kiếm sau Sinh viên thực hiện: Ngô Hoàng Liêm Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* 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) ngôn ngữ lập trình hướng kiện (event-driven) môi trường phát triển tích hợp (IDE) kết bó phát triển Alan Cooper tên Dự án Ruby (Project Ruby), sau Microsoft mua cải tiến nhiều Visual Basic thay Visual Basic.NET Phiên cũ Visual Basic bắt nguồn phần lớn từ BASIC để lập trình viên phát triển 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 sở liệu dùng DAO (Data Access Objects), RDO (Remote Data Objects), hay ADO (ActiveX Data Objects); lập điều khiển đối tượng ActiveX Một lập trình viên phát triển ứng dụng dùng thành phần (component) có sẵn Visual Basic Các chương trình Visual Basic sử dụng Windows API, làm phải sử dụng khai báo hàm bên Trong lĩnh vực lập trình thương mại, Visual Basic có nhóm khách hàng lớn Theo số nguồn, vào năm 2003, 52% lập trình viên sử dụng Visual Basic, làm thành ngôn ngữ lập trình phổ biến vào lúc Tuy nhiên, nghiên cứu Evans Data cho 43% lập trình viên có ý định đổi qua ngôn ngữ khác Dù vậy, thực hành thí nghiệm VB dùng phổ biến gần gũi dễ học dễ làm Hiện xu hướng lập trình chuyển dần sang NET ưu điểm lợi tuyệt vời Microsoft Visual Basic NET hay gọi VB.NET Microsoft phát triển từ cuối thập niên 1990 phiên đầu vào năm 2002 (cùng với Visual C# ASP.NET) Phiên Visual Basic NET 2010 Sinh viên thực hiện: Ngô Hoàng Liêm Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* 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ó thành phần 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 hàm thủ tục hỗ trợ: functions.vb Module chứa hàm thủ tục vẽ: draw.vb Module chứa hàm thủ tục lưu, mở đồ thị: saveload.vb Khai báo lớp sử dụng chương trình: classes.vb Form giao diện chương trình (mainForm.vb) bao gồm control Visual Basic, kiện control lập trình bên code mainForm.vb Thuật toán A* thao tác nhập, xuất thể form Các bạn mở project kèm với tập báo cáo để biết thêm chi tiết Form hướng dẫn sử dụng (tutorial.vb) hiển thị hướng dẫn số ý sử dụng chương trình Sinh viên thực hiện: Ngô Hoàng Liêm Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* Form tác giả (author.vb) bao gồm thông tin chương trình tác giả Code form lấy thông tin chương trình đưa hiển thị (code viết bên phần onload form) Form hiển thị kết (process.vb) bao gồm hai control, label ghi tiêu đề listView Code form lấy kết tính toán đổ vào listView hiển thị hình (viết phần onload form) Chúng ta chi tiết phần định nghĩa hàm, thủ tục module định nghĩa class sử dụng chương trình phần sau 2.2 – Hoạt động Các thủ tục kiện form chứa dòng lệnh nhập xuất kết Quá trình nhập xuất thực thông qua phương thức có sẵn VB hàm, thủ tục định nghĩa module Để phục vụ cho thuật toán A* - thuật toán chương trình - thành phần hỗ trợ cho định nghĩa đầy đủ module 2.3 – Các lớp sử dụng Để làm việc có hiệu tận dụng ưu điểm lập trình hướng đối tượng, chương trình sử dụng phương pháp lập trình Một lớp đỉnh khai báo file classes.vb Thực chất file thêm vào từ menu add new item, class Các bạn mở file thấy định nghĩa cho lớp Có lớp sử dụng chương trình lopDinh, Child listItem đó: lopDinh lớp bao gồm thuộc tính cần thiết đỉnh thuật toán A* (tọa độ, tên đỉnh, giá trị hàm đánh giá, đỉnh khoảng cách tương ứng, đỉnh cha, giá trị hàm f g) Child lớp đỉnh, gồm thuộc tính cname (tên con) cdistance(khoảng cách từ cha đến nó) listItem lớp sử dụng để lưu kết tính toán đưa bảng kết Lớp gồm thuộc tính tương ứng với bảng sử dụng để thực thuật Sinh viên thực hiện: Ngô Hoàng Liêm 10 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* r α (x1,y1) Đỉnh size y2- y1 (x2,y2) x2-x1 Đỉnh Tùy vào hướng đoạn thẳng (vị trí đỉnh thứ so với đỉnh thứ nhất) mà ta cộng trừ tương ứng Sau tính tọa độ giao điểm, ta vẽ đường thẳng nối tọa độ vẽ hình tam giác thể cho mũi tên cuối đoạn thằng Cách tính tọa độ mở rộng để tìm vị trí thích hợp để vẽ giá trị khoảng cách từ đỉnh cha tới đỉnh Sinh viên thực hiện: Ngô Hoàng Liêm 18 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* Các lệnh sử dụng gồm drawLine để vẽ đoạn thẳng, drawString để vẽ xâu ký tự Biến arrow dùng để tạo hình mũi tên cuối đoạn thẳng Ở đỉnh thứ 2, điểm cuối đoạn thẳng cách giao điểm đoạn thẳng kéo dài đường tròn khoảng = Ta dùng khoảng trống để vẽ phần nhọn mũi tên Các tham biến truyền vào thủ tục gồm có: Đỉnh cha đỉnh con: đối tượng thuộc lớp lopDinh Khoảng cách tương ứng: kiểu số nguyên Short db (dinh brush), dp (dinh pen): tương ứng thuộc lớp brush lớp pen Tham biến dùng để xác định giá trị màu cho viền màu tô cho đỉnh lb (line brush), lp (line pen): tương ứng thuộc lớp brush lớp pen Tham biến dùng để xác định giá trị màu cho đoạn thẳng màu mũi tên 3.2.3 – Thủ tục vẽ toàn đồ thị Thủ tục dùng để vẽ toàn đồ thị với màu ban đầu (ta coi màu trắng, viền xanh, đường nối màu xám màu ban đầu đồ thị) Cách nghĩ thủ tục là: Kiểm tra xem đồ thị có rỗng hay không Nếu rỗng lệnh return thực Nếu đồ thị không rỗng, duyệt tất đỉnh thuộc danh sách đỉnh, ứng với đỉnh, vẽ mũi tên nối đỉnh với Vị trí đỉnh danh sách tìm qua thủ tục pSearch Sinh viên thực hiện: Ngô Hoàng Liêm 19 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* 3.2.4 – Các thủ tục khác Ngoài thủ tục nêu module hai thủ tục clearPanel: dùng để xóa panel vẽ (sử dụng nhấn nút [đồ thị mới] nhấn nút [mở đồ thị], điều kiện mở đồ thị phải mở thành công thủ tục thực hiện) coloredDraw: dùng để vẽ đồ thị với màu khác, cần truyền tham số màu cho thủ tục nối đỉnh mục 3.2.2 Trong thủ tục 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 hàm hỗ trợ Các thủ tục hàm hỗ trợ định nghĩa Module functions.vb đa số có phạm vi public để sử dụng nơi chương trình Nó bao gồm Sinh viên thực hiện: Ngô Hoàng Liêm 20 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* hàm thủ tục có phạm vi private dùng để phục vụ cho hàm thủ tục module 3.3.1 – Xóa đỉnh Tư tưởng thuật toán xóa đỉnh đơn giản Đầu tiên tìm đỉnh tương ứng với con, loại bỏ giá trị trùng với giá trị tên đỉnh cần xóa thuộc tính đỉnh cha (parents) Tương tự, tìm đỉnh cha đỉnh cần xóa tương ứng với cha, loại bỏ thành phần trùng với tên đỉnh cần xóa thuộc tính đỉnh (childs) Giá trị trả hàm danh sách đỉnh với đỉnh xóa, thuộc tính đỉnh liên quan đến đỉnh bị xóa Sinh viên thực hiện: Ngô Hoàng Liêm 21 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* Tham biến truyền vào hàm đỉnh thuộc lớp lopDinh danh sách đỉnh 3.3.2 – Đưa liệu vào bảng kết Bảng kết nằm Form process.vb form có control ListView1 Listview có sub item (ta coi cột) Tương ứng định nghĩa lớp listItem gồm thành phần, khai báo danh sách đối tượng thuộc lớp Do việc thêm giá trị thuộc tính đối tượng danh sách vào ListView1 Công việc thủ tục hiểu đơn giản giống thêm ghi vào bảng 3.3.3 – Các thủ tục hàm khác Các thủ tục hàm có tư tưởng thuật toán đơn giản Hàm thêm đỉnh mới: Kiểm tra xem đỉnh có danh sách chưa, có trả false, chưa trả true Tương tự với hàm thêm đỉnh cha, thêm đỉnh Chỉ khác hàm thêm giá trị vào thuộc tính đỉnh thêm đỉnh Hàm tìm đỉnh có tên cho trước: Hàm trả giá trị vị trí đỉnh danh sách đỉnh tìm trả -1 không tìm Tư tưởng so sánh tên với tên tất đỉnh thuộc danh sách đỉnh, tên trùng, có nghĩa có đỉnh Sinh viên thực hiện: Ngô Hoàng Liêm 22 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* Hàm xóa ký tự xâu: Kiểm tra vị trí ký tự cần xóa, lấy phần lại xâu mà không bao gồm ký tự đó, gán trở lại cho xâu cũ Giá trị trả xâu xóa ký tự cần xóa Hàm dùng để xóa tên đỉnh cha thuộc tính parents đỉnh phục vụ cho hàm xóa đỉnh Hàm xếp danh sách L: Sắp xếp danh sách L theo thuật toán xếp bọt Thủ tục xóa trắng textbox: dùng để xóa textbox cần thiết 3.4 – mainForm – Form chương trình 3.4.1 – Các khai báo Trong Form này, khai báo danh sách bao gồm: dinh: danh sách đối tượng thuộc lớp lopDinh Đây danh sách chương trình Dlist: danh sách đối tượng thuộc lớp lopDinh Dùng để lưu danh sách L (danh sách thực sự) lưu danh sách kết Khi tìm kiếm thành công, xóa dùng lại để lưu đỉnh nằm đường resultList: danh sách đối tượng thuộc lớp listItem, danh sách sử dụng để lưu kết tìm kiếm tìm kiếm thành công Phạm vi public để sử dụng định nghĩa thủ tục đưa liệu vào bảng kết (mục 3.3.2) 3.4.2 – Nhập liệu vào Việc nhập liệu vào thông qua thủ tục kiểm soát kiện bấm chuột, nhấn nút… Các thủ tục nhập vẽ đỉnh chuột, vẽ đỉnh 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) có đoạn lệnh đầu để bắt lỗi xảy ra, có lỗi có bảng thông báo lỗi (messageBox) lên tiếp sau câu lệnh return thực Ở tất thủ tục nhập có kiểm tra lỗi lệnh return đưa trình chạy chương trình trạng thái mà thủ tục chứa chưa kích hoạt Nếu lệnh return thực lệnh sau không thực Sinh viên thực hiện: Ngô Hoàng Liêm 23 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* Vẽ đỉnh chuột thực chất kiện click chuột panel vẽ Ta sử dụng đối tượng kiện e thuộc tính x y để lấy tọa độ click chuột Tọa độ lưu vào thuộc tính đối tượng đỉnh thuộc danh sách đối tượng đỉnh (dinh) thuộc lớp lopDinh lỗi xảy Hai lệnh (sau lệnh khai báo) hiển thị giá trị tọa độ click chuột ô textbox để tiện theo dõi Khi nhập đầy đủ kiện, đỉnh vẽ panel vẽ thông qua thủ tục drawDinh định nghĩa module draw.vb Thủ tục gọi click chuột panel vẽ bấm nút vẽ đỉnh Các giá trị lưu vào thuộc tính tương ứng đỉnh tạm (đối tượng thuộc lớp lopDinh) thêm vào danh sách dinh thông qua thủ tục có sẵn (add) kiểu danh sách (list (of T)) Khi thêm đối Sinh viên thực hiện: Ngô Hoàng Liêm 24 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* tượng đỉnh vào danh sách hàm kiểm tra thêm đỉnh gọi (hàm định nghĩa module functions.vb) Nếu đỉnh tồn danh sách ta lại sử dụng messageBox để báo lỗi lệnh return để quay trạng thái trước thủ tục kích hoạt… Nút vẽ đồ thị có chức vẽ mũi tên nối đỉnh, gọi đến thủ tục vẽ mũi tên (dconnect) module draw.vb Tư tưởng là: tìm vị trí đỉnh cha đỉnh (tên hai đỉnh nhập từ bàn phím) thông qua thủ tục pSearch (functions.vb) Sau thuộc tính đỉnh cha thêm vào đối tượng thuộc lớp Child tương ứng với tên đỉnh vừa nhập, thuộc tính parents (kiểu String) đỉnh thêm vào ký tự tương ứng với tên đỉnh cha vừa nhập Các đối tượng đỉnh cha, đỉnh (thuộc lớp lopDinh), giá trị khoảng cách, giá trị màu tô, màu vẽ dùng làm tham biến thực gọi đến thủ tục vẽ mũi tên (dconnect module draw.vb) Khi nhấn nút vẽ đồ thị, hàm kiểm tra gọi để kiểm tra xem đỉnh cha, đỉnh có tồn đồ thị hay không Nếu hai, hai không tồn báo lỗi Các hàm kiểm tra (addChild, addParent) định nghĩa module funtions.vb Sinh viên thực hiện: Ngô Hoàng Liêm 25 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* Với nút bắt đầu tìm kiếm, sử dụng hàm pSearch để tìm vị trí đỉnh danh sách đối tượng đỉnh Sau tìm vị trí hai đỉnh (tương ứng với tên đỉnh nhập từ bàn phím) thủ tục astar gọi với hai đỉnh truyền vào tham biến thực Khi nút nhấn thủ tục hàm nói kích hoạt có thêm thủ tục khác gọi, drawAll để vẽ lại đồ thị với màu ban đầu Thủ tục gọi để có tiến hành tìm kiếm trước mà có kết tìm kiếm thành công đưa cách hiển thị đồ thị trạng thái ban đầu để sau tiến hành tìm kiếm lần 3.4.3 – Thủ tục astar – thủ tục thể thuật toán A* Trong thủ tục ta khai báo đối tượng là: Dtemp: thuộc lớp đỉnh, coi đỉnh tạm để sử dụng lệnh itemTemp: thuộc lớp listItem, đối tượng dùng để đưa liệu vào danh sách kết (resultList) Sinh viên thực hiện: Ngô Hoàng Liêm 26 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* Đoạn lệnh dùng để khởi tạo giá trị ban đầu cho đối tượng biến Trong đó: m: số lần lặp txtResult: textbox mainForm, dùng để thể kết resultList.Add: Thêm đối tượng vào danh sách kết (danh sách dung để đưa kết bảng kết quả), ban đầu danh sách kết có thuộc tính chứa giá trị lần lặp = u, v = rỗng, thuộc tính L chứa đỉnh đầu (tên đỉnh giá trị hàm f, g chuyển sang kiểu string) Dlist.Add: Thêm đỉnh đầu vào danh sách kết thực (danh sách dùng để vẽ đồ thị với màu khác để thêm giá trị vào resultList) Thuộc tính f đỉnh khởi tạo giá trị với giá trị hàm đánh giá đỉnh đó, đỉnh đầu có giá trị hàm g = Sinh viên thực hiện: Ngô Hoàng Liêm 27 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* Giống tư tưởng thuật toán ban đầu số lần lặp = 0, u, v rỗng, L chứa trạng thái Đoạn lệnh thể đầy đủ điều Bắt đầu vào thân vòng lặp ta sử dụng lặp vô tận điều kiện lặp đúng, vòng lặp dừng tương ứng với điều kiện dừng thuật toán A* lệnh return Ban đầu kiểm tra xem danh sách L có rỗng hay không (Dlist), không rỗng lấy phần tử đầu danh sách L ra, ta xử lý đoạn lệnh sau Ở xử lý trường hợp danh sách L rỗng (Dlist.Count = 0) thông báo tìm kiếm thất bại hình, tương ứng control textbox danh sách bảng kết thêm giá trị thể tìm kiếm Sau lệnh return thực hiện, thoát vòng lặp đưa chương trình trở trạng thái trước thủ tục kích hoạt Đoạn lệnh sau xử lý trường hợp tìm kiếm thành công, dòng đầu thể việc loại bỏ phần tử đầu danh sách L Lệnh tương ứng với bước loại bỏ thuật toán Kiểm tra tên đỉnh u (Dtemp) trùng với tên đỉnh kết thúc dừng thuật toán, trước thực dừng kết quả, xử lý lập trình trước Sinh viên thực hiện: Ngô Hoàng Liêm 28 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* Các xử lý kết dùng để thông báo kết tìm kiếm hình Các biến khai báo: Biến resultPath kiểu String để lưu chuỗi thể đường Biến Vtemp kiểu String để lưu thuộc tính v list kết (resultList) Biến Utemp kiểu String để lưu thuộc tính u list kết Biến p kiểu Short để làm số lặp cho vòng lặp, ban đầu gán = m (số lần lặp tìm kiếm thành công) Sinh viên thực hiện: Ngô Hoàng Liêm 29 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* Khi tìm kiếm thành công Dlist bị xóa, dùng lại để lưu đỉnh nằm đường đi, đỉnh lấy thông qua tên chứa danh sách kết (tương ứng với cách lấy đường từ lên bảng kết thuật toán A*) Vẽ lại Dlist với màu khác, đồ thị kết Ta vẽ hình với màu khác để thể đường Đoạn lệnh cuối thủ tục thể xử lý thuật toán A* Ban đầu tính lại giá trị f g cho đỉnh phát triển, sau tính xong đưa đối tượng đỉnh vào danh sách L (danh sách Dlist) Ở đối tượng dinhTemp đối tượng tạm dùng để làm trung gian tính giá trị f, g sử dụng thêm đối tượng tạm dinh4Add thuộc lớp lopDinh dùng để thêm đỉnh tính lại f, g với thuộc tính cần thiết vào danh sách Dlist Vì thân vòng lặp for, lần tính lại f, g dinhTemp lại có giá trị khác nhau, thêm thẳng đỉnh vào danh sách Dlist lần phát triển khác, với đỉnh sinh trùng với đỉnh cũ, Dlist chứa đỉnh trùng với đỉnh vừa sinh giá trị f, g đỉnh trùng nhau, không với thuật toán Sau tính toán giá trị thuộc tính u, v, L tương ứng bảng kết lưu lại (sau giá trị thuộc tính chuyển sang kiểu String) Sau tính toán thêm đối tượng đỉnh vào danh sách Dlist danh sách xếp lại nhờ hàm Lsort Dlist xếp gán trở lại cho Ta tổng tóm tắt đoạn lệnh thủ tục sau: Khởi tạo danh sách L chứa trạng thái đầu tiên, danh sách bảng kết quả, đối tượng trung gian, biến khởi tạo giá trị ban đầu… Bắt đầu thân vòng lặp, xử lý trường hợp kết thúc thuật toán Hai trường hợp kết thúc xử lý đưa kết hình Sinh viên thực hiện: Ngô Hoàng Liêm 30 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* Phần lặp thuật toán, tính giá trị f, g cho đỉnh phát triển, lưu giá trị vào đối tượng, biến cần thiết để đưa bảng kết Sinh viên thực hiện: Ngô Hoàng Liêm 31 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh họa thuật GVHD: Nông Thị Hoa toán A* KẾT LUẬN Thuật toán tìm kiếm tối ưu nói chung Thuật toán tìm kiếm A* nói riêng thuật toán mang tính ứng dụng thực tế cao, đặc biệt lập kế hoạch học máy Qua việc thực tập lớn này, em có thêm kiến thức đầy đủ sâu sắc thuật toán tìm kiếm nói chung Thuật toán tìm kiếm A* nói riêng Ngoài ra, chúng em có hội tìm hiểu thêm ngôn ngữ lập trình Visual Basic công cụ lập trình Microsoft Visual Basic… Dựa bảo tận tình thầy cô giáo giúp đỡ bạn lớp, dựa kiến thức học, em hoàn thành tập lớn Tuy nhiên phương pháp chưa thực tối ưu nhiều sai sót, mong bảo thầy cô bạn để đề tài em hoàn thiện Sinh viên thực hiện: Ngô Hoàng Liêm 32 Lớp ĐHCQ K6B [...].. .Đề tài: Xây dựng chương trình minh h a thuật GVHD: Nông Thị Hoa toán A* 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) 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 Sinh viên thực hiện: Ngô Hoàng Liêm 11 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh h a thuật GVHD: Nông Thị Hoa toán A* Xử... chương trình minh h a thuật GVHD: Nông Thị Hoa toán A* 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 bảng kết quả Sinh viên thực hiện: Ngô Hoàng Liêm 31 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh h a thuật GVHD: Nông Thị Hoa toán A* KẾT LUẬN Thuật toán tìm kiếm tối ưu nói chung và Thuật toán. .. phức tạp c a chươ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 Sinh viên thực hiện: Ngô Hoàng Liêm 14 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh h a thuật GVHD: Nông Thị Hoa toán A* 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... định ngh a trong Module functions.vb và a số 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 các Sinh viên thực hiện: Ngô Hoàng Liêm 20 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh h a thuật GVHD: Nông Thị Hoa toán A* 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... toán A* Xử lý lỗi trong chương trình Sau khi tìm kiếm thành công Sinh viên thực hiện: Ngô Hoàng Liêm 12 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh h a thuật GVHD: Nông Thị Hoa toán A* 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ác lớp được sử dụng trong chương trình đượ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... tên c a tất cả các đỉnh thuộc danh sách đỉnh, nếu tên trùng, có ngh a là đã có đỉnh đó Sinh viên thực hiện: Ngô Hoàng Liêm 22 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh h a thuật GVHD: Nông Thị Hoa toán A* 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... (add) c a kiểu danh sách (list (of T)) Khi thêm một đối Sinh viên thực hiện: Ngô Hoàng Liêm 24 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh h a thuật GVHD: Nông Thị Hoa toán A* 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 định ngh a trong module functions.vb) Nếu đỉnh đó đã tồn tại trong danh sách thì ta lại sử dụng messageBox để báo lỗi và một lệnh return để quay về... 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 Sinh viên thực hiện: Ngô Hoàng Liêm 13 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh h a thuật GVHD: Nông Thị Hoa toán A* 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: Property ([tham biến nếu có]) As Kiểu có thể... lỗi (messageBox) hiện lên và tiếp sau đó câu lệnh return sẽ được thực hiện Ở đây tất cả các thủ tục nhập đều có kiểm tra lỗi và lệnh return sẽ đ a quá trình chạy chương trình về trạng thái mà thủ tục ch a nó ch a được kích hoạt Nếu lệnh return được thực hiện thì các lệnh sau nó sẽ không được thực hiện Sinh viên thực hiện: Ngô Hoàng Liêm 23 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh h a thuật GVHD:... được 2 t a độ giao điểm, ta vẽ mộ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 Sinh viên thực hiện: Ngô Hoàng Liêm 18 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh h a thuật GVHD: Nông Thị Hoa toán A* Các lệnh được sử dụng gồm drawLine ... Liêm Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh h a thuật GVHD: Nông Thị Hoa toán A* 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ó thành phần sau: ... số giao diện chương trình Giao diện chương trình Sinh viên thực hiện: Ngô Hoàng Liêm 11 Lớp ĐHCQ K6B Đề tài: Xây dựng chương trình minh h a thuật GVHD: Nông Thị Hoa toán A* Xử lý lỗi chương trình. .. tài: Xây dựng chương trình minh h a thuật GVHD: Nông Thị Hoa toán A* minh thuật toán, ta cần tính hiệu quả, tính khả thi thuật toán thực nhiệm vụ từ đ a phương pháp cài đặt II – GIẢI QUYẾT VẤN ĐỀ