Trí tuệ nhân tạo (TTNT) là một lĩnh vực của khoa học máy tính, nghiên cứu sự thiết kế của các tác nhân thông minh. Các áp dụng của TTNT rất đa dạng và phong phú, hiện nay đã có rất nhiều hệ thông minh ra đời như: các hệ chuyên gia, các hệ điều khiển tự động, các hệ nhận dạng,…Kỹ thuật của TTNT đã được sử dụng trong việc xây dựng các hệ mềm nhằm tạo ra các hệ mềm mang yếu tố thông minh, linh hoạt và tiện dụng. Một trong những nghiên cứu đó là đưa ra các giải thuật tìm kiếm tối ưu nhất phục vụ việc giải quyết các vấn đề của bài toán một cách nhanh nhất có thể. Giải thuật tìm kiếm là một thuật toán lấy đầu vào là một bài toán và trả về kết quả là một lời giải cho bài toán đó. Hầu hết các thuật toán được nghiên cứu bởi các nhà khoa học máy tính để giải quyết các bài toán đều là các thuật toán tìm kiếm. Tập hợp tất cả các lời giải có thể đối với một bài toán được gọi là không gian tìm kiếm. Tìm kiếm vét cạn (bruteforce search) hay các thuật toán tìm kiếm cơ bản sử dụng phương pháp đơn giản nhất và trực quan nhất. Trong khi đó, các thuật toán tìm kiếm có thông tin sử dụng hàm Heuristics để áp dụng các tri thức về cấu trúc của không gian tìm kiếm nhằm giảm thời gian cần thiết cho việc tìm kiếm. Để hiểu rõ bản chất của thuật giải Heuristic, chúng ta nhất thiết phải nắm vững hai chiến lược tìm kiếm cơ bản là tìm kiếm theo chiều sâu (Depth First Search) và tìm kiếm theo chiều rộng (Breath First Search). Cụ thể em sẽ trình bày việc cài đặt thuật toán tìm kiếm theo chiều sâu và tìm kiếm theo chiều rộng bằng ngôn ngữ C. Bố cục bài bái cáo gồm 3 phần: Chương 1: Cơ sở lý thuyết Chương 2: Tìm hiểu về ngôn ngữ lập tình Chương 3: Cài đặt thuật toán Trong quá trình thực hiện đề tài, tuy có nhiều cố gắng nhưng sẽ không tránh khỏi những sai sót, rất mong được thầy hướng dẫn và góp ý. Em xin chân thành cảm ơn thầy Trần Mạnh Tuấn đã tận tình hướng dẫn và tạo điều kiện tốt trong quá trình học tập cũng như trong quá trình em hoàn thành đề tài này
MỤC LỤC LỜI CẢM ƠN Để làm báo cáo này, em nhận giúp đỡ nhiều từ phía Nhà trường, em xin gửi lời cám ơn chân thành đến: _ Ban Giám Hiệu Trường Đại học Công nghệ Thông tin Truyền thông Thái Nguyên tạo cho em môi trường học tập nghiên cứu đầy đủ thiết bị, sơ sở vật chất để chúng em yên tâm nghiên cứu; tổ chức cho sinh viên chúng em có khoảng thời gian thực tập tìm hiểu thực tế, để không bỡ ngỡ bước vào môi trường làm việc _ Khoa Công nghệ Thông tin trang bị cho chúng em kiến thức bổ ích môn học _ GVHD – ThS Trần Mạnh Tuấn nhiệt tình giảng dạy hướng dẫn em làm tốt báo cáo Thái nguyên, tháng 4/2014 Sinh viên Lý Thị Việt Chung LỜI NÓI ĐẦU Trí tuệ nhân tạo (TTNT) lĩnh vực khoa học máy tính, nghiên cứu thiết kế tác nhân thông minh Các áp dụng TTNT đa dạng phong phú, có nhiều hệ thông minh đời như: hệ chuyên gia, hệ điều khiển tự động, hệ nhận dạng,…Kỹ thuật TTNT sử dụng việc xây dựng hệ mềm nhằm tạo hệ mềm mang yếu tố thông minh, linh hoạt tiện dụng Một nghiên cứu đưa giải thuật tìm kiếm tối ưu phục vụ việc giải vấn đề toán cách nhanh Giải thuật tìm kiếm thuật toán lấy đầu vào toán trả kết lời giải cho toán Hầu hết thuật toán nghiên cứu nhà khoa học máy tính để giải toán thuật toán tìm kiếm Tập hợp tất lời giải toán gọi không gian tìm kiếm Tìm kiếm vét cạn (brute-force search) hay thuật toán tìm kiếm sử dụng phương pháp đơn giản trực quan Trong đó, thuật toán tìm kiếm có thông tin sử dụng hàm Heuristics để áp dụng tri thức cấu trúc không gian tìm kiếm nhằm giảm thời gian cần thiết cho việc tìm kiếm Để hiểu rõ chất thuật giải Heuristic, thiết phải nắm vững hai chiến lược tìm kiếm tìm kiếm theo chiều sâu (Depth First Search) tìm kiếm theo chiều rộng (Breath First Search) Cụ thể em trình bày việc cài đặt thuật toán tìm kiếm theo chiều sâu tìm kiếm theo chiều rộng ngôn ngữ C# Bố cục bái cáo gồm phần: Chương 1: Cơ sở lý thuyết Chương 2: Tìm hiểu ngôn ngữ lập tình Chương 3: Cài đặt thuật toán Trong trình thực đề tài, có nhiều cố gắng không tránh khỏi sai sót, mong thầy hướng dẫn góp ý Em xin chân thành cảm ơn thầy Trần Mạnh Tuấn tận tình hướng dẫn tạo điều kiện tốt trình học tập trình em hoàn thành đề tài CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.Tổng quan môn Trí tuệ nhân tạo 1.1.Khái niệm Trí tuệ nhân tạo lĩnh vực công nghệ thông tin (CNTT) nghành khoa học nghiên cứu phương thức để máy tính có khả tư suy nghĩ người Ngoài trí tuệ nhân tạo ngành nghiên cứu phương thức để giúp máy tính làm công việc mà thời điểm công việc mà người chưa làm hay không làm Trí tuệ nhân tạo chia thành hai trường phái tư duy: TTNT truyền thống Trí tuệ tính toán 1.2 Lịch sử phát triển Vào năm 1943, Warren McCulioch Walter Pitts bắt đầu thực nghiên cứu ba sở lý thuyết bản: triết học chức noron thần kinh; phân tích mệnh đề logic; lý thuyết dự đoán Turing Thuật ngữ “Trí tuệ nhân tạo” (Artificial Intelligence - AI) thiết lập John McCarthy Hội thảo chủ đề vào mùa hè năm 1956 Vào năm 1990 đầu kỷ 21, AI đạt thành tựu to lớn nhất, AI áp dụng logic, khai phá liệu, chẩn đoán y học nhiều lĩnh vực ứng dụng khác công nghiệp Sự thành công dựa vào nhiều yếu tố: tăng khả tính toán máy tính, tập trung giải toán cụ thể, xây dựng mối quan hệ AI lĩnh vực khác giải toán tương tự, chuyển giao nhà nghiên cứu cho phương pháp toán học vững chuẩn khoa học xác 1.3.Các lĩnh vực ứng dụng AI - Bài toán lập luận, suy diễn Khái niệm lập luận (reasoning), suy diễn (reference) sử dụng phổ biến lĩnh vực AI Lập luận suy diễn logic, dùng để tiến trình rút kết luận (tri thức mới) từ giả thiết cho (được biểu diễn dạng sở tri thức) Như vậy, để thực lập luận người ta cần có phương pháp lưu trữ sở tri thức thủ tục lập luận sở tri thức - Biểu diễn tri thức Muốn máy tính lưu trữ xử lý tri thức cần có phương pháp biểu diễn tri thức Các phương pháp biểu diễn tri thức bao gồm ngôn ngữ biểu diễn kỹ thuật xử lý tri thức Một ngôn ngữ biểu diễn tri thức đánh giá “tốt” có tính biểu đạt cao tính hiệu thuật toán lập luận ngôn ngữ Tính biểu đạt ngôn ngữ thể khả biểu diễn phạm vi rộng lớn thông tin miền ứng dụng Tính hiệu thuật toán lập luận thể chi phí thời gian không gian dành cho việc lập luận Tuy nhiên, hai yếu tố dường đối nghịch nhau, tức ngôn ngữ có tính biểu đạt cao thuật toán lập luận có độ phức tạp lớn (tính hiệu thấp) ngược lại (ngôn ngữ đơn giản, có tính biểu đạt thấp thuật toán lập luận có hiệu cao) Do đó, thách thức lớn lĩnh vực AI xây dựng ngôn ngữ biểu diễn tri thức mà cân hai yếu tố này, tức ngôn ngữ có tính biểu đạt đủ tốt (tùy theo ứng dụng) lập luận hiệu - Lập kế hoạch: khả suy mục đích cần đạt nhiệm vụ đưa ra, xác định dãy hành động cần thực để đạt mục đích - Học máy: lĩnh vực nghiên cứu AI phát triển mạnh mẽ có nhiều ứng dụng lĩnh vực khác khai phá liệu, khám phá tri thức, … - Xử lý ngôn ngữ tự nhiên: nhánh AI, tập trung vào ứng dụng ngôn ngữ người Các ứng dụng nhận dạng tiếng nói, nhận dạng chữ viết, dịch tự động, tìm kiếm thông tin,… - Hệ chuyên gia: cung cấp hệ thống có khả suy luận để đưa kết luận Các hệ chuyên gia có khả xử lý lượng thông tin lớn cung cấp kết luận dựa thông tin Có nhiều hệ chuyên gia tiếng hệ chuyên gia y học MYCIN, đoán nhận cấu trúc phân tử từ công thức hóa học DENDRAL, … - Robotics 1.4.Giải vấn đề tìm kiếm Vấn đề tìm kiếm cách tổng quan 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 kể nhiều vấn đề mà việc giải quy vấn đề tìm kiếm Các trò chơi chẳng hạn cờ vua, cờ caro xem vấn đề tìm kiếm Trong số nhiều nước phép thực phải tìm nhiều nước dẫn đến tình kết mà ta người thắng Chứng minh định lý xem vấn đề tìm kiếm Cho tập tiên đề luật suy diễn trường hợp mục tiêu ta tìm luật chứng minh (một dãy luật suy diễn áp dụng) để đưa đến công thức mà ta cần chứng minh Trong lĩnh vực nghiên cứu TTNT 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 có vai trò quan Trong phần nghiên cứu ký thuật tìm kiếm áp dụng để giải vấn đề áp dụng rộng rãi lĩnh vực khác TTNT Cụ thể nghiên cứu chiến lược tìm kiếm mù, sâu vào chiến lược tìm kiếm theo bề rộng (breadth-first search) tìm kiếm theo độ sâu (depth-first search) Trong tìm kiếm theo bề rộng, bước ta chọn trạng thái để phát triển trạng thái sinh trước trạng thái chờ phát triển khác Còn tìm kiếm theo độ sâu, trạng thái chọn để phát triển trạng thái sinh sau số trạng thái chờ phát triển Chúng ta sử dụng danh sách L để lưu trạng thái sinh chờ phát triển Mục tiêu tìm kiếm không gian trạng thái tìm đường từ trạng thái ban đầu tới trạng thái đích, ta cần lưu lại vết đường Ta sử dụng hàm father để lưu lại cha đỉnh đường đi, father(v) = u cha đỉnh v u 1.5.Phân tích toán 1.5.1 Mục đích toán a Tìm kiếm theo chiều sâu Tìm kiếm theo chiều sâu thuật toán duyệt tìm kiếm một đồ thị Thuật toán khởi đầu gốc (hoặc chọn đỉnh coi gốc) phát triển xa theo nhánh Thuật toán tìm kiếm theo chiều sâu ứng dụng cho nhiều giải thuật như: xác định thành phần liên thông đồ thị; kiểm tra đồ thị có đồ thị phẳng hay không,… b Tìm kiếm theo chiều rộng Tìm kiếm theo chiều rộng thuật toán tìm kiếm tất nút mức không gian toán trước chuyển sang nút mức Tìm kiếm theo chiều rộng chủ yếu sử dụng để tìm đường ngắn theo số cạnh hai đỉnh đồ thị, tìm tất đỉnh thành phần liên thông, 1.5.2 Cách thực a Tìm kiếm theo chiều sâu Sơ lược thuật toán tìm kiếm chiều sâu: Trong tìm kiếm theo chiều sâu, trạng thái (đỉnh nút) hành, ta chọn trạng thái (trong tập trạng thái biến đổi thành từ trạng thái tại) làm trạng thái hành lúc trạng thái hành trạng thái đích Trong trường hợp trạng thái hành, ta biến đổi thành trạng thái ta quay lui (Back-tracking) lại trạng thái trước trạng thái hành (trạng thái biến đổi thành trạng thái hành) để chọn đường khác Nếu trạng thái trước mà biến đổi ta quay lui lại trạng thái trước Nếu quay lui đến trạng thái khởi đầu mà thất bại kết luận lời giải Hình ảnh sau minh họa hoạt động tìm kiếm theo chiều sâu Hình 1.1: Hình ảnh tìm kiếm chiều sâu Nó lưu ý "mở rộng" trạng thái chọn mà không "mở rộng" trạng thái khác Kỹ thuật tìm kiếm chiều sâu: Tư tưởng thuật toán là: Giả sử xét đồ thị G Từ đỉnh u thời ta thăm tới đỉnh kề v u trình lặp lại đỉnh v Ở bước tổng quát, giả sử xét đỉnh u 0, có hai khả xảy ra: - Nếu tồn đỉnh v kề với u0 mà chưa thăm đỉnh v trở thành đỉnh thăm trình tìm kiếm lại đỉnh v0 - Ngược lại, đỉnh kề với u thăm ta quay trở lại đỉnh mà trước ta đến đỉnh u0 để tiếp tục trình tìm kiếm Cụ thể tìm kiếm theo chiều sâu không gian toán nút tiếp tục đến ngõ cụt đến đích Tại nút có luật tài, chẳng hạn, “đi theo nút cực trái”, hướng dẫn việc tìm Nếu không tiếp được, gọi đến ngõ cụt, hệ thống quay lại mức đồ thị tìm theo hướng khác, chẳng hạn, đến nút “sát nút cực trái” Thuật toán tìm kiếm theo chiều sâu hình dung việc khảo sát gốc theo cành được, gặp cành cụt quay lại xét cành chưa qua Như vậy, trình thăm đỉnh thuật toán tìm kiếm theo chiều sâu, đỉnh thăm muộn sớm duyệt xong (Cơ chế Last In First Out - Vào sau trước) b Tìm kiếm theo chiều rộng Sơ lược thuật toán tìm kiếm chiều rộng: Ngược lại với tìm kiếm theo kiểu chiều sâu, tìm kiếm chiều rộng mang hình ảnh vết dầu loang Từ trạng thái ban đầu, ta xây dựng tập hợp S bao gồm trạng thái (mà từ trạng thái ban đầu biến đổi thành) Sau đó, ứng với trạng thái Tk tập S, ta xây dựng tập Sk bao gồm trạng thái Tk bổ sung Sk vào S Quá trình lặp lại lúc S có chứa trạng thái kết thúc S không thay đổi sau bổ sung tất Sk Hình 1.2 : Hình ảnh tìm kiếm chiều rộng Tại bước, trạng thái mở rộng, không bỏ sót trạng thái Kỹ thuật tìm kiếm chiều rộng: Kỹ thuật tìm kiếm rộng tìm kiếm tất nút mức không gian toán trước chuyển sang nút mức Kỹ thuật tìm kiếm rộng mức thứ không gian toán, theo hướng dẫn luật trọng tài, chẳng hạn “đi từ trái sang phải” Nếu không thấy lời giải mức này, chuyển xuống mức sau để tiếp tục … đến định vị lời giải có Thuật toán tìm kiếm theo chiều rộng thực cải biến thứ tự duyệt đỉnh đồ thị tìm kiếm theo chiều sâu cách thay dùng ngăn xếp (STACK) ta lại dùng hàng đợi (QUEUE) để kết nạp đỉnh thăm Như vậy, đỉnh thăm sớm sớm trở thành duyệt xong (Cơ chế First In First Out - Vào trước trước) 1.6 Cấu trúc liệu cách biểu diễn trạng thái toán Hình 1.3:Bài toán tím kiếm 1.6.1 Tìm kiếm theo chiều sâu Với liệu cho hình 3, thuật toán tìm kiếm theo chiều sâu bắt đầu thăm đỉnh A, theo cạnh trái, tiếp tục tìm kiếm xong trái chuyển sang tìm kiếm phải Thứ tự duyệt đỉnh là: A, B, D, F, C, G, E Quá trình duyệt đỉnh diễn sau: Sau thăm đỉnh A, B chưa thăm nên theo cạnh AB ta thăm B, tiếp tục theo cạnh BD tới viếng thăm D Từ D tiếp tục xa hơn, ta quay lại B Từ B, theo BF đến thăm F, từ F xa nên ta quay lại B Tại B, tất khả từ B xem xét nên ta quay lại 10 .Net cung cấp WinForm điều khiển khác qua lớp sở namespace System.Windows.Forms.Windows Form công cụ dùng để tạo ứng dụng Windows, mượn ưu điểm mạnh ngôn ngữ Visual Basic : dễ sử dụng, hỗ trợ mô hình RAD đồng thời kết hợp với tính linh động, hướng đối tượng ngôn ngữ C# Việc tạo ứng dụng Windows trở lên hấp dẫn quen thuộc với lập trình viên.Có hai cách tạo ứng dụng Windows : Dùng soạn mã để gõ mã trực tiếp dùng công cụ kéo thả IDE ( Intergrate Development Enviroment) Ơ em xin giới thiệu công cụ kéo thả để làm việc môi trường phát triển tích hợp IDE, IDE cho phép kéo thảrồi tự động phát sinh mã tương ứng 2.8.2 Sử dụng Visual Studio NET a) Khởi động Tạo ứng dụng cách dùng công cụ Visual Studio Bước 1: Khởi động Visual Studio Start | All Programs | Microsoft Visual Studio | Microsoft Visual Studio Bước 2: Vào menu File | New | Project Bước 3: Khai báo · Mở hộp ToolBox: Menu View | ToolBox chứa control · Mở cửa sổ Properties: Menu View | Properties chứa thuộc tính · Mở cửa sổ Solution Explorer: Menu View | Solution Explorer cửa sổ Project xuất Bước 4: Thiết kế Form – Viết code · Thiết kế form: Nhắp vào View Designer (trong cửa số Solution Explorer) · Viết code: Nhắp vào View Code (trong cửa số Solution Explorer) Bước 5: Để chạy chương trình, nhấn F5 nhắp vào nút Để dừng chương trình, nhấn Shift + F5 nhắp vào nút * Các thao tác với Project / Solution a Tạo Project C1 Vào menu File | New | Project C2 Ctrl + Shift + N C3 Chọn công cụ New Project Standart 37 b Mở Project / Solution: C1 Vào menu File | Open | Project / Solution C2 Ctrl + Shift + O c Lưu Project / Solution C1 Vào menu File | Save All C2 Chọn công cụ Save All Standart d Đóng Solution: Vào menu File | Close Solution 2.8.3 Màn hình giao diện Windows Forms a) Cửa sổ thiết kế Form (Designer): b) Cửa sổ thiết viết code: c) Một số điều khiển C# 38 Bảng 1: Một số điều khiển C# cho phép chọn không chọn Điều khiển Mô tả Form đối tượng cửa sổ chương trình chứa đối tượng khác Label đối tượng dùng để hiển thị văn hình ảnh ( người dùng không sửa ) Textbox dùng để hiển thị nhập liệu từ bàn phím Button nút ấn cho phép click vào thực chức Checkbox Listbox đối tượng cho phép xem chọn liệu dòng Combobox cho phép chọn liệu dòng Groupbox đối tượng chứa đối tượng khác Panel đối tượng chứa đối tượng khác Radio Nút tùy chọn Button Groupbox Sử dụng để nhóm đối tượng 2.9 Mảng – Chuỗi – Ngoại lệ 2.9.1 Array (mảng) * Mảng chiều a) Định nghĩa - Mảng tập hợp có thứ tự đối tượng (objects), tất đối tượng có kiểu liệu - Mảng ngôn ngữ C# sử dụng phương thức thuộc tính Thể mảng C# truy cập phương thức thuộc tính System.Array 39 b) Khai báo mảng: [] ; * Mảng nhiều chiều a) Định nghĩa - Mảng đa chiều mảng mà thành phần mảng khác - Ngôn ngữ C# hỗ trợ hai kiểu mảng đa chiều là: + Mảng đa chiều kích thước + Mảng đa chiều khác kích thước - Trong phạm vi học này, ta khảo sát mảng chiều mà b) Khai báo mảng chiều [ , ] Ví dụ: int[ , ] myRectangularArray ; 2.9.2 String (Chuỗi) Lớp đối tượng String C# xem chuỗi kiểu liệu tức lớp linh hoạt, mạnh mẽ, dễ sử dụng Mỗi đối tượng chuỗi dãy cố định ký tự Unicode 2.9.3 Exception (Ngoại lệ) a) Khái niệm - Exception hiểu bắt giữ lỗi với đoạn mã hợp lệ để không tổn hại đến chương trình - Lỗi nguyên nhân từ người sử dụng; vấn đề không mong đợi khác như: thiếu nhớ, thiếu tài nguyên hệ thống … - Một trình xử lý ngoại lệ khối lệnh chương trình thiết kế xử lý ngoại lệ mà chương trình phát sinh - Xử lý ngoại lệ thực thi trong câu lệnh catch - Các câu lệnh có khả xảy ngoại lệ thực thi câu lệnh try 40 CHƯƠNG 3:CÀI ĐẶT CHƯƠNG TRÌNH 3.1.Một số giao diện kết chạy chương trình 3.1.1 Giao diện chương trình Chương trình thiết kế nhằm mục đích thực công việc mô tả thuật toán tìm kiếm theo chiều sâu chiều rộng đồ thị, viết công cụ lập trình Visualstudio C# gồm có số chức sau: Nhập thông tin vào cho đồ thị cần xét cách sử dụng công cụ tùy chọn nút để chỉnh sửa đỉnh đồ thị, số chức khác như: chọn điểm bắt đầu điểm kết thúc, chọn đỉnh liên kết, tạo 41 Tại giao diện chương trình ta nhập số Đỉnh có tùy vào số đỉnh đồ thị đưa vào Nút Nhập để nhập lại nhập sai Nút Xóa Bảng để xóa thông tin đỉnh lời giải Nút Mô để hiển thị bảng mô thuật toán đồ họa Ví dụ1: Đồ thị có đỉnh liên kết hình 3.1 Hình 3.1 Nhập vào số chọn nút Đỉnh sau liên kết đỉnh với nhau: nhập Đỉnh với đỉnh ( đỉnh không nhập trùng nhau) Bảng nhập vào liên kết theo đồ thị hình 3.1 Đỉnh Với đỉnh Liên kết Chọn nút liên kết Chọn nút liên kết Chọn nút lien kết Chọn nút lien kết Chọn nút lien kết Chọn nút lien kết Sau nhập xong ta nhấn nút Tạo để tạo Sau tạo khung 42 Sau tạo, ta nhập số cần tìm vào ô Đầu, Đích nhấn Tìm để bắt đầu trình tiềm kiếm Kết tìm kiếm hiển thị khung Thông tin đỉnh lời giải Chú ý: Tại giao diện toán tìm kiếm theo chiều sâu chiều rộng cách thức nhập giống 3.1.2 Giao diện tìm kiếm theo chiều rộng (BFS) Chọn nút Kiểm tra để kiểm tra trình tìm kiếm đường xét theo mức đồ thị 43 Kết trình tìm kiếm theo chiều rộng tô màu đỏ Ta thấy kết đường là: -> -> 3.2.3 Giao diện tìm kiếm theo chiều sâu (DFS) Chọn nút kiểm tra để kiểm tra trình tìm kiếm theo chiều sâu, duyệt nhánh đồ thị 44 Kết trình tìm kiếm theo chiều sâu tô màu đỏ Ta thấy kết đường là: -> -> 3.2 Ứng dụng Áp dụng thuật toán tìm kiếm theo chiều sâu chiều rộng tìm đường từ đường tròn Đồng quang (0) lên Bảo tàng dân tộc Việt Nam (5) Trong toán bạn cho biết điểm xuất phát đích đến Hãy tìm đường đến đích số tất đường Giả sử có đồ thị đường hình 3.2 Hình 3.2: Cây đồ thị đường a) Áp dụng giải thuật tìm kiếm theo chiều rộng 45 Kỹ thuật tìm kiếm rông tìm kiếm tất nút mức không gian toán trước chuyển sang nút mức Kỹ thuật tìm kiếm rộng mức thứ không gian toán, theo hướng dẫn luật trọng tài, chẳng hạn “đi từ trái sang phải” Nếu không thấy lời giải mức này, chuyển xuống mức sau để tiếp tục … đến định vị lời giải có Hướng giải: Áp dụng thuật toán tìm kiếm theo chiều rộng ta xét đường kề gần với đường đứng Nếu không tìm thấy tiếp tục xét đường xa Giả sử Đồng quang (0), có đường rẽ kề gần có trường hợp: + Nếu tồn đường Hoàng văn thụ (3), đường Lương ngọc quyến (2), Ngã tư (1) kề với đường Đồng quang (0) chưa xét xét ba đường (nó trở thành đường xét) tiếp tục trình tìm kiếm với đường + Nếu với đường kề với (0) xét (1) (2) (3) coi duyệt xong tiếp tục tìm kiếm từ đường mà chưa đến xa Bảng bước chi tiết thực giải thuật Lần lặp L=Ø Tập đỉnh (u) U €T FASLE FASLE FASLE FASLE FASLE FASLE FASLE FASLE FASLE FASLE FASLE TRUE 46 Danh sách Open(v) 123 45 67 - Danh sách close (L) 123 2345 34567 45678 5678 678 Hình mô trình tìm kiếm Quá trình tìm kiếm là: Vậy ta nên sau: Đường tròn Đông quang (0) -> Ngã tư (1) -> Bảo tàng DTVN (5) b) Áp dụng thuật toán tìm kiếm theo chiều sâu Dùng thuật toán tìm kiếm theoc chiều SÂU tìm đường từ đường tròn Đồng quang (0) lên Bảo tàng dân tộc Việt Nam (5) sử dụng đề hình Hướng giải: Tìm kiếm sâu không gian toán nút tiếp tục đến ngõ cụt đến đích Tại nút có luật tài, chẳng hạn, “đi 47 theo nút cực trái”, hướng dẫn việc tìm Nếu không tiếp được, gọi đến ngõ cụt, hệ thống quay lại mức đồ thị tìm theo hướng khác, chẳng hạn, đến nút “sát nút cực trái” Hành động gọi quay lui Thuật toán tìm kiếm theo chiều sâu hình dung việc khảo sát gốc theo cành được, gặp cành cụt quay lại xét cành chưa qua - Ở bước tổng quát, giả sử đường Lương ngọc quyến(1), có đường rẽ có trường hợp: + Nếu tồn đường Bắc cạn (4) kề với đường Lương ngọc quyến (1) chưa xét xét đường (nó trở thành đường xét) tiếp tục trình tìm kiếm với đường + Nếu với đường kề với (1) xét (1) coi duyệt xong quay trở lại tìm kiếm từ đường mà từ ta đến (1) ( quay lại (0)) Bảng bước chi tiết thực giải thuật Lần lặp L=Ø Tập đỉnh (u) U€T FASLE FASLE FASLE FASLE FASLE FASLE FASLE FASLE FASLE FASLE FASLE TRUE 48 Danh sách Danh sách Open(v) close (L) 123 321 45 5432 67 76543 87654 8765 876 Hình mô trình tìm kiếm theo theo chiều sâu Quá trình tìm kiếm là: Vậy ta nên sau: Đường tròn Đông quang (0) -> Ngã tư (1) -> Bảo tàng DTVN (5) 49 KẾT LUẬN Thông qua việc tìm hiểu nghiên cứu đề tài giúp em có nhìn toàn diện việc ứng dụng trí tuệ nhân tạo vào giải vấn đề thực tế, em nắm bắt kiến thức lập trình, thuật toán để giải vấn đề tìm kiếm theo chiều sâu chiều rộng Nghiêm cứu nguyên lý cách mà thuật toán thực hiện, em hiểu thêm tầm quan trọng thuật toán tìm kiếm mù, tìm kiếm tối ưu đến việc áp dụng giải vấn đề thực tiễn Do hạn chế thời gian nên kiến thức mà em tìm hiểu thiết sót, cần bổ sung Và em tìm hiểu đồ họa ngôn ngữ C# nên chưa thể thành thạo, chưa có kiến thức chuyên sâu Em mong nhận góp ý, hướng dẫn Thầy Cô để em có kiến thức hoàn thiện Một lần em xin chân thành cảm ơn thầy Trần Mạnh Tuấn tận tình bảo em để em hoàn thành đề tài Em xin chân thành cảm ơn! Sinh viên Lý Thị Việt Chung 50 TÀI LIỆU THAM KHẢO [1] Trí tuệnhân tạo Đinh Mạnh Tường Nhà xuất Khoa học kỹthuật, 2002 [2] Giáo trình “Ngôn ngữ Lập trình C#” [3] http://blogthuthuat.com/ [4].http://tailieu.vn/doc/giao-trinh-c-va-net-framework-1245249.html [5] https://www.youtube.com/watch?v=siiTCoPyF60 51 [...]... thuật tìm kiếm rộng là kỹ thuật vét cạn không gian trạng thái bài toán vì vậy sẽ tìm được lời giải nếu có Đường đi tìm được đi qua ít đỉnh nhất Nhược điểm: 18 Tìm kiếm lời giải theo thuật toán đã định trước, do vậy tìm kiếm một cách máy móc; khi không có thông tin hỗ trợ cho quá trình tìm kiếm, không nhận ra ngay lời giải Không phù hợp với không gian bài toán kích thước lớn Đối với loại bài toán. .. Ưu điểm: Nếu bài toán có lời giải, phương pháp tìm kiếm sâu bảo đảm tìm ra lời giải Kỹ thuật tìm kiếm sâu tập trung vào đích, con người cảm thấy hài lòng khi các câu hỏi tập trung vào vấn đề chính Do cách tìm của kỹ thuật này, nếu lời giải ở rất sâu, kỹ thuật tìm sâu sẽ tiết kiệm thời gian Nhược điểm: 15 Tìm sâu khai thác không gian bài toán để tìm lời giải theo thuật toán đơn giản một cách... Giao tiếp với người dùng không thân thiện Do duyệt qua tất cả các nút, việc tìm kiếm không tập trung vào một chủ đề 1.8 So sánh thuật toán tìm kiếm theo chiều sâu và theo chiều rộng Tính hiệu quả Chiều sâu Chiều rộng Hiệu quả khi lời giải nằm sâu Hiệu quả khi lời giải nằm trong cây tìm kiếm và có một gần gốc của cây tìm kiếm phương án chọn hướng đi Hiệu quả của chiến lược chính xác Hiệu quả của chiến... những logic cần thiết để thực hiện những chức năng của nó Ngôn ngữ C# là ngôn ngữ hỗ trợ việc truy cập bộ nhớ trực tiếp sử dụng kiểu con trỏ của C++ và từ khóa cho dấu ngoặc [] trong toán tử C# là ngôn ngữ đơn giản C# là ngôn ngữ hiện đại C# là ngôn ngữ hướng đối tượng C# là ngôn ngữ mạnh mẽ và mềm dẻo C# là ngôn ngữ có ít từ khóa C# là ngôn ngữ hướng module C# sẽ trở nên phổ biến Có 2 kiểu ứng dụng...A Từ A, ta theo cạnh AC tới thăm C, tiếp tục theo cạnh CG tới thăm G Từ G không thể đi xa hơn được nữa nên ta quay lại C Tại C, tất cả các khả năng từ C đã xét nên ta lại quay về A và theo cạnh AE tới thăm đỉnh E Như vậy tất cả các đỉnh của đồ thị đều được duyệt đến 1.6.2 Tìm kiếm theo chiều rộng Cũng với dữ liệu như hình 3, thuật toán tìm kiếm theo chiều rộng bắt đầu thăm đỉnh A, đi theo lần lượt... thái sau: Hình 1.5:Bàn cờ 5x5 1.7.Mã giả các thuật toán được sử dụng 1.7.1 Tìm kiếm theo chiều sâu a) Giải thuật: Sử dụng danh sách Open kiểu LIFO, Close kiểu FIFO Thuật toán tìm kiếm theo chiều sâu được mô tả bởi thủ tục sau: Procedure Depth _First_Search; Begin 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 tìm kiếm thất bại;stop}; 2.2 Loại trạng thái u... thuật toán đơn giản một cách cứng nhắc Trong quá trình tìm nó không có thông tin nào hỗ trợ để phát hiện lời giải Nếu chọn nút ban đầu không thích hợp có thể không dẫn đến đích của bài toán Không phù hợp với không gian bài toán lớn, kỹ thuật tìm kiếm sâu có thể không đến lời giải trong khoảng thời gian vừa phải 1.7.2 Tìm kiếm theo chiều rộng a Giải thuật: Sử dụng danh sách Open và Close kiểu FIFO Procedure... 2.4.4 Toán tử 24 a) Toán tử toán học: + , - , * , / , % b) Toán tử tăng / giảm: += , -= , *= , /= , %= c) Toán tử tăng / giảm 1 đơn vị: ++ , d) Toán tử gán: = e) Toán tử quan hệ: == , != , > , >= , < ,