Báo cáo đồ án trí tuệ nhân tạo : 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 cho Không gian trạng thái bài toán người đưa thư

27 1.6K 13
Báo cáo đồ án trí tuệ nhân tạo : 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 cho Không gian trạng thái bài toán người đưa thư

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

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

Thông tin tài liệu

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.

HỌC VIỆN KỸ THUẬT QUÂN SỰ KHOA 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 mô tả tốn người đưa thư Hãy xây dựng chương trình cho phép tìm kiếm đường tố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ọ tên: Trần Thị Hồng Diệp Lớp: Tin học 5A Trần Thị Hồng Diệp học 5A Tin Thuật tốn Tìm Kiếm Greedy best first search (GBFS) LỜI MỞ ĐẦU  Trí tuệ nhân tạo (Artificial Intelligence) định nghĩa ngành khoa học máy tính liên quan đến việc tự động hố hành vi thông minh AI phận khoa học máy tính phải đặt nguyên lý lý thuyết vững chắc, có khả ứng dụng lĩnh vực Những nguyên lý bao gồm cấu trúc liệu dùng cho biểu diễn tri thức, thuật toán cần thiết để áp dụng tri thức đó, ngơn ngữ kĩ thuật lập trình dùng cho việc cài đặt chúng Những đặc điểm trí tuệ nhân tạo: • Sử dụng máy tính vào suy luận ky hiệu, nhận dạng, học số hình thức suy luận khác • Tập trung vào số vấn đề khơng thích hợp với lời giải mang tính thuật tốn Điều dựa sở tin tường vào phép tìm kiếm heuristic kỹ thuật giải quuyết vấn đề AI • Sự quan tâm đến kỹ thuật giải vấn đề thơng tin khơng xác, thiếu hụt định nghĩa cách nghèo nàn, sử dụng hình thức biểu diễn cho phép người lập trình bù đắp thiếu sót • Suy luận đặc trưng định tính quan trọng tình • Một cố gắng để giải vướng mắv ý nghĩa, ngữ nghĩa hình thức cú pháp • Những câu trả lời khơng xác tối ưu, chừng mực coi “đủ” Đây kết tin cậy cốt yếu vào phương pháp giái vấn đề theo kiểu heuristic Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) tình mà kết tối ưu xác q tốn khơng thể thực được, • Sử dụng khối lượng lớn tri thức chuyên ngành giải vấn đề Đây sở cho hệ chuyên gia • Sử dụng tri thức cấp meta (meta-level knowledge) để tăng thêm tinh vi cho viêc kiểm soát chiến lược giải vấn đề Tuy vấn đề khó khăn, ý số ậê thống gần đây, bật lên lĩnh vực nghiên cứu chủ yếu Mục tiêu nghiên cứu ngành AI: • Xây dựng lý thuyết thơng minh để giải thích hoạt động thơng minh • Tìm hiểu chế thông minh người - Cơ chế lưu trữ tri thức - Cơ chế khai thác tri thức • Xây dựng chế thực thơng minh • Áp dụng hiểu biết vào máy móc phục vụ người Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) GIỚI THIỆU GIẢI THUẬT  Giống hầu hết ngành khoa học khác, AI phân thành ngành Trong chia sẻ tiếp cận giải vấn đề bản, ngành có mối quan tâm đến ứng dụng khác để giải toán khác Nhiều vấn đề tốn phức tạp có dạng "tìm đường đồ thị" hay nói cách hình thức "xuất phát từ đỉnh đồ thị, tìm đường hiệu đến đỉnh đó" Một phát biểu khác thường gặp dạng toán là: Cho trước hai trạng thái T0 TG xây dựng chuỗi trạng thái T 0, T1, T2, , Tn-1, Tn = TG cho: thỏa mãn điều kiện cho trước (thường nhỏ nhất) Trong đó, Ti thuộc tập hợp S (gọi khơng gian trạng thái – state space) bao gồm tất trạng thái có tốn cost(Ti-1, Ti) chi phí để biến đổi từ trạng thái Ti-1 sang trạng thái Ti Dĩ nhiên, 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 biến đổi cụ thể từ Ti -1 sang Ti ta dùng thuật ngữ hướng (với ngụ ý nói lựa chọn) Hình: Mơ hình chung vấn đề-bài tốn phải giải phương pháp tìm kiếm lời giải Khơng gian tìm kiếm tập hợp trạng thái - tập nút đồ thị Chi phí cần thiết để Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) chuyển từ trạng thái T sang trạng thái Tk biểu diễn dạng số nằm cung nối hai nút tượng trưng cho hai trạng thái Đa số toán thuộc dạng mà mơ tả biểu diễn dạng đồ thị Trong đó, trạng thái đỉnh đồ thị Tập hợp S bao gồm tất trạng thái tập hợp bao gồm tất đỉnh đồ thị Việc biến đổi từ trạng thái Ti-1 sang trạng thái Ti việc từ đỉnh đại diện cho Ti -1 sang đỉnh đại diện cho Ti theo cung nối hai đỉnh Bài tốn: Hãy tìm hành trình cho người đưa thư qua n điểm khác nhau, điểm qua lần trở điểm xuất phát cho tổng chiều dài đoạn đường cần ngắn Giả sử có đường nối trực tiếp từ hai điểm Tất nhiên ta giải tốn cách liệt kê tất đường đi, tính chiều dài đường tìm đường có chiều dài ngắn Tuy nhiên, cách giải lại có độ phức tạp 0(n!) (một hành trình hốn vị n điểm, đó, tổng số hành trình số lượng hốn vị tập n phần tử n!) Do đó, số đại lý tăng số đường phải xét tăng lên nhanh Một cách giải đơn giản nhiều thường cho kết tương đối tốt dùng thuật giải Heuristic ứng dụng nguyên lý Greedy Tư tưởng giải thuật Greedy best first search (GBFS) sau: Trong khoa học máy tính, Greedy best first search (GBFS) thuật tốn tìm kiếm đồ thị Thuật tốn tìm đường từ nút khởi đầu tới nút cho trước (hoặc tới nút thỏa mãn điều kiện đích) Thuật tốn sử dụng đánh giá f(n)=h(n) (heuristic) để xếp loại nút theo ước lượng tuyến đường tốt qua nút Thuật tốn duyệt nút theo thứ tự đánh giá heurristic Khác với phương pháp tìm kiếm tốt đầu tiên, phương pháp sử dụng hàm đánh giá đến trạng thái đích GBFS chọn node cho gần với node đích để phát triển Từ điểm khởi đầu, ta liệt kê tất quãng đường từ điểm xuất phát n đại lý chọn theo đường ngắn Khi đến đại lý, chọn đến đại lý theo nguyên tắc Nghĩa liệt kê tất đường từ đại lý ta đứng đến đại lý chưa đến Chọn đường ngắn Lặp lại trình lúc khơng cịn đại lý để Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) Bạn quan sát hình sau để thấy trình chọn lựa Theo nguyên lý Greedy, ta lấy tiêu chuẩn hành trình ngắn toán làm tiêu chuẩn cho chọn lựa cục Ta hy vọng rằng, n đoạn đường ngắn cuối ta có hành trình ngắn Điều khơng phải lúc Với điều kiện hình thuật giải cho hành trình có chiều dài 14 hành trình tối ưu 13 Kết thuật giải Heuristic trường hợp lệch đơn vị so với kết tối ưu Trong đó, độ phức tạp thuật giải Heuristic 0(n2) Hình: Giải toán sử dụng nguyên lý Greedy Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) Nguyên lý tham lam (Greedy): Lấy tiêu chuẩn tối ưu (trên phạm vi toàn cục) toán để làm tiêu chuẩn chọn lựa hành động cho phạm vi cục bước (hay giai đoạn) trình tìm kiếm lời giải Nguyên lý thứ tự: Thực hành động dựa cấu trúc thứ tự hợp lý không gian khảo sát nhằm nhanh chóng đạ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 thực tế thời gian chạy giảm nhiều Độ phức tạp không gian? O(bm) – Lưu trữ tất Nodes Tối ưu? Không Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) GIỚI THIỆU CHƯƠNG TRÌNH  Chương trình DEMO Giao diện: Form Nhập gồm phần chính: • Khu vực vẽ nút • Kết tìm kiếm • 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 để tạo số nút theo yêu cầu người kiểm tra nhập giá cho đoạn đường thành phố Kết thu form sau: Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) Form Giải gồm phần chính: • Khu vực vẽ nút • Kết tìm kiếm • Các nút chức năng: Điểm đầu, Giải, Giải bước Trần Thị Hồng Diệp Tin học 5A Thuật toán Tìm Kiếm Greedy best first search (GBFS) Giới thiệu chương trình: // Hàm hiển thị private void hienthi() { // Hiển thị nhà: dt = new dothi("dt1.txt"); for (int i = 0; i < dt.Sonha; i++) { this.Controls.Add(dt.Nha[i]); } //Hiên thị giá đường dạng textbox diem = new Point[dt.Sonha]; for (int i = 0; i < dt.Sonha; i++) { Trần Thị Hồng Diệp Tin học 5A Thuật toán Tìm Kiếm Greedy best first search (GBFS) private void xoadulieu() { StreamWriter sw1 = new StreamWriter("dt1.txt"); sw1.Write(""); sw1.Close(); StreamWriter sw2 = new StreamWriter("dt2.txt"); sw2.Write(""); sw2.Close(); } // Hàm lưu giá private void luugia() { for (int i = 0; i < dt.Sonha; i++) { for (int j = i+1; j < dt.Sonha; j++) { tb[j, i].Text = tb[i, j].Text; } } StreamWriter sw = new StreamWriter("dt2.txt"); string temp = null; for (int i = 0; i < dt.Sonha; i++) { for (int j = 0; j < dt.Sonha; j++) { Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) temp = temp + tb[i, j].Text + " | "; } temp = temp + "\r\n"; } sw.WriteLine(temp); sw.Close(); } // Hàm lưu giá sau thêm nhà private void luugiasauthemnha() { string temp = null; if (dt.Sonha == 0) { StreamWriter sw = new StreamWriter("dt2.txt"); temp = "00 |"; sw.WriteLine(temp); sw.Close(); } else { StreamReader sr = new StreamReader("dt2.txt"); string[] dauvao = new string[dt.Sonha - 1]; for (int i = 0; i < dt.Sonha - 1; i++) { dauvao[i] = sr.ReadLine(); } sr.Close(); Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) StreamWriter sw = new StreamWriter("dt2.txt"); for (int i = 0; i < dt.Sonha - 1; i++) { temp = temp + dauvao[i] + " | 00 |"; temp = temp + "\r\n"; } for (int i = 0; i < dt.Sonha; i++) { temp = temp + "00 | "; } sw.WriteLine(temp); sw.Close(); } } private void themtb() { tb = new TextBox[dt.Sonha, dt.Sonha]; for (int i = 0; i < dt.Sonha; i++) { for (int j = 0; j < dt.Sonha; j++) { tb[i, j] = new TextBox(); tb[i, j].Text = "0"; } } Trần Thị Hồng Diệp Tin học 5A Thuật toán Tìm Kiếm Greedy best first search (GBFS) for (int i = 0; i < dt.Sonha; i++) { for (int j = i + 1; j < dt.Sonha; j++) { tb[i, j].Size = new Size(23, 18); tb[i, j].Text = dt.Mangcost[i, j].ToString(); tb[i, j].Location = new Point((diem[i].X + diem[j].X) / 2, (diem[i].Y + diem[j].Y) / 2); this.Controls.Add(tb[i, j]); } } } private void Form1_Load(object sender, EventArgs e) { hienthi(); } private void Form1_Paint(object sender, PaintEventArgs e) { Graphics dohoa = this.CreateGraphics(); Pen to = new Pen(Color.Red, 2); for (int i = 0; i < dt.Sonha; i++) { for (int j = i + 1; j < dt.Sonha; j++) { dohoa.DrawLine(to,diem[i],diem[j]); } } Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) } private void button1_Click(object sender, EventArgs e) { luugia(); } // Hàm lưu tọa độ nhà private void readcost(string _patch, string _patch_cost) { StreamReader sr = new StreamReader(_patch); _sonha = Convert.ToInt16(sr.ReadLine()); _mangcost = new int[_sonha, _sonha]; _nha = new nha[_sonha]; string tuvao; string[] mangkytu = null; string[] tungancach = { " | " }; string[] daungan = { "," }; sr.ReadLine(); for (int i = 0; i < _sonha; i++) { tuvao = sr.ReadLine().ToString(); mangkytu = null; mangkytu = tuvao.Split(daungan, StringSplitOptions.RemoveEmptyEntries); _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); Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) } sr.Close(); StreamReader sr2 = new StreamReader(_patch_cost); for (int i = 0; i < _sonha; i++) { tuvao = sr2.ReadLine().ToString(); mangkytu = null; mangkytu = tuvao.Split(tungancach, StringSplitOptions.RemoveEmptyEntries); for (int j = 0; j < _sonha; j++) { _mangcost[i, j] = Convert.ToInt16(mangkytu[j]); } } sr2.Close(); } private void readcost(string _patch) { StreamReader sr = new StreamReader(_patch); _sonha = Convert.ToInt16(sr.ReadLine()); _mangcost = new int[_sonha, _sonha]; _nha = new nha[_sonha]; string tuvao; string[] mangkytu = null; string[] tungancach = { " | " }; string[] daungan = { "," }; Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) sr.ReadLine(); for (int i = 0; i < _sonha; i++) { tuvao = sr.ReadLine().ToString(); mangkytu = null; mangkytu = tuvao.Split(daungan, StringSplitOptions.RemoveEmptyEntries); _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); } sr.Close(); } } } // Hàm Nhập private void nhậpToolStripMenuItem_Click(object sender, EventArgs e) { foreach (Form frm in this.MdiChildren) { frm.Close(); } Form_nhap fe = new Form_nhap(); fe.MdiParent = this; fe.Show(); Trần Thị Hồng Diệp Tin học 5A Thuật toán Tìm Kiếm Greedy best first search (GBFS) nhap.Enabled = false; giai.Enabled = true; } // Hàm Giải private void giảiToolStripMenuItem_Click(object sender, EventArgs e) { foreach (Form frm in this.MdiChildren) { frm.Close(); } Form_giai fr = new Form_giai(); fr.MdiParent = this; fr.Show(); nhap.Enabled = true; giai.Enabled = false; } } } // private void Form1_MouseDown(object sender, MouseEventArgs e) { if (checkBox1.Checked) { xoahienthi(); luunha(e.X, e.Y); Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) dt = new dothi("dt1.txt"); hienthi(); this.Refresh(); } } private void button2_Click(object sender, EventArgs e) { xoahienthi(); xoadulieu(); dt = new dothi(); checkBox1.Checked = true; hienthi(); this.Refresh(); } } } // Hàm hiển thị private void hienthi() { // Hiển thị nhà: dt = new dothi("dt1.txt","dt2.txt"); for (int i = 0; i < dt.Sonha; i++) { this.Controls.Add(dt.Nha[i]); } //Hiên thị giá đường dạng textbox Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) diem = new Point[dt.Sonha]; for (int i = 0; i < dt.Sonha; i++) { diem[i] = new Point(dt.Nha[i].Location.X + dt.Nha[i].Height / 2, dt.Nha[i].Location.Y + dt.Nha[i].Width / 2); } tb = new TextBox[dt.Sonha, dt.Sonha]; for (int i = 0; i < dt.Sonha; i++) { for (int j = 0; j < dt.Sonha; j++) { tb[i, j] = new TextBox(); tb[i, j].Text = "0"; } } for (int i = 0; i < dt.Sonha; i++) { for (int j = i + 1; j < dt.Sonha; j++) { tb[i, j].Size = new Size(23, 18); tb[i, j].Text = dt.Mangcost[i, j].ToString(); tb[i, j].Location = new Point((diem[i].X + diem[j].X) / 2, (diem[i].Y + diem[j].Y) / 2); this.Controls.Add(tb[i, j]); } } } Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) private void button1_Click_1(object sender, EventArgs e) { dothi dt = new dothi("dt1.txt", "dt2.txt"); greedy gr = new greedy(dt); if (textBox1.Text == "") gr.tinhtoan(0); else gr.tinhtoan(Convert.ToInt16(textBox1.Text)); Graphics dohoa = this.CreateGraphics(); Pen to = new Pen(Color.Blue, 4); for (int i = 0; i < dt.Sonha - 1; i++) { dohoa.DrawLine(to, diem[gr.KQ[i]], diem[gr.KQ[i + 1]]); } } private void button2_Click(object sender, EventArgs e) { dothi dt = new dothi("dt1.txt", "dt2.txt"); greedy gr = new greedy(dt); if (textBox1.Text == "") gr.tinhtoan(0); else Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) gr.tinhtoan(Convert.ToInt16(textBox1.Text)); Graphics dohoa = this.CreateGraphics(); Pen to = new Pen(Color.Blue, 4); for (int i = 0; i < dt.Sonha - 1; i++) { int biendem = DateTime.Now.Second; next: if ((DateTime.Now.Second - biendem) >= 2) dohoa.DrawLine(to, diem[gr.KQ[i]], diem[gr.KQ[i + 1]]); else goto next; } } private void Form_giai_Paint(object sender, PaintEventArgs e) { Graphics dohoa1 = this.CreateGraphics(); Pen to = new Pen(Color.Red, 2); for (int i = 0; i < dt.Sonha; i++) { for (int j = i + 1; j < dt.Sonha; j++) { dohoa1.DrawLine(to, diem[i], diem[j]); } } } Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) } } // Hàm xử lý thuật toán Greedy public greedy() { _dt = new dothi(); _ketqua = new int[_dt.Sonha]; for (int i = 0; i < _dt.Sonha; i++) { _ketqua[i] = -1; } } public greedy(dothi dt) { _dt = dt; _ketqua = new int[_dt.Sonha]; for (int i = 0; i < _dt.Sonha; i++) { _ketqua[i] = -1; } } // Hàm tính tốn public void tinhtoan(int dauvao) { _ketqua[0] = dauvao; int = 9999; Trần Thị Hồng Diệp Tin học 5A Thuật tốn Tìm Kiếm Greedy best first search (GBFS) int danhdau = dauvao; for (int i = 1; i < _dt.Sonha; i++) { for (int j =0; j

Ngày đăng: 25/03/2014, 22:39

Từ khóa liên quan

Mục lục

  • Chương trình DEMO

    • 1. Giao diện:

    • 2. Giới thiệu chương trình:

Tài liệu cùng người dùng

Tài liệu liên quan