LỜI MỞ ĐẦU Trí tuệ nhân tạo (Artificial Intelligence) có thể được định nghĩa như một ngành của khoa học máy tính liên quan đến việc tự động hoá các hành vi thông minh. AI là một bộ phận của khoa học máy tính và do đó nó phải được đặt trên những nguyên lý lý thuyết vững chắc, có khả năng ứng dụng được của lĩnh vực này. Những nguyên lý này bao gồm các cấu trúc dữ liệu dùng cho biểu diễn tri thức, các thuật toán cần thiết để áp dụng những tri thức đó, cùng các ngôn ngữ và kĩ thuật lập trình dùng cho việc cài đặt chúng. Những đặc điểm của trí tuệ nhân tạo: •Sử dụng máy tính vào suy luận trên các ky hiệu, nhận dạng, học và một số hình thức suy luận khác. •Tập trung vào một số vấn đề không thích hợp với các lời giải mang tính thuật toán. Điều này dựa trên cơ sở tin tường vào phép tìm kiếm heuristic như một kỹ thuật giải quuyết vấn đề AI. •Sự quan tâm đến các kỹ thuật giải quyết vấn đề bằng những thông tin không chính xác, thiếu hụt hoặc được định nghĩa một cách nghèo nàn, và sự sử dụng các hình thức biểu diễn cho phép người lập trình bù đắp được những thiếu sót này. •Suy luận những đặc trưng định tính quan trọng của tình huống. •Một cố gắng để giải quyết những vướng mắv về ý nghĩa, ngữ nghĩa cũng như là hình thức cú pháp. •Những câu trả lời không chính xác cũng như tối ưu, nhưng trong một chừng mực nào đó được coi là “đủ”. Đây là kết quả của sự tin cậy cốt yếu vào các phương pháp giái quyết vấn đề theo kiểu heuristic trong những tình huống mà kết quả tối ưu hoặc chính xác là quá tốn kém hoặc không thể thực hiện được, •Sử dụng những khối lượng lớn tri thức chuyên ngành trong giải quyết vấn đề. Đây là cơ sở cho các hệ chuyên gia. •Sử dụng các tri thức cấp meta (meta-level knowledge) để tăng thêm sự tinh vi cho viêc kiểm soát các chiến lược giải quyết vấn đề. Tuy rằng đây là một vấn đề rất khó khăn, được chú ý trong một số khá ít các ậê thống gần đây, nó đã nổi bật lên như một lĩnh vực nghiên cứu chủ yếu. Mục tiêu nghiên cứu của ngành AI: •Xây dựng lý thuyết về thông minh để giải thích các hoạt động thông minh •Tìm hiểu cơ chế sự thông minh của con người - Cơ chế lưu trữ tri thức. - Cơ chế khai thác tri thức. •Xây dựng cơ chế hiện thực sự thông minh. •Áp dụng các hiểu biết này vào các máy móc phục vụ con người.
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
-o0o-ĐỒ ÁN MÔN TRÍ TUỆ NHÂN TẠO
Đề tài: Không gian trạng thái được mô tả là bài toán người
đưa thư Hãy xây dựng chương trình cho phép tìm kiếm đường đi tốt nhất theo giải thuật tìm kiếm Greedy best first search
Thầy giáo hướng dẫn: Ngô Hữu Phúc
Họ và tên: Trần Thị Hồng Diệp
Lớp: Tin học 5A
Trang 2LỜI MỞ ĐẦU
Trí tuệ nhân tạo (Artificial Intelligence) có thể được định nghĩa như một ngành của khoa học máy tính liên quan đến việc tự động hoá các hành vi thông minh AI là một bộ phận của khoa học máy tính và do đó nó phải được đặt trên những nguyên lý lý thuyết vững chắc, có khả năng ứng dụng được của lĩnh vực này Những nguyên lý này bao gồm các cấu trúc dữ liệu dùng cho biểu diễn tri thức, các thuật toán cần thiết để áp dụng những tri thức đó, cùng các ngôn ngữ và
kĩ thuật lập trình dùng cho việc cài đặt chúng.
Những đặc điểm của trí tuệ nhân tạo:
Sử dụng máy tính vào suy luận trên các ky hiệu, nhận dạng, học và một số hình thức suy luận khác.
Tập trung vào một số vấn đề không thích hợp với các lời giải mang tính thuật toán Điều này dựa trên cơ sở tin tường vào phép tìm kiếm heuristic như một kỹ thuật giải quuyết vấn đề AI.
Sự quan tâm đến các kỹ thuật giải quyết vấn đề bằng những thông tin không chính xác, thiếu hụt hoặc được định nghĩa một cách nghèo nàn, và
sự sử dụng các hình thức biểu diễn cho phép người lập trình bù đắp được những thiếu sót này.
Suy luận những đặc trưng định tính quan trọng của tình huống.
Một cố gắng để giải quyết những vướng mắv về ý nghĩa, ngữ nghĩa cũng như là hình thức cú pháp.
Những câu trả lời không chính xác cũng như tối ưu, nhưng trong một chừng mực nào đó được coi là “đủ” Đây là kết quả của sự tin cậy cốt yếu vào các phương pháp giái quyết vấn đề theo kiểu heuristic trong những
Trang 3tình huống mà kết quả tối ưu hoặc chính xác là quá tốn kém hoặc không thể thực hiện được,
Sử dụng những khối lượng lớn tri thức chuyên ngành trong giải quyết vấn
đề Đây là cơ sở cho các hệ chuyên gia.
Sử dụng các tri thức cấp meta (meta-level knowledge) để tăng thêm sự tinh vi cho viêc kiểm soát các chiến lược giải quyết vấn đề Tuy rằng đây
là một vấn đề rất khó khăn, được chú ý trong một số khá ít các ậê thống gần đây, nó đã nổi bật lên như một lĩnh vực nghiên cứu chủ yếu.
Mục tiêu nghiên cứu của ngành AI:
Xây dựng lý thuyết về thông minh để giải thích các hoạt động thông minh
Tìm hiểu cơ chế sự thông minh của con người
- Cơ chế lưu trữ tri thức.
- Cơ chế khai thác tri thức.
Xây dựng cơ chế hiện thực sự thông minh.
Áp dụng các hiểu biết này vào các máy móc phục vụ con người
Trang 4GIỚI THIỆU GIẢI THUẬT
Giống như hầu hết các ngành khoa học khác, AI cũng được phân thành những ngành con Trong khi chia sẻ một tiếp cận giải quyết vấn đề cơ bản, các ngành con này có các mối quan tâm đến các ứng dụng khác nhau để giải quyết các bài toán khác nhau
Nhiều vấn đề bài toán phức tạp đều có dạng "tìm đường đi trong đồ thị" hay nói
một cách hình thức hơn là "xuất phát từ một đỉnh của một đồ thị, tìm đường đi hiệu
quả nhất đến một đỉnh nào đó" Một phát biểu khác thường gặp của dạng bài toán
này là:
Cho trước hai trạng thái T0 và TG hãy xây dựng chuỗi trạng thái T0, T1, T2, , Tn-1,
Tn = TG sao cho:
thỏa mãn một điều kiện cho trước (thường là nhỏ nhất)
Trong đó, Ti thuộc tập hợp S (gọi là không gian trạng thái – state space) bao gồm
tất cả các trạng thái có thể có của bài toán và cost(Ti-1, Ti) là chi phí để biến đổi từ
trạng thái Ti-1 sang trạng thái Ti Dĩ nhiên, từ một trạng thái Ti ta có nhiều cách để biến đổi sang trạng thái Ti+1 Khi nói đến một biến đổi cụ thể từ Ti-1 sang Ti ta sẽ
dùng thuật ngữ hướng đi (với ngụ ý nói về sự lựa chọn)
Trang 5Hình: Mô hình chung của các vấn đề-bài toán phải giải quyết bằng phương pháp tìm kiếm lời
giải Không gian tìm kiếm là một tập hợp trạng thái - tập các nút của đồ thị Chi phí cần thiết để chuyển từ trạng thái T này sang trạng thái Tk được biểu diễn dưới dạng các con số nằm trên cung nối giữa hai nút tượng trưng cho hai trạng thái
Đa số các bài toán thuộc dạng mà chúng ta đang mô tả đều có thể được biểu diễn dưới dạng đồ thị Trong đó, một trạng thái là một đỉnh của đồ thị Tập hợp S bao gồm tất cả các trạng thái chính là tập hợp bao gồm tất cả đỉnh của đồ thị Việc biến đổi từ trạng thái Ti-1 sang trạng thái Ti là việc đi từ đỉnh đại diện cho Ti-1 sang đỉnh đại diện cho Ti theo cung nối giữa hai đỉnh này
Bài toán:
Hãy tìm một hành trình cho một người đưa thư đi qua n điểm khác nhau, mỗi điểm
đi qua một lần và trở về điểm xuất phát sao cho tổng chiều dài đoạn đường cần đi
là ngắn nhất Giả sử rằng có con đường nối trực tiếp từ giữa hai điểm bất kỳ Tất nhiên ta có thể giải bài toán này bằng cách liệt kê tất cả con đường có thể đi, tính chiều dài của mỗi con đường đó rồi tìm con đường có chiều dài ngắn nhất Tuy nhiên, cách giải này lại có độ phức tạp 0(n!) (một hành trình là một hoán vị của n điểm, do đó, tổng số hành trình là số lượng hoán vị của một tập n phần tử là n!) Do đó, khi số đại lý tăng thì số con đường phải xét sẽ tăng lên rất nhanh Một cách giải đơn giản hơn nhiều và thường cho kết quả tương đối tốt là dùng một thuật giải Heuristic ứng dụng nguyên lý Greedy
Tư tưởng của giải thuật Greedy best first search (GBFS) như sau: Trong khoa học máy tính, Greedy best first search (GBFS) là 1 thuật toán tìm kiếm trong đồ thị Thuật toán này tìm một đường đi từ 1 nút khởi đầu tới 1 nút cho trước (hoặc tới 1 nút thỏa mãn 1 điều kiện đích) Thuật toán này sử dụng 1 đánh giá f(n)=h(n) (heuristic) để xếp loại từng nút theo ước lượng về tuyến đường tốt nhất đi qua nút đó Thuật toán này duyệt các nút theo thứ tự của đánh giá heurristic này Khác với phương pháp tìm kiếm tốt nhất đầu tiên, phương pháp này sử dụng hàm đánh giá đến trạng thái đích GBFS chọn node được cho là gần với node đích
Trang 6Bạn có thể quan sát hình sau để thấy được quá trình chọn lựa Theo nguyên lý Greedy, ta lấy tiêu chuẩn hành trình ngắn nhất của bài toán làm tiêu chuẩn cho
chọn lựa cục bộ Ta hy vọng rằng, khi đi trên n đoạn đường ngắn nhất thì cuối
cùng ta sẽ có một hành trình ngắn nhất Điều này không phải lúc nào cũng đúng.
Với điều kiện trong hình tiếp theo thì thuật giải cho chúng ta một hành trình có chiều dài là 14 trong khi hành trình tối ưu là 13 Kết quả của thuật giải Heuristic trong trường hợp này chỉ lệch 1 đơn vị so với kết quả tối ưu Trong khi đó, độ phức tạp của thuật giải Heuristic này chỉ là 0(n2)
Hình: Giải bài toán sử dụng nguyên lý Greedy
Trang 7Nguyên lý tham lam (Greedy): Lấy tiêu chuẩn tối ưu (trên phạm vi toàn cục) của bài toán để làm tiêu chuẩn chọn lựa hành động cho phạm vi cục bộ của từng bước (hay từng giai đoạn) trong quá trình tìm kiếm lời giải
Nguyên lý thứ tự: Thực hiện hành động dựa trên một cấu trúc thứ tự hợp lý của không gian khảo sát nhằm nhanh chóng đạt được một lời giải tốt
Đánh giá Greedy best first search (GBFS)
Đủ? Không – Có thể vào vòng lặp quẩn.
Độ phức tạp thời gian? O(bm), Nếu hàm heuristic xấp xỉ tốt trong thực tế thì thời gian chạy sẽ giảm đi rất nhiều
Độ phức tạp không gian? O(bm) – Lưu trữ tất cả các Nodes.
Tối ưu? Không.
Trang 8GIỚI THIỆU CHƯƠNG TRÌNH
Các nút chức năng: Thêm nhà, Tạo mới, Thêm giá.
Khi bắt đầu chương trình, ta chọn nút Tạo mới để tạo số nút theo yêu cầu người kiểm tra và nhập giá cho đoạn đường giữa các thành phố Kết quả thu được như form sau:
Trang 102 Giới thiệu chương trình:
{
Trang 11diem[i] = new Point(dt.Nha[i].Location.X + dt.Nha[i].Height /
2, dt.Nha[i].Location.Y + dt.Nha[i].Width / 2);
}
tb[i, j].Text = dt.Mangcost[i, j].ToString();
Trang 12StreamReader sr = new StreamReader("dt1.txt");
Trang 13private void xoadulieu()
StreamWriter sw = new StreamWriter("dt2.txt");
{
{
Trang 14temp = temp + tb[i, j].Text + " | ";
// Hàm lưu giá sau khi thêm nhà
StreamReader sr = new StreamReader("dt2.txt");
{
dauvao[i] = sr.ReadLine();
}
sr.Close();
Trang 15StreamWriter sw = new StreamWriter("dt2.txt");
Trang 16for (int i = 0; i < dt.Sonha; i++)
{
{
tb[i, j].Text = dt.Mangcost[i, j].ToString();
Trang 17_mangcost = new int[_sonha, _sonha];
_nha = new nha[_sonha];
_nha[i] = new nha(i);
_nha[i].Location = new Point(Convert.ToInt16(mangkytu[0]) _nha[i].Height / 2, Convert.ToInt16(mangkytu[1]) - _nha[i].Width / 2);
Trang 18}
sr.Close();
StreamReader sr2 = new StreamReader(_patch_cost);
for (int i = 0; i < _sonha; i++)
_mangcost = new int[_sonha, _sonha];
_nha = new nha[_sonha];
Trang 19_nha[i] = new nha(i);
_nha[i].Location = new Point(Convert.ToInt16(mangkytu[0]) _nha[i].Height / 2, Convert.ToInt16(mangkytu[1]) - _nha[i].Width / 2);
Trang 22diem = new Point[dt.Sonha];
{
2, dt.Nha[i].Location.Y + dt.Nha[i].Width / 2);
}
tb[i, j].Text = dt.Mangcost[i, j].ToString();
Trang 23
{
dothi dt = new dothi("dt1.txt", "dt2.txt");
if (textBox1.Text == "")
gr.tinhtoan(0);
dothi dt = new dothi("dt1.txt", "dt2.txt");
if (textBox1.Text == "")
gr.tinhtoan(0);
Trang 24gr.tinhtoan(Convert.ToInt16(textBox1.Text));
{
next:
dohoa.DrawLine(to, diem[gr.KQ[i]], diem[gr.KQ[i + 1]]);
Trang 26int danhdau = dauvao;
Trang 27}
}
}