Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Nội dung
1 BÀI TP LN MÔN: TRÍ TU NHÂN TO ĐỀ TÀI: A KT ĐỂTÌMĐƯỜNGĐITỐIƯUCHOCẤUTRÚCCÂY Sinh viên thc hin: 1. Trnh Minh Châu. 2. Trn Th Minh Hi. 3. Nguyn Bá Nguyn. 4. 5. Phm Trng Toàn. Ging dn: Ths Trng. 2 LU 3 Phân tích bài toán 4 M 4 Cách làm. 5 Cu trúc d liu và cách biu din trng thái ca bài toán 7 Lng 7 Hàm to mu chui nhp vào 8 Hàm x lý chui nhp vào 9 nh t cho các nút v 11 Hàm v th 12 Hàm gii thut AKT 13 Các hàm cho gii thut 15 Giao di 19 Tài liu tham kho 20 3 LỜI NÓI ĐẦU Trí tu là gì? Theo t Trí tu là kh Phn ng thích hp li nhng tình hung mu chnh hành vi mt cách thích hp. Hiu rõ mi liên h gia các s kin ca th gii bên ngoài nh nhng hành vi phù h c m Vy trí tu nhân to là gì? Thut ng trí tu nhân t trong hi tho t nhi nhau v trí tu nhân to. Vi trí tu nhân t i gii quyt các v mt cách thông minh nht. Ta s tìm hiu mt s gii quyt v n. C th m trong không gian trng thái vi thut gii A KT . 4 1. Phân tích bài toán. 1.1. Mục đích bài toán. Gi s ta có m th d: Ta c m A J. Bit g(n) là chi phí thc t n 0 n. Thut gii A KT là m rng ca thut gii A T bng cách s dng thêc ng h(n). Thut gii A T là thut gi nh và giá ca chúng (g). Tuy nhiên gii thut này không còn phù hp khi gp phi nhng bài toán phc tp do phi tháo mng nút ln(c n bùng n v t h khc phi ta s dng thêm các thông tin b sung xut phát t b nh có trin vng, t tp trung xung quanh t nht nu s d t v bài toán. A B C D G E F I H J 5 Vc gi là các Heuristics: h(n) hay chính là ng t n G. Các k thut s dng h(n) gi là các mo gii, ta có th o gii sau: - Chn toán t xây dng cung sao cho có th loi bnh không liên nh có trin vng. - S dng thêm các thông tin b sung nhm xây dng tp MO và cách ly các nh trong tp MO. c vii ta ph , tiêu chu m trin vng. Các hàm s dng các k thut này g ra mt s - Da vào xác sut c - Da vào khong cách, s sai khác ca trt vi tr hoc các thông tin liên quan ti tr d ng ng f(n) và f(n) tt ca li gii. 1.2. Cách làm. Thuật giải A KT c 1: - Mt. - M u tiên S, gán g(S) = 0 - S dng tri thc b c tính hàm h(S) - Tính f(S) = g(S) + h(S) c 2: Chnh m có f là nh nht và gnh N - N nh N là ngn nht và và bng g(N). Dng (Success). - Nu không tn tnh m nào: cây biu din v không tn ti i mc tiêu. Dng (Fail). Nnh m tr lên có cùng giá tr f nh nht: Chúng ta phi kim tra xem nh 6 o + Nng nh N là ngn nht và bng g(N). Dng (Success). o + Nu không có: chn ngu nhiên mnh c 3: - nh N, m mnh sau N. Vi mnh S sau N, tính: - g(S) = g(N) + cost(SN) - S dng tri thc b tính h(S) và f(S): f(S) = g(S) + h(S) c 4: - Quay lc 2. Thủ tục tìm kiếm: Vào: - th nh, A là tp cung. - f : N R + ng). - u là n 0 và t Ra: - 0 n k : {MO = {n 0 }; tính f(n 0 ) = g(n 0 ) + h(n 0 ) do {n getmoi(MO) // Lnh n sao cho f(n) min DONG = DONG U{n} If n If then For each m B(n) do 7 If m MO DONG then { MO =MO {m} Tính f(m) } Else if f cu (m) >f moi (m) then MO = MO {m} } } 2. Cấutrúc dữ liệu và cách biểu diễn trạng thái của bài toán 1. Lớp khai báo đối tượng class Nut { protected string _Ten; private int _G; private int _H; protected int _ID; protected int _IDcha; public Nut(int id, int idcha, string ten, int g, int h) { _ID = id; _IDcha = idcha; _G = g; _H = h; _Ten = ten; } public string Ten { get { return _Ten; } set { _Ten = value; } } public int G { get { return _G; } set { _G = value; } } public int H 8 { get { return _H; } set { _H = value; } } public int ID { get { return _ID; } set { _ID = value; } } public int IDcha { get { return _IDcha; } set { _IDcha = value; } } public Object Tag; } Gi ng ca nút _Ten : Tên nút _ID : Mã nút _IDcha : Mã nút cha _G : g _H : h 2. Hàm tạo mẫu chuỗi nhập vào //Tạo một mẫu mặc định public string TaoCayGia(int maxLen, string title) { int ser = 0,ser1=0,ser2=1; string text = ""; text = "ID\tID Cha\tTên Nut\tG\tH"; text += "\r\n_______\t_______\t_______\t_______\t_______"; for (int i = 0; i < maxLen; i++) { ser = rdNumber(maxLen, i, ser); ser1 = rdNumber(5, i, ser1); ser2 = rdNumber(58, i, ser2); text += string.Format("\r\n{0}\t{1}\t{2}{0}\t{3}\t{4}", i + 1, i > 0 && (i + ser) <= 0 ? i : (i + ser), title, i > 0 && (i + ser1) <= 0 ? i : (i + ser1), 9 i > 0 && (i + ser2) <= 0 ? i : (i + ser2)); } return text; } //tạo lấy số private int rdNumber(int max, int i, int last) { int avr = max / 2; int mod = i % avr; int range = (mod - i) / avr; last += (range + (last % 2)); return last; } 3. Hàm xử lý chuỗi nhập vào //Xử lý chuỗi nhập vào public TreeNode TaoCayTuChuoi(string text) { //loại bỏ các ký tự xuống dòng string[] lines = text.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); //trả về mảng chuỗi vẫn còn các ký tự tab return TaoCayTuChuoi(lines); } public TreeNode TaoCayTuChuoi(string[] lines) { //Bỏ qua 2 dòng đầu chứa các tiêu đề if (lines.Length <= 2) return null; TreeNode trNodes = new TreeNode(); SortedList<string, TreeNode> sortnodes = new SortedList<string, TreeNode>(); for (int id = 2; id < lines.Length; id++) { string line = lines[id]; char[] tab = { '\t' }; //cắt chuỗi ở vị trí tab string[] chuoi = line.Split(tab, StringSplitOptions.RemoveEmptyEntries); //cắt khoảng trắng ở đầu cuối các chuỗi chuoi[0].Trim(); chuoi[1].Trim(); chuoi[2].Trim(); chuoi[3].Trim(); chuoi[4].Trim(); TreeNode curNode = null; try { curNode = sortnodes[chuoi[0]]; } catch (Exception) { curNode = null; } if (curNode == null) { curNode = new TreeNode(chuoi[2]); sortnodes.Add(chuoi[0], curNode); } curNode.Text = chuoi[2]; //them nut 10 curNode.Tag = new Nut(int.Parse(chuoi[0]), int.Parse(chuoi[1]), curNode.Text, int.Parse(chuoi[3]), int.Parse(chuoi[4])); //kiểm tra trùng tên //if (kiemtratennut(chuoi[2])) break; // thêm vào mảng addnode(int.Parse(chuoi[0]), int.Parse(chuoi[1]), curNode.Text, int.Parse(chuoi[3]), int.Parse(chuoi[4])); // TreeNode parentNode = null; try { parentNode = sortnodes[chuoi[1]]; } catch (Exception) { parentNode = null; } if (parentNode == null) { parentNode = new TreeNode(chuoi[1]); sortnodes.Add(chuoi[1], parentNode); } parentNode.Nodes.Add(curNode); } IEnumerator<KeyValuePair<string, TreeNode>> nodesEnum = sortnodes.GetEnumerator(); nodesEnum.Reset(); while (nodesEnum.MoveNext()) { TreeNode node = (TreeNode)nodesEnum.Current.Value; if (node.Level == 0) trNodes.Nodes.Add(node); } TreeNode lastNode = trNodes.Nodes.Count > 1 ? trNodes : trNodes.Nodes[0]; lastNode.Text = "Đồ thị"; return lastNode; } //hàm kiểm tra trùng tên //public bool kiemtratennut(string ten) //{ // for (int i = 0; i < ALLNut.Count; i++) // { // ArrayList anut = ALLNut[i]; // string str = (string)anut[2]; // if (str == ten) // { // MessageBox.Show("Tên nút trùng nhau, xin hãy kiểm tra lại!"); // return true; // break; // } // } // return false; //} //them node vào arraylist chính private void addnode(int ID, int IDcha, string ten, int g, int h) { [...]... Cường_Giáo trình – slide TRÍ TUỆNHÂN TẠO(Artificial Intellegence – AI) 2 3 4 5 6 7 Geogre F Luger, William A Stubblefield – Albuquerque – Artifical Intelligence – Wesley Pubblishing Conpany, Inc – 1997 (Chapter 1) Bùi Xuân Toại – Trương Gia Việt (Biên dịch) – Trí tuệnhântạo – Các cấutrúc và chiện lược giải quyết vấn đề - NXB Thống kê, 2000 (Phần 1) PTS Nguyễn Thanh Thủy – Trí tuệnhântạo – Các phương... laybn() { string st ="" ; for (int i = 0; i < nodeBn.Count; i++) { ArrayList nut = nodeBn[i]; string ten = (string)nut[2]; st += ten + "( F= " + nut[5].ToString() + ") \r\n"; } return st; } //lay cac nut trong MO public string layMO() { string st = "" ; for (int i = 0; i < MO.Count; i++) { ArrayList nut = MO[i]; string ten = (string)nut[2]; st += ten + "( F= " + nut[5].ToString() + ") \r\n"; } return st; }... itemlv.SubItems.Add(laybn()); itemlv.SubItems.Add(layMO()); itemlv.SubItems.Add(layDONG()); akt_ search(laynutMo(), nodesearch, lv); } else { themDONG(root); itemlv = new ListViewItem(root); lv.Items.Add(itemlv); itemlv.SubItems.Add (" ích"); itemlv.SubItems.Add ("" ); itemlv.SubItems.Add(layDONG()); } } } else MessageBox.Show("Không tồn tại nút này !") ; } 14 7 Các hàm cho giải thuật //lấy nút gốc public ArrayList laygoc() { ArrayList... { if (dem == 0) { tinhF_Bn(); dem++; } ListViewItem itemlv; if (Tontainut(nodesearch)) { if (root == "" )//nếu chưa có nút nào mở thì thêm nút gốc { themMO(laygoc()); itemlv = new ListViewItem(root); lv.Items.Add(itemlv); itemlv.SubItems.Add ("" ); itemlv.SubItems.Add(layMO()); itemlv.SubItems.Add ("" ); akt_ search(laynutMo(), nodesearch, lv); } else { if (root != nodesearch) { daduyet(root);//xóa nút ra... string str = (string)anut[2]; if (str == nuttim)//nếu có phần tử nào trong mảng đầu có tên trùng { return true; } } return false; } //Hàm lấy đườngđi và chi phí public int f=0; string st = "" ; public string duongdi_chiphi(string nodesearch) { string s1 =" > "; string s = nodesearch; //ArrayList az; for (int i = 0; i < ALLNut.Count; i++) { ArrayList nuts = ALLNut[i]; if (s == (string)nuts[2]) { if... (string)nut[2]; st += ten + "( F= " + nut[5].ToString() + ") \r\n"; } return st; } //lay cac nut trong DONG public string layDONG() { string st = "" ; for (int i = 0; i < DONG.Count; i++) { ArrayList nut = DONG[i]; string ten = (string)nut[2]; st += ten + "( F= " + nut[5].ToString() + ") "; } return st; } //tính F của các nút // -public void tinhF_Bn() { for (int i = 0; i < ALLNut.Count; i++) {... = Graphics.FromImage(bmp); //vẽ nút LayNutCay laynut = (tnode) => { Boolean first = true; ToaDo cb = new ToaDo(tnode); ((Nut)tnode.Tag).Tag = cb; "\ n cb.Text = " g= " + ((Nut)tnode.Tag).G.ToString() + "\ n h= " + ((Nut)tnode.Tag).H.ToString(); " + tnode.Text + cb.sz = Size.Ceiling(gr.MeasureString(cb.Text, fnt)); cb.delta = tangX;//tăng chiều rộng bởi thêm các nút con cb.ViTri = new Point(tangX / 2,... "" ; for (int j = 0; j < MO.Count; j++) { ArrayList arr1 = MO[j]; if ((int)arr1[5] == lay_min_f()) st=(string)arr1[2]; } return st; } public int lay_min_f() { int min = 1000000; for (int i = 0; i < MO.Count; i++) { ArrayList arr1 = MO[i]; min = (int)arr1[5] . 1 BÀI TP LN MÔN: TRÍ TU NHÂN TO ĐỀ TÀI: A KT ĐỂ TÌM ĐƯỜNG ĐI TỐI ƯU CHO CẤU TRÚC CÂY Sinh viên thc hin: 1. Trnh Minh Châu. 2 nhi nhau v trí tu nhân to. Vi trí tu nhân t i gii quyt các v mt cách thông minh nht. Ta s tìm hiu mt s gii. Trng Gia Vit (Biên dch) Trí tu nhân to Các cu trúc và chin lc gii quyt vn - NXB Thng kê, 2000 (Phn 1) 4. PTS. Nguyn Thanh Thy Trí tu nhân to Các phng pháp gii