Theo các mốc phát triển, người ta thấy trí tuệ nhân tạo được sinh ra từ những năm 50 với các sự kiện sau: - Turing được coi là người khai sinh ngành trí tuệ nhân tạo bởi phát hiện của ôn
Trang 1LỜI CẢM ƠN
Lời đầu tiên em xin bày tỏ lòng biết ơn chân thành và sâu sắc tới các thầy, cô giáo trường Đại học sư phạm Hà Nội 2, đặc biệt là các thầy, cô giáo trong khoa Công nghệ Thông tin đã truyền đạt cho em những kiến cần thiết và
bổ ích trong suốt quá trình học tập tại trường Luận văn tốt nghiệp là cơ hội để cho em có thể áp dụng, tổng kết lại những kiến thức mà mình đã học Đồng thời rút ra được những kinh nghiệm thực tế và quý giá trong suốt quá trình thực hiện đề tài Trong thời gian để hoàn thành khóa luận em đã nhận được sự hướng dẫn tận tình của cô Lưu Thị Bích Hương cùng với các thầy, cô giáo và các bạn lớp K35-Tin học đã giúp em hoàn thành tốt khóa luận này Là sinh viên lần đầu nghiên cứu khoa học chắc chắn đề tài của em không tránh khỏi những thiếu sót, vì vậy em rất mong sự đóng góp ý kiến của các thầy, cô giáo
và các bạn để đề tài của em được hoàn thiện Một lần nữa em xin chân thành cảm ơn công lao dạy dỗ chỉ bảo của thầy, cô giáo Kính chúc quý thầy, cô giáo mạnh khỏe, tiếp tục đạt được nhiều thắng lợi trong nghiên cứu khoa học
Trang 2LỜI CAM ĐOAN
Tên em là: LÊ THỊ HẠNH
Sinh viên lớp: K35 - Tin học, khoa Công nghệ Thông tin, trường Đại học sư phạm Hà Nội 2
Em xin cam đoan:
1 Đề tài: "Một số thuật toán tìm đường đi ngắn nhất và xây dựng ứng dụng game Pikachu" là sự nghiên cứu cua riêng em, dưới sự hướng dẫn của cô giáo Th.S Lưu Thị Bích Hương
2 Khóa luận hoàn toàn không sao chép của các tác giả nào khác
Nếu sai em xin hoàn toàn chịu trách nhiệm
Hà Nội, tháng 5 năm 2013
Sinh viên
Trang 3MỤC LỤC
MỞ ĐẦU 1
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 8
1.1 Giới thiệu về ngôn ngữ Visual C# 10
1.2 Lịch sử phát triển của trí tuệ nhân tạo 10
1.3 Tổng quan về khoa học trí tuệ nhân tạo 11
1.4 Các khái niệm cơ bản 12
1.5 Vai trò của trí tuệ nhân tạo 13
1.6 Các kỹ thuật trí tuệ nhân tạo 14
1.7 Một số vấn đề trí tuệ nhân tạo quan tâm 16
CHƯƠNG 2: LÝ THUYẾT ĐỒ THỊ VÀ MỘT SỐ THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT 19
2.1 Lý thuyết đồ thị 19
2.1.1 Định nghĩa đồ thị 19
2.1.2 Định nghĩa đường đi, chu trình, đồ thị liên thông 22
2.2 Một số khái niệm 24
2.2.1 Mở đầu 24
2.2.2 Giải quyết vấn đề bằng phương pháp tìm kiếm 25
2.2.3 Biểu diễn vấn đề trong không gian trạng thái 26
2.2.4 Đường đi ngắn nhất xuất phát từ một đỉnh 27
2.2.5 Tìm kiếm trên đồ thị và/hoặc 28
2.3 Một số thuật toán tìm đường đi ngắn nhất 28
2.3.1 Bài toán tìm đường đi ngắn nhất 28
2.3.2 Thuật toán tìm kiếm theo chiều sâu (Depth First Search - DFS) 29
2.3.3 Thuật toán tìm kiếm theo chiều rộng (Breadth First Search) 32
2.3.4 Thuật toán tìm kiếm sâu dần 35
2.3.4 Thuật toán Dijkstra tìm đường đi ngắn nhất 37
Trang 43.1 Giới thiệu bài toán 41
3.2 Cấu trúc game Pikachu 41
3.3 Cách xây dựng game Pikachu 43
3.3.1 Cơ sở lý thuyết 43
3.3.2 Áp dụng thuật toán tìm kiếm theo chiều rộng 44
3.4 Một số giao diện và kết quả chạy chương trình 46
3.4.1 Giao diện chính của chương trình khi mới tạo 46
3.4.2 Giao diện khi chạy Auto Play 47
3.4.3 Giao diện khi người chơi tự chơi 48
KẾT LUẬN VÀ PHƯƠNG HƯỚNG PHÁT TRIỂN 49
TÀI LIỆU THAM KHẢO 51
Trang 5MỞ ĐẦU
1 Lý do và mục đích chọn đề tài
Ngày nay, cùng với sự phát triển vượt bậc của khoa học kỹ thuật, đặc biệt là sự phát triển Công nghệ Thông tin là một trong những lĩnh vực có nhiều đóng góp thiết thực nhất trong cuộc sống Máy tính điện tử đã và đang trở thành công cụ đắc lực không chỉ giảm nhẹ sức lao động là lao động trí tuệ mà còn trợ giúp cho con người những kiến thức mới trước đây khó hình dung Một trong những ứng dụng của máy tính là lưu trữ dữ liệu giúp cho các nhà quản lý nắm bắt và xử lý tình huống thông tin một cách chính xác, kịp thời và an toàn
Trí tuệ nhân tạo trong lĩnh vực công nghệ thông tin là ngành khoa học nghiên cứu những phương thức để máy tính có khả năng tư duy suy nghĩ như con người Ngoài ra trí tuệ nhân tạo còn là ngành nghiên cứu những phương thức để giúp máy tính làm được những công việc mà tại thời điểm đó nó là những công việc mà con người chưa làm được hay không làm được Một trong những nghiên cứu đó là đưa ra các giải thuật tìm đường đi ngắn nhất, 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ể
Là một sinh viên khoa Công nghệ Thông tin, trường Đại học sư phạm
Hà Nội 2, với mong muốn được nghiên cứu và tìm hiểu sâu hơn về vấn đề này, bắt đầu làm quen với công việc nghiên cứu khoa học em đã chọn đề tài:
“Một số thuật toán tìm đường đi ngắn nhất và xây dựng ứng dụng Game Pikachu” Đề tài được xây dựng trên ngôn ngữ lập trình C# trong bộ Microsoft Visual Studio 2008 với hệ quản trị cơ sở dữ liệu Microsoft SQL Sever 2005
2 Đối tượng và phạm vi nghiên cứu
2.1 Đối tượng nghiên cứu
Tìm hiểu một số thuật toán tìm đường đi ngắn nhất
Trang 62.2 Phạm vi nghiên cứu
- Đề tài tập trung nghiên cứu một số thuật toán tìm đường đi ngắn nhất như: Thuật toán tìm kiếm theo chiều sâu, thuật toán tìm kiếm theo chiều rộng, thuật toán tìm kiếm sâu dần, thuật toán Dijkstra
- Game Pikachu sử dụng thuật toán: Thuật toán tìm kiếm theo chiều rộng
3 Nhiệm vụ nghiên cứu
Tập trung tìm hiểu các vấn đề sau:
- Tìm hiểu về trí tuệ nhân tạo
- Tìm hiểu về lý thuyết đồ thị
- Tìm hiểu bài toán tìm đường đi ngắn nhất
- Tìm hiểu một số thuật toán tìm đường đi ngắn nhất
- Tìm hiểu đường đi ngắn nhất xuất phát từ một đỉnh
- Tìm hiểu ngôn ngữ lập trình C#
- Xây dựng ứng dụng dựa trên ngôn ngữ lập trình C# để mô phỏng
4 Phương pháp nghiên cứu
4.1 Phương pháp nghiên cứu lý luận
Nghiên cứu qua việc đọc sách, báo và các tài liệu liên quan nhằm xây dựng cơ sở lý thuyết của đề tài và các biện pháp cần thiết để giải quyết các vấn đề của đề tài
4.2 Phương pháp chuyên gia
Tham khảo ý kiến các chuyên gia Tin học để có thể thiết kế chương trình phù hợp với yêu cầu thực tiễn, đáp ứng được yêu cầu của người sử dụng 4.3 Phương pháp thực nghiệm
Thông qua quan sát thực tế, yêu cầu của cơ sở, những lý luận được nghiên cứu và kết quả đạt được qua những phương pháp trên, chương trình sẽ được đưa vào chạy thử để từ đó có những điều chỉnh phù hợp
Trang 75 Ý nghĩa khoa học và thực tiễn của đề tài
Bài toán tìm đường đi ngắn nhất là bài toán quan trọng của lý thuyết đồ thị, bài toán tìm được lời giải tối ưu nhất và giải quyết các vấn đề một cách nhanh nhất
Trong các ứng dụng thực tế, bài toán tìm đường đi ngắn nhất có ý nghĩa
to lớn như: Bài toán chọn hành trình tiết kiệm nhất theo tiêu chuẩn khoảng cách, thời gian hoặc chi phí trên một mạng giao thông đường bộ Bài toán chọn một phương pháp tiết kiệm nhất để đưa một hệ thống động lực từ trạng thái xuất phát đến một trạng thái đích Bài toán lập lịch thi công các công đoạn trong một công trình thi công lớn Bài toán lựa chọn đường truyền tin với chi phí nhỏ nhất trong mạng thông tin…
6 Cấu trúc khóa luận
Ngoài phần mở đầu, kết luận và phương hướng phát triển Nội dung của khóa luận bao gồm 3 chương:
Chương 1: Cơ sở lý thuyết
Chương 2: Lý thuyết đồ thị và một số thuật toán tìm đường đi ngắn nhất Chương 3: Xây dựng ứng dụng game Pikachu
Trang 8CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1 Giới thiệu về ngôn ngữ Visual C#
Ngôn ngữ C# khá đơn giản, chỉ khoảng 80 từ khóa và hơn mười mấy kiểu dữ liệu được xây dựng sẵn Tuy nhiên, ngôn ngữ C# có ý nghĩa cao khi
nó thực thi những khái niệm lập trình hiện đại C# bao gồm tất cả những hỗ trợ cho cấu trúc, thành phần component, lập trình hướng đối tượng Những tính chất đó hiện diện trong một ngôn ngữ lập trình hiện đại Và ngôn ngữ C# hội đủ những điều kiện như vậy, hơn nữa nó được xây dựng trên nền tảng của hai ngôn ngữ mạnh nhất là C++ và Java
Ngôn ngữ C# được phát triển bởi đội ngũ kỹ sư của Microsoft, trong
đó người dẫn đầu là Anders Hejlsberg và Scott Wiltamuth Cả hai người này đều là những người nổi tiếng, trong đó Anders Hejlsberg được biết đến là tác giả của Turbo Pascal, một ngôn ngữ lập trình PC phổ biến Và ông đứng đầu nhóm thiết kế Borland Delphi, một trong những thành công đầu tiên của việc xây dựng môi trường phát triển tích hợp (IDE) cho lập trình client/server
Phần cốt lõi hay của bất cứ ngôn ngữ lập trình hướng đối tượng là sự hỗ trợ của nó cho việc định nghĩa và làm việc với những lớp Những lớp thì định nghĩa những kiểu dữ liệu mới, cho phép người phát triển mở rộng ngôn ngữ để tạo mô hình tốt hơn để giải quyết vấn đề Ngôn ngữ C# chứa những
từ khóa cho việc khai báo những kiểu lớp đối tượng mới và những phương thức hay thuộc tính của lớp, và cho việc thực thi đóng gói, kế thừa, và đa hình,
ba thuộc tính cơ bản của bất cứ ngôn ngữ lập trình hướng đối tượng
Trong ngôn ngữ C# mọi thứ liên quan đến khai báo lớp đều được tìm thấy trong phần khai báo của nó Định nghĩa một lớp trong ngôn ngữ C# không đòi hỏi phải chia ra tập tin header và tập tin nguồn giống như trong ngôn ngữ C++ Hơn thế nữa, ngôn ngữ C# hỗ trợ kiểu XML, cho phép chèn các tag XML để phát sinh tự động các document cho lớp
Trang 9C# cũng hỗ trợ giao diện interface, nó được xem như một cam kết với một
lớp cho những dịch vụ mà giao diện quy định Trong ngôn ngữ C#, một lớp chỉ
có thể kế thừa từ duy nhất một lớp cha, tức là không cho đa kế thừa như trong ngôn ngữ C++, tuy nhiên một lớp có thể thực thi nhiều giao diện Khi một lớp thực thi một giao diện thì nó sẽ hứa là nó sẽ cung cấp chức năng thực thi giao diện
Trong ngôn ngữ C#, những cấu trúc cũng được hỗ trợ, nhưng khái niệm
về ngữ nghĩa của nó thay đổi khác với C++ Trong C#, một cấu trúc được giới hạn, là kiểu dữ liệu nhỏ gọn, và khi tạo thể hiện thì nó yêu cầu ít hơn về hệ điều hành và bộ nhớ so với một lớp Một cấu trúc thì không thể kế thừa từ một lớp hay được kế thừa nhưng một cấu trúc có thể thực thi một giao diện
Ngôn ngữ C# cung cấp những đặc tính hướng thành phần (component-oriented), như là những thuộc tính, những sự kiện Lập trình hướng thành phần được hỗ trợ bởi CLR cho phép lưu trữ metadata với mã nguồn cho một lớp Metadata mô tả cho một lớp, bao gồm những phương thức và những thuộc tính của nó, cũng như những sự bảo mật cần thiết và những thuộc tính khác Mã nguồn chứa đựng những logic cần thiết để thực hiện những chức năng của nó Do vậy, một lớp được biên dịch như là một khối self-contained, nên môi trường hosting biết được cách đọc metadata của một lớp và mã nguồn cần thiết mà không cần những thông tin khác để sử dụng nó
Ngôn ngữ C# cũ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ác mã nguồn này là không an toàn (unsafe) Và bộ giải phóng bộ nhớ tự động của CLR
sẽ không thực hiện việc giải phóng những đối tượng được tham chiếu bằng sử dụng con trỏ cho đến khi chúng được giải phóng
Trang 101.2 Lịch sử phát triển của trí tuệ nhân tạo
Lịch sử của trí tuệ nhân tạo cho thấy ngành khoa học này có nhiều kết quả đáng ghi nhận Theo các mốc phát triển, người ta thấy trí tuệ nhân tạo được sinh ra từ những năm 50 với các sự kiện sau:
- Turing được coi là người khai sinh ngành trí tuệ nhân tạo bởi phát hiện của ông về máy tính có thể lưu trữ chương trình và dữ liệu
- Tháng 8/1956 J Mc Carthy, M Minsky, A Newell, Shannon Simon ,… đưa ra khái niệm “trí tuệ nhân tạo”
- Vào khoảng năm 1960 tại Đại học MIT (Massachussets Institure of Technology) ngôn ngữ LISP ra đời, phù hợp với các nhu cầu xử lý đặc trưng của trí tuệ nhân tạo - đó là ngôn ngữ lập trình đầu tiên dùng cho trí tuệ nhân tạo
- Thuật ngữ trí tuệ nhân tạo được dùng đầu tiên vào năm 1961 cũng tại MIT
- Những năm 60 là giai đoạn lạc quan cao độ về khả năng làm cho máy tính biết suy nghĩ Trong giai đoạn này người ta đã được chứng kiến máy chơi
cờ đầu tiên và các chương trình chứng minh định lý tự động Cụ thể:
+ 1961: Chương trình tính tích phân bất định
+ 1963: Các chương trình Heuristics: Chương trình chứng minh các định lý hình học không gian có tên là “tương tự”, chương trình chơi cờ của Samuel, tìm kiếm đường đi có giá thành cực tiểu
+1964: Chương trình giải phương trình đại số sơ cấp, chương trình trợ giúp ELIZA (có khả năng làm việc giống như một chuyên gia phân tích tâm lý)
+ 1966: Chương trình phân tích và tổng hợp tiếng nói
+ 1968: Chương trình điều khiển người máy (Robot) theo đồ án “Mát – tay”, chương trình học nói
- Vào những năm 60, do giới hạn khả năng của các thiết bị, bộ nhớ và đặc biệt là yếu tố thời gian thực hiện nên có sự khó khăn trong việc tổng quát hoá các kết quả cụ thể vào trong một chương trình mềm dẻo thông minh
Trang 11- Vào những năm 70, máy tính với bộ nhớ lớn và tốc độ tính toán nhanh nhưng các phương pháp tiếp cận trí tuệ nhân tạo cũ vẫn thất bại (do sự bùng
nổ tổ hợp trong quá trình tìm kiếm lời giải các bài toán đặt ra)
- Vào cuối những năm 70 một vài kết quả như xử lý ngôn ngữ tự nhiên, biểu diễn tri thức và giải quyết vấn đề Những kết quả đó đã tạo điều kiện cho sản phẩm thương mại đầu tiên của trí tuệ nhân tạo ra đời đó là hệ chuyên gia, được đem áp dụng trong các lĩnh vực khác nhau (hệ chuyên gia là một phần mềm máy tính chứa các thông tin và tri thức về một lĩnh vực cụ thể nào đó, có khả năng giải quyết những yêu cầu của người sử dụng trong một mức độ nào đó,
ở một trình độ như một chuyên gia con người có kinh nghiệm khá lâu năm)
- Một sự kiện quan trọng vào những năm 70 là sự ra đời ngôn ngữ Prolog, tương tự LISP nhưng nó có cơ sở dữ liệu đi kèm
- Vào những năm 80, thị trường các sản phẩm dân dụng đã có khá nhiều sản phẩm ở trình đô cao như: máy giặt, máy ảnh, sử dụng trí tuệ nhân tạo Các hệ thống nhận dạng và xử lý ảnh, tiếng nói
- Những năm 90, các nghiên cứu nhằm vào cài đặt thành phần thông minh trong các hệ thống thông tin, gọi chung là cài đặt trí tuệ nhân tạo, làm rõ hơn các ngành của khoa học trí tuệ nhân tạo và tiến hành các nghiên cứu mới, đặc biệt là nghiên cứu về cơ chế suy lý, về trí tuệ nhân tạo phân tạo, về các mô hình tương tác 1.3 Tổng quan về khoa học trí tuệ nhân tạo
Trong công nghệ thông tin, trí tuệ nhân tạo (Artificial Intelligence) là một ngành mới, nhưng phát triển rất mạnh mẽ và đem lại nhiều kết quả to lớn Con người thường tự cho mình là sinh vật thông minh vì khả năng trí tuệ đóng vai trò quan trọng trong cuộc sống Trong văn học cũng đã từng có những câu chuyện đề cao về trí thông minh của con người
Trí tuệ nhân tạo chỉ mới hình thành từ năm 1956 Tuy nhiên, việc nghiên cứu trí tuệ đã có từ lâu Trên 2000 năm trước, các nhà triết học đã tìm
Trang 12điện tử vào những năm 50 của thế kỷ 20 đã sinh ra khuynh hướng đưa các lĩnh vực nghiên cứu trí tuệ về các vấn đề lý thuyết và thực nghiệm trên máy 1.4 Các khái niệm cơ bản
Trí tuệ con người (Human Intelligence): Cho đến nay chưa có một
định nghĩa chính xác về trí tuệ con người và đã có rất nhiều quan điểm khác nhau Sau đây là một số quan điểm:
- Năm 1950, Alan Turing đã đưa ra các “trắc nghiệm thông minh” để nhận biết máy tính có thông minh hay không Tuy vậy, theo ông tuy máy tính có thể thất bại trong các trắc nghiệm thông minh nhưng nó vẫn có thể thông minh
- Theo quan điểm của Minsky, trí tuệ nhân tạo là một ngành khoa học nhằm nghiên cứu, mô phỏng trên máy tính các hành vi và tư duy thông minh tương tự như con người Nó giúp máy tính có khả năng nhận thức, suy luận và phản ứng Có hai hướng tiếp cận trí tuệ nhân tạo:
+ Dùng máy tính để làm theo quá trình xử lý của con người
+ Thiết kế những máy tính thông minh độc lập với cách suy nghĩ của con người
- Khái niệm trí tuệ theo quan điểm của Turing: Trí tuệ là những gì có thể đánh giá được thông qua các trắc nghiệm thông minh
- Theo từ điển bách khoa toàn thư Webstes định nghĩa Trí tuệ là khả năng: + Phản ứng một cách thích hợp những tình huống mới thông qua hiệu chỉnh hành vi một cách thích đáng
+ Hiểu rõ những mối liên hệ qua lại của các sự kiện của thế giới bên ngoài nhằm đưa ra những hành động phù hợp đạt tới một mục đích nào đó
- Theo nhữngnhà tâm lý học nhận thức thì quá trình hoạt động trí tuệ của con người bao gồm 4 thao tác cơ bản:
+ Xác định tập đích (goals) cần đạt tới
+ Thu thập các sự kiện (facts) và các luật suy diễn (inference rules) để đạt tới tập đích đặt ra
Trang 13+ Thu gọn (pruning) quá trình suy luận nhằm xác định một cách nhanh chóng tập các suy diễn có thể sử dụng được để đạt tới một đích chung nào đó
+ Áp dụng các cơ chế suy diễn (tiến hoặc lùi) cụ thể (inference mechanisms) dựa trên các thao tác thu gọn quá trình suy luận và những sự kiện trung gian mới được tạo ra, để dẫn dắt từ những sự kiện ban đầu đến những đích đã đặt ra
Trí tuệ máy: Cho đến nay cũng không có một định nghĩa chính xác nào
được đưa ra để định nghĩa về trí tuệ máy, chỉ có một vài dấu hiệu quan trọng của trí tuệ máy:
- Trí tuệ máy là khả năng học
- Khả năng mô phỏng các hành vi sáng tạo của con người
- Khả năng trừu tượng hoá, tổng quát hoá và suy diễn
- Khả năng tự giải thích hành vi
- Khả năng thích nghi tình huống mới gồm khả năng thu nạp dữ liệu tích hợp, rút tri thức từ dữ liệu
- Khả năng xử lý các biểu diễn hình thức như (các kí hiệu tượng trưng, danh sách)
- Khả năng vận dụng các tri thức heuristic sẵn có
- Khả năng xử lý các thông tin bất định, không đầy đủ, không chính xác Như vậy trí tuệ máy khác trí tuệ người ở chỗ nó không thể nhìn được một phần hay toàn thể quá trình giải bài toán trong những tình huống mới và không tự sinh ra được các heuristics
1.5 Vai trò của trí tuệ nhân tạo
Trí tuệ nhân tạo bao quát rất nhiều lĩnh vực nghiên cứu hẹp Nó nghiên cứu từ các lĩnh vực tổng quát như máy nhận biết, suy luận logic, đến các bài toán như chơi cờ, chứng minh định lý, tìm kếm đường đi Thường thì các nhà khoa học ở các lĩnh vực khác tìm đến với trí tuệ nhân tạo ở các kỹ thuật hệ
Trang 14thống hoá và tự động hoá các xử lý tri thức cũng như các phương pháp thuộc lĩnh vực mang tính người
Trí tuệ nhân tạo nghiên cứu kỹ thuật làm cho máy tính có thể “suy nghĩ một cách thông minh” và mô phỏng quá trình suy nghĩ của con người khi đưa
ra những quyết định, lời giải Trên cơ sở đó, thiết kế các chương trình cho máy tính để giải quyết bài toán
Sự ra đời và phát triển của trí tuệ nhân tạo đã tạo ra một bước nhảy vọt về chất trong kỹ thuật và kỹ nghệ xử lý thông tin Trí tuệ nhân tạo chính là cơ sở của công nghệ xử lý thông tin mới, độc lập với công nghệ xử lý thông tin truyền thống dựa trên văn bản giấy tờ Điều này được thể hiện qua các mặt sau:
- Nhờ những công cụ hình thức hoá (các mô hình logic ngôn ngữ, logic mờ, ), các tri thức thủ tục và tri thức mô tả có thể biểu diễn được trong máy
Do vậy quá trình giải bài toán được tiến hành hữu hiệu hơn
- Mô hình logic ngôn ngữ đã mở rộng khả năng ứng dụng của máy tính trong lĩnh vực đòi hỏi tri thức chuyên gia ở trình độ cao, rất khó như: Y học, sinh học, địa lý, tự động hóa
- Một số phần mềm trí tuệ nhân tạo thể hiện tính thích nghi và tính mềm dẻo đối với các lớp bài toán thuộc nhiều lĩnh vực khác nhau
- Khi máy tính được trang bị các phần mềm trí tuệ nhân tạo ghép mạng
sẽ cho phép giải quyết những bài toán cỡ lớn và phân tán
1.6 Các kỹ thuật trí tuệ nhân tạo
Có nhiều kỹ thuật nghiên cứu, phát triển ngành khoa học trí tuệ nhân tạo Tuy vậy, các kỹ thuật trí tuệ nhân tạo thường khá phức tạp khi cài đặt cụ thể, lý do là các kỹ thuật này thiên về xử lý các ký hiệu tượng trưng và đòi hỏi phải sử dụng những tri thức chuyên môn thuộc nhiều lĩnh vực khác nhau
Do vậy, các kỹ thuật trí tuệ nhân tạo hướng tới khai thác những tri thức
về lĩnh vực đang quan tâm được mã hoá trong máy sao cho đạt được mức độ tổng quát, dễ hiểu, dễ diễn đạt thông qua ngôn ngữ chuyên môn gần gũi với
Trang 15ngôn ngữ tự nhiên, dễ sửa đổi, hiệu chỉnh, dễ sử dụng, khai thác nhằm thu hẹp các khả năng cần xét để đi tới lời giải cuối cùng
Các kỹ thuật trí tuệ nhân tạo cơ bản bao gồm:
- Lý thuyết giải bài toán và suy diễn thông minh: Lý thuyết giải bài toán cho phép viết các chương trình giải câu đố, chơi các trò chơi thông qua các suy luận mang tính người, các hệ thống chứng minh định lý Ngoài ra các
hệ thống hỏi đáp thông minh còn cho phép lưu trữ và xử lý khối lượng lớn các thông tin
- Lý thuyết tìm kiếm may rủi: Lý thuyết này bao gồm các phương pháp và kỹ thuật tìm kiếm với sự hỗ trợ của thông tin phụ để giải bài toán một cách có hiệu quả
- Các ngôn ngữ về trí tuệ nhân tạo: Để xử lý các tri thức không chỉ sử dụng các ngôn ngữ lập trình dùng cho các xử lý dữ liệu số, mà cần có ngôn ngữ khác Các ngôn ngữ chuyên dụng này cho phép lưu trữ và xử lý thông tin
ký hiệu Một số ngôn ngữ được nhiều người biết đến là IPL.V,LISP, PROLOG
- Lý thuyết thể hiện tri thức và hệ chuyên gia: Trí tuệ nhân tạo là khoa học về thể hiện và sử dụng tri thức Mạng ngữ nghĩa, lược đồ, logic vị
từ, khung là các phương pháp thể hiện tri thức thông dụng Việc gắn liền cách thể hiện và sử dụng tri thức là cơ sở hình thành hệ chuyên gia
- Lý thuyết nhận dạng và xử lý tiếng nói: Giai đoạn phát triển đầu của trí tuệ nhân tạo gắn với lý thuyết nhận dạng Các phương pháp nhận dạng chính gồm: nhận dạng hình học, nhận dạng dùng tâm lý học, nhận dạng theo phương pháp hàm thế, dùng máy nhận dạng Ứng dụng của phương pháp này trong việc nhận dạng chữ viết, âm thanh
- Người máy: Cuối những năm 70, người máy trong công nghiệp đã đạt được nhiều tiến bộ Người máy có bộ phận cảm nhận và các cơ chế hoạt
Trang 16động được nối ghép theo sự điều khiển thông minh Khoa học về cơ học và trí tuệ nhân tạo được tích hợp trong khoa học người máy
- Tâm lý học xử lý thông tin: Các kết quả nghiên cứu của tâm lý học giúp Trí tuệ nhân tạo xây dựng các cơ chế trả lời theo hành vi, có ý thức Giúp cho việc thực hiện các suy diễn mang tính người
- Ngoài ra, xử lý danh sách, kỹ thuật đệ quy, kỹ thuật quay lui và
xử lý cú pháp hình thức là những kỹ thuật cơ bản của tin học truyền thống
có liên quan trực tiếp đến trí tuệ nhân tạo
1.7 Một số vấn đề trí tuệ nhân tạo quan tâm
Khoa học trí tuệ nhân tạo liên quan đến cảm giác, tri giác và cả quá trình tư duy thông qua các hành vi, giao tiếp Trí tuệ nhân tạo có các định hướng nghiên cứu, ứng dụng sau:
- Tìm và nghiên cứu các thủ tục giúp con người tiến hành các hoạt động sáng tạo Công việc sáng tạo được thực hiện trên mô hình theo cấu trúc, chức năng và sử dụng công nghệ thông tin
- Dùng ngôn ngữ tự nhiên Trước hết là ngôn ngữ được dùng để thể hiện tri thức, tiếp thu và chuyển hoá sang dạng có thể xử lý được
- Hình thức hoá các khía cạnh, các hành vi liên quan đến trí tuệ nhân tạo Do vậy có thể xây dựng các bài toán mang tính người và thông minh
Các hoạt động lớn trong trí tuệ nhân tạo bao gồm: chứng minh định lý,
xử lý ngôn ngữ tự nhiên, hiểu tiếng nói, phân tích ảnh và hình, người máy và
hệ chuyên gia Về cài đặt hệ thống, khuynh hướng hiện tại của trí tuệ nhân tạo
là cài đặt các hệ trí tuệ nhân tạo trong các hệ thống khác, đặc biệt là trong các
hệ thống tin học
Những vấn đề chưa được giải quyết trong trí tuệ nhân tạo
Những thành tựu nghiên cứu và ứng dụng các kỹ thuật trí tuệ nhân tạo
đã khẳng định tính thực tiễn của các dự án xây dựng máy tính có khả năng
Trang 17suy nghĩ Tuy vậy trong một số phạm vi, máy tính còn thua xa so với hoạt động của hệ thần kinh con người
Sự khác nhau trong hoạt động giữa máy tính và bộ não con người, điều này thể hiện ưu thế của máy tính so với bộ não người vì khả năng tính toán rất lớn (nhất là trong các chương trình xử lý dữ liệu lớn)
Xử lý song song: Mặc dù công nghệ điện tử hiện đại cho phép xây
dựng các bộ đa xử lý, song máy tính không thể hoạt động song song như bộ não con người được
Khả năng diễn giải: Con người có thể xem xét cùng một vấn đề theo
những phương pháp khác nhau, từ đó diễn giải theo cách dễ hiểu nhất Ngược lại,
sự linh hoạt này không thể mô phỏng được trong các hệ thống trí tuệ nhân tạo
Lôgic rời rạc và tính liên tục: Một thách đố lớn với các hệ thống trí tuệ
nhân tạo là khả năng kết hợp các phương pháp xử lý thông tin trong môi trường liên tục với các thao tác xử lý thông tin rời rạc
Khả năng học: Mặc dù hiện nay máy tính có nhiều tính năng cao
nhưng cũng không thể mô phỏng được hoàn toàn khả năng học giống bộ não con người
Khả năng tự tổ chức: Cho tới nay, người ta chưa thể tạo lập được các
hệ thống trí tuệ nhân tạo có khả năng tự tổ chức, tự điều khiển hoạt động của
nó để thích nghi với môi trường
Những vấn đề đặt ra trong tương lai của trí tuệ nhân tạo
Trong tương lai, những nghiên cứu và ứng dụng của trí tuệ nhân tạo tập trung vào các vấn đề lớn sau:
- Nghiên cứu và thử nghiệm các mạng Neuron, các hệ thống trí tuệ nhân tạo mô phỏng chức năng hoạt động của bộ não với các khả năng học, tự
tổ chức, tự thích nghi, tổng quát hoá, xử lý song song, có khả năng diễn giải,
xử lý thông tin liên tục và rời rạc
Trang 18- Nghiên cứu và tạo lập các hệ thống có giao tiếp thân thiện giữa người
và máy trên cơ sở nghiên cứu nhận thức máy, thu thập và xử lý tri thức, xử lý thông tin hình ảnh, tiếng nói
- Nghiên cứu các phương pháp biểu diễn tri thức và các phương pháp suy diễn thông minh, các phương pháp giải quyết vấn đề đối với những bài toán phụ thuộc không gian, thời gian
Ngày nay, thế giới đang chuyển mình trong những nghiên cứu về trí tuệ nhân tạo Chắc chắn rằng máy tính với trí tuệ như con người sẽ tác động mạnh đến cuộc sống xã hội
Trang 19CHƯƠNG 2: LÝ THUYẾT ĐỒ THỊ VÀ MỘT SỐ THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
2.1 Lý thuyết đồ thị
2.1.1 Định nghĩa đồ thị
Đồ thị là một cấu trúc rời rạc bao gồm các đỉnh và các cạnh nối các đỉnh này Phân biệt các loại đồ thị khác nhau bởi kiểu và số lượng cạnh nối hai đỉnh nào đó của đồ thị Để có thể hình dung được tại sao lại cần đến các loại đồ thị khác nhau, ví dụ sử dụng chúng để mô tả một mạng máy tính Giả
sử có một mạng gồm các máy tính và các kênh điện thoại (gọi tắt là tên thoại) nối các máy tính này, có thể biểu diễn các vị trí đặt máy tính bởi các điểm và các kênh thoại nối chúng bởi các đoạn nối, xem hình 1
Hà Tây Đồng Nai Huế An Giang
cả hai chiều và không có máy tính nào lại được nối với chính nó Sơ đồ mạng
máy tính cho trong hình 1 được gọi là đơn đồ thị vô hướng => đi đến định
nghĩa sau:
Trang 20Trong trường hợp giữa hai máy tính nào đó thường xuyên phải truyền tải nhiều thông tin, phải nối hai máy này bởi nhiều kênh thoại Mạng với đa kênh thoại giữa các máy tính được cho trong hình 2
Hà Tây Đồng Nai Huế An Giang
Định nghĩa 2 Đa đồ thị vô hướng G= (V, E) bao gồm V là tập các đỉnh, và E là họ các cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh Hai cạnh e 1 và e 2 được gọi là cạnh lặp nếu chúng cùng tương ứng với một cặp đỉnh
Hà Tây Đồng Nai Huế An Giang
Hà Nội TPHCM Bình Định
Quãng Ngãi Phú Yên Khánh Hòa
Hình 2.3: Sơ đồ mạng máy tính với kênh thông báo
Rõ ràng mỗi đơn đồ thị đều là đa đồ thị, nhưng không phải đa đồ thị nào cũng là đơn đồ thị, vì trong đa đồ thị có hai hay nhiều hơn cạnh nối một cặp đỉnh nào đó
Trang 21Trong mạng máy tính có thể có những kênh thoại nối một máy tính nào
đó với chính nó (chẳng hạn với mục đích thông báo), mạng như vậy được cho trong hình 3 Như vậy đa đồ thị không thể mô tả được mạng như vậy, bởi vì có những khuyên (cạnh nối một đỉnh với chính nó) Trong trường hợp này chúng ta cần sử dụng đến khái niệm giả đồ thị vô hướng, được định nghĩa như sau:
Định nghĩa 3 Giả đồ thị vô hướng G= (V, E) bao gồm V là tập các đỉnh, và E là họ các cặp không có thứ tự gồm hai phần tử (không nhất thiết phải khác nhau) của V gọi là các cạnh Cạnh e được gọi là khuyến nếu có dạng e= (u, u)
Các kênh thoại trong mạng máy tính có thể chỉ cho phép truyền tin theo một chiều Chẳng hạn trong hình 4 máy chủ ở Hà Nội chỉ có thể nhận tin từ các máy ở địa phương, có một số máy chỉ có thể gửi tin đi, còn các kênh thoại cho phép truyền tin theo cả hai chiều được thay thế bởi hai cạnh có hướng ngược chiều nhau
Hà Tây Đồng Nai Huế An Giang
Hà Nội TPHCM Bình Định
Phú Yên
Khánh Hòa Hình 2.4: Mạng máy tính với các kênh thoại một chiều
Định nghĩa 4 Đơn đồ thị có hướng G= (V,E) bao gồm V là tập các đỉnh và E là tập các cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung
Trang 22Nếu trong mạng có thể có đa kênh thoại một chiều, khi đó sẽ phải sử
dụng đến khái niệm đa đồ thị có hướng:
Định nghĩa 5 Đa đồ thị có hướngG= (V,E) bao gồm V là tập các đỉnh
và E là họ các cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung Hai cung e 1 và e 2 tương ứng với cùng một cặp đỉnh được gọi là cung lặp
2.1.2 Định nghĩa đường đi, chu trình, đồ thị liên thông
Định nghĩa 6 Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyên dương, trên đồ thị vô hướng G= (V,E) là dãy x o , x 1 , , x n-1 , x n
trong đó u=x 0 , v=x n , ( x i , x i+1 ) E , i= 0, 1, 2 , , n-1
Đường đi nói trên còn có thể biểu diễn dưới dạng các cạnh: (x 0 , x 1 ) , (
x 1 , x 2 ), , ( x n-1 , x n )
Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi Đường đi có đỉnh đầu trùng với đỉnh cuối (tức là u=v) được gọi là chu trình Đường đi hay chu trình được gọi là đơn nếu như không có cạnh nào bị lặp lại
Khái niệm đường đi và chu trình trên đồ thị có hướng được định nghĩa hoàn toàn tương tự như trường hợp đồ thị vô hướng, chỉ khác là ta chú ý đến hướng trên các cung
Định nghĩa 7 Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyên dương, trên đồ thị có hướng G= (V,A) là dãy x o , x 1 , , x n-1 , x n
trong đó u=x 0 , v=x n , ( x i , x i+1 ) A , i= 0, 1, 2 , , n-1
Đường đi nói trên còn có thể biểu diễn dưới dạng các cung:
(x 0 , x 1 ) , ( x 1 , x 2 ), , ( x n-1 , x n )
Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi Đường đi có đỉnh đầu trùng với đỉnh cuối (tức là u=v) được gọi là chu trình Đường đi hay chu trình được gọi là đơn nếu như không có cung nào bị lặp lại
Định nghĩa 8 Đồ thị vô hướng G= (V,E) được gọi là liên thông nếu luôn tìm được đường đi giữa hai đỉnh bất kỳ của nó
Trang 23Như vậy hai máy tính bất kỳ trong mạng có thể trao đổi thông tin được
với nhau khi và chỉ khi đồ thị tương ứng với mạng này là đồ thị liên thông
Định nghĩa 9 Ta gọi đồ thị con của đồ thị G= (V,E) là đồ thị
H=(W,F), trong đó W V và FE
Trong trường hợp đồ thị là không liên thông, nó sẽ rẽ ra thành một số
đồ thị con liên thông đôi một không có đỉnh chung Những đồ thị con liên thông như vậy gọi là các thành phần liên thông của đồ thị
Định nghĩa 10 Đỉnh v được gọi là đỉnh rẽ nhánh nếu việc loại bỏ v cùng với các cạnh liên thuộc với nó khỏi đồ thị làm tăng số thành phần liên thông của đồ thị Cạnh e được gọi là cầu nếu việc loại bỏ nó khỏi đồ thị làm tăng số thành phần liên thông của đồ thị
Định nghĩa 11 Đồ thị có hướng G= (V,A) được gọi là liên thông mạnh nếu luôn tìm được đường đi giữa hai đỉnh bất kỳ của nó
Định nghĩa 12 Đồ thị có hướng G=(V,A) được gọi là liên thông yếu nếu đồ thị vô hướng tương ứng với nó là đồ thị vô hướng liên thông
Rõ ràng nếu đồ thị là liên thông mạnh thì nó cũng là liên thông yếu, nhưng điều ngược lại là không luôn đúng
Một câu hỏi đặt ra là khi nào có thể định hướng các cạnh của một đồ thị
vô hướng liên thông để có thể thu được một đồ thị có hướng liên thông mạnh?
Ta sẽ gọi đồ thị như vậy là đồ thị định hướng được Định lý dưới đây sẽ chỉ ra tiêu chuẩn nhận biết một đồ thị có là định hướng được hay không
Định lý 1 Đồ thị vô hướng liên thông là định hướng được khi và chỉ khi mỗi cạnh của nó nằm trên ít nhất một chu trình
Chứng minh: Điều kiện cần, giả sử (u,v) là một cạnh của đồ thị, từ sự tồn tại đường đi có hướng từ u đến v và ngược lại suy ra (u,v) phải nằm trên ít
nhất một chu trình
Điều kiện đủ, thủ tục sau đây cho phép định hướng các cạnh của đồ thị
Trang 24đó trong đồ thị Định hướng các cạnh trên chu trình này theo một hướng đi vòng theo nó Nếu tất các cạnh của đồ thị là đã được định hướng thì kết thúc
thủ tục Ngược lại, C là một cạnh chưa định hướng có chung đỉnh với ít nhất một trong số các cạnh đã định hướng Theo giả thiết tìm được chu trình C chứa cạnh e Định hướng các cạnh chưa được định hướng của C’ theo một
hướng dọc theo chu trình này (không định hướng lại các cạnh đã có hướng) Thủ tục trên sẽ được lặp lại cho đến khi tất cả các cạnh của đồ thị được định hướng Khi đó thu được đồ thị có hướng liên thông mạnh
2.2 Một số khái niệm
2.2.1 Mở đầu
Trong phần này chỉ xét đồ thị có hướng G=(V,E) và |V|=n, |E|=m với các cung được gán trọng số, nghĩa là, mỗi cung (u,v)E được đặt tương ứng
với một số thực a(u,v) gọi là trọng số của nó Đặt a(u,v)=∞, nếu (u,v)E Khi
đó dãy v 0 , v 1 , , v p là một đường đi trên G, thì độ dài của nó được định
Bài toán tìm đường đi ngắn nhất trên đồ thị dưới dạng tổng quát có thể được phát biểu dưới dạng tổng quát như sau: Tìm đường đi có độ dài nhỏ nhất
từ một đỉnh xuất phát sV đến đỉnh cuối (đích) tV Đường đi như vậy sẽ gọi
là đường đi ngắn nhất từ s đến t còn độ dài của nó sẽ kí hiệu là d(s,t) và còn gọi là khoảng cách từ s đến t (khoảng cách định nghĩa như vậy có thể là số âm) Nếu như không tồn tại đường đi từ s đến t thì ta đặt d(s,t)=∞ từ đó ta
thấy chu trình trong đồ thị có độ dài dương, thì trong đường đi ngắn nhất không có đỉnh nào lặp lại (đường đi như thế gọi là đường đi cơ bản)
Trang 25Mặt khác, nếu trong đồ thị có chu trình với độ dài âm (gọi là chu trình âm) thì khoảng cách giữa 1 số cặp đỉnh nào đó của đồ thị có thể là không xác định, bởi vì, bằng cách đi vòng theo chu trình này một số đủ lớn lần, ta có thể chỉ ra đường đi giữa các đỉnh này có độ dài nhỏ hơn bất kì số thực cho trước nào Trong truờng hợp như vậy, có thể đặt vấn đề tìm đường đi cơ bản ngắn nhất, tuy nhiên bài toán đặt ra sẽ trở nên phức tạp hơn rất nhiều, bởi vì nó chứa bài toán xét sự tồn tại đường đi Hamintơn trong đồ thị như là một trường hợp riêng
Trước hết cần chú ý rằng nếu biết khoảng cách từ s đến t, thì đường đi ngắn nhất từ s đến t, trong trường hợp trọng số không âm, có thể tìm một cách dễ dàng Để tìm đường đi, chỉ cần chú ý là đối với cặp đỉnh s,tV tuỳ ý (st) luôn tìm được đỉnh v sao cho:
d(s,t) = d(s,v) + a(v,t)
Thực vậy, đỉnh v như vậy chính là đỉnh đi trước đỉnh t trong đường đi ngắn nhất từ s đến t Tiếp theo có thể tìm được u sao cho
d(s,v)=d(s,u)+a(u,v), Từ giả thiết về tính không âm của các trọng số dễ
dàng suy ra rằng dãy t, v, u Không chứa đỉnh lặp lại và kết thúc ở đỉnh s Rõ ràng dãy thu được xác định đường đi ngắn nhất từ s đến t
2.2.2 Giải quyết vấn đề bằng phương pháp tìm kiếm
Tìm kiếm là một trong những hướng nghiên cứu quan trọng trong trí tuệ nhân tạo Mục đích của trí tuệ nhân tạo là tìm cách giải quyết vấn đề hay bài toán một cách hợp lý, trong khi đó một lớp lớn các bài toán có thể phát biểu và giải quyết dưới dạng tìm kiếm Sau đây là một số các bài toán:
- Trò chơi: Nhiều trò chơi, ví dụ như cờ vua hay Pikachu thực chất là quá trình tìm kiếm nước đi bên trong số mà luật chơi cho phép
- Tìm đường đi: Trong số những đường đi, lựa chọn đường đi tới đích,
có thể thỏa mãn một số tiêu chí nào đó như tiêu chí tối ưu về độ dài, thời gian,