Bài giảng Trí tuệ Nhân tạo - ĐH KTCN TP.HCM

5. Đối sánh 5.1. Khái niệm Định nghĩa 3.1 Đối sánh là quá trình so sánh hai hoặc nhiều cấu trúc để phát hiện ra chúng là giống hay khác nhau. Các trường hợp 1. Đơn giản nhất là so sánh bằng nhau Chẳng hạn kết quả đối sánh hai xâu acdebfba và acdebeba là khác nhau sau khi so sánh từng ký tự một 2. Phức tạp hơn là trường hợp phải biến đổi trước khi so sánh bằng nhau Chẳng hạn kết quả đối sánh hai xâu (ab(cd)e) và (ab?xe) là giống nhau sau khi thay ?x bởi (cd) 3. Trường hợp phức tạp nhất đòi hỏi biến đổi dạng biểu diễn trước khi đối sánh. Chẳng hạn một đối tượng ảnh biểu diễn dưới dạng đa mức xám đối sánh với các mô tả theo logic vị từ, rõ ràng một so sánh trực tiếp là không thể trừ phi một dạng được biến đổi về dạng còn lại. 4. Ngoài ra còn một số kiểu đối sánh khác Chẳng hạn yêu cầu đối sánh chỉ các phần tử khoá. 5.2. Đối sánh biểu thức Ta có thể viết luật, sự kiện dưới dạng biểu thức. Với biểu thức ta có thể • Dùng cấu trúc cây nhị phân để biểu diễn • Phép thay thế các biến tự do trên cấu trúc cây cho phép sinh ra các sự kiện mới một cách dễ dàng, trực quan và có thể cài đặt được. Xét ví d

pdf240 trang | Chia sẻ: hoant3298 | Ngày: 27/11/2020 | Lượt xem: 379 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Bài giảng Trí tuệ Nhân tạo - ĐH KTCN TP.HCM, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
t hoặc đạt trạng thái cân bằng. Ví dụ sau minh họa trường hợp đầu. Ví dụ 10.1 Cho mạng neuron với 6 neuron x1, x2, a, b, c và y, trong đó x1, x2 là các neuron input còn y là neuron output. Ngưỡng θ và trọng w được cho trong các bảng neuron a b c y θ 0.3 -0.6 0.5 -0.1 a b c y x1 -0.5 0.4 0.4 x2 0.4 0.3 0.5 a 0.2 0.3 b 0.2 c -0.4 Dùng hàm chuyển ⎩⎨ ⎧ <− ≥= θ θ x x xS 1 1 )( Hãy xác định tín hiệu ra khỏi các neuron a, b, c và y, biết tín hiệu ra khỏi x1, x2 là -1 và 1 Giải: Vẽ cây y b a c x0 x1 x2 -0.1 -0.6 0.3 0.5 -0.5 0.4 0.4 0.4 0.3 0.5 0.2 0.3 0.2 -0.4 Tính toán a = S(-0.3 + 0.5 +0.4) = 1 b = S(0.6 – 0.4 + 0.2) = 1 c = S(-0.5 – 0.4 + 0.3) = -1 y = S(0.2 +0.1 +0.3 + 0.5 + 0.4) = 1 Vậy y = 1. (c) Học Coi mạng là mô hình f Â(W, θ, x) của hàm f(x). Bài toán học là xác định W và θ từ tập mẫu. Có hai kiểu học: 1. Học giám sát (có thầy): tập mẫu dạng {(xk, yk)} 2. Học không giám sát (không có thầy): tập mẫu dạng {xk} 1.2. Giới thiệu một số luật học (a) Luật học Hebb Hebb (1949), dựa trên những thí nghiệm của mình, đã giả thiết là khi neuron x liên tục truyền tín hiệu đến neuron y thì sẽ làm tăng trọng synapse giữa chúng. Ta có Δwxy = α ax ay trong đó α là hằng số học, ax là giá trị của neuron x, Association Memory (bộ nhớ kết hợp) Mô hình y = S(Wx) ⎩⎨ ⎧ <− ≥= 01 01 )( x x xS Luật học ΔW = yxT Hoạt động (là quá trình lặp) y0 = S(Wx0) xn = S(WTyn-1), yn = S(Wxn) y = y* = f Â(x) = S(Wx*) Ví dụ 10.2 Xét ánh xạ f: {0, 1, , 7} → {0, 1, 3}, biết xi 1 3 yi = f(xi) 0 1 Ta xây dựng mạng như sau: gồm 3 nút a, b, c nối đầy đủ với 2 nút u, v. a u b v c Bộ ba (a, b, c) sẽ mã hoá các giá trị từ 0 đến 7, chẳng hạn 5, có biểu diễn nhị phân là 101, sẽ được mã hoá với a = c = 1 và b = -1; cũng vậy cặp (u, v) sẽ mã hoá các số nguyên từ 0 đến 4. Quá trình học, bắt đầu với W = 0, ta cập nhật ΔW cho mỗi lần học cặp tín hiệu mẫu. Với (1, 0), ta có W: -1 a (1, 1, -1) u -1 -1 b (1, 1, -1) v -1 1 c Tiếp theo, với cặp (3, 1), W lúc này là -1 a (2, 0,-2) u -1 1 b (0, 2, 0) v 1 1 c ⎟⎟⎠ ⎞ ⎜⎜⎝ ⎛ −= 020 202 W Cho mạng hoạt động, trước hết kiểm tra kết quả học: Với x = 1, ta có (-1, -1, 1)T → (-1, -1)T→ (-1, -1, 1)T suy ra y = 0, khớp; Với x = 3, ta có (-1, 1, 1)T → (-1, 1)T→ (-1, 1, 1)T suy ra y = 1, khớp. Tìm f(x) Với x = 7, ta có (1, 1, 1)T → (1, 1)T→ (1, 1, -1)T → (1, 1)T, mạng ổn định ở trạng thái (6, 3) (nói theo thuật ngữ phân loại, mạng xếp 6 và 7 cùng nhóm) Với x = 4, ta có (1, -1, -1)T → (1, -1)T→ (1, -1, -1)T, mạng ổn định ở (4, 2) (b) Học bằng cách sửa lỗi Rosenblatt (1958), dựa trên các tính toán của mình, đã đưa ra luật học Δwxy = α ax ey trong đó α là hằng số học, ey = dy – ay là sai số giữa giá trị chờ đợi d và giá trị của neuron y. Trong một chu kỳ học, chúng ta hy vọng tổng lỗi sẽ giảm để có thể đạt đến giá trị bé nhất. Luật học này được Rosenblatt sử dụng trong mạng perceptron sau đây. Mạng Perceptron Mô hình y = S(Wx – θ) ⎩⎨ ⎧ <− ≥= 01 01 )( x x xS Luật học (là quá trình lặp cho đến khi cực tiểu sai số). Δwxy = α ax ey Δθx = -α ex Hoạt động y = f Â(x) = S(Wx – θ)) Ví dụ 10.3 Cho mạng với 3 neuron a, b, c. Giả sử a nối c trọng wac = 1 và b nối c trọng wbc = -3. tại c ngưỡng θc = 2. Với α= 0.5, hãy xác định trọng và ngưỡng của mạng sau khi học mẫu (a, b, c) = (1, -1, -1) và kiểm tra kết quả học. Giải: Mạng trước khi học c 1 1 -3 a b Tính y: (1, -1) → 1 = y và e = d – y = (-1) – 1 = -2; Cập nhật: wac = 1 + 0.5 × 1 × (-2) = 0; wbc = -3 + 0.5 × (-1) × (-2) = -2; θc = 2 – 0.5*(-2) = 3. Mạng sau khi học c 3 0 -2 a b Kiểm tra kết quả học, (1, -1) → -1 và sai số ec = 0. Mạng Back propagation Mô hình y = S(Wx, θ) ae aS −+= θθ 1 1),( Luật học (là quá trình lặp cho đến khi sai số cực tiểu). Δwxy = α ay (1 – ay) ax ey Δθx = -α ax (1 – ax) ex Trong đó α là hằng số học, ax là tín hiệu từ neuron x, Hoạt động y = f Â(x) = S(Wx, θ)) (c) Competitive Tích wTx khi x và w được chuẩn hoá cho ta biết sự gần nhau giữa chúng, cụ thể wTx càng lớn thì x và w càng gần nhau. Điều chỉnh w = w + α(x – w) làm w gần x hơn. Tiếp cận này chỉ có một neuron chiến thắng được xem xét. Kohonen (1982) đưa ra luật học competitive như sau Mô hình yk = max i (wiTx) Luật học (là quá trình lặp cho đến khi sai số cực tiểu). Δwxk = α (x – wk ) Hoạt động yk = max i (wiTx) 2. Thuật toán di truyền 2.1. Khái niệm Trong tự nhiên, những cá thể yếu sẽ bị đào thải. Tự nhiên có khuynh hướng giữ lại các thể có khả năng thích nghi cao. Công việc này được thực hiện qua lai tạo, đột biến và chọn lọc. Với tiếp cận này, thay vì đi tìm phương án tối ưu, chúng ta tìm một tập các phương án có chứa phương án tối ưu. Mỗi phương án được gọi là cá thể, tập các phương án đang xét được gọi là quần thể. Mỗi cá thể có một độ thích nghi riêng; những cá thể có độ thích nghi cao sẽ có xác suất tồn tại lớn. Mỗi cá thể được biểu diễn bằng một chuỗi các nhiễm sắc thể. Sau mỗi bước thuật toán ta có một thế hệ quần thể mới. Thế hệ mới được tạo ra từ các cá thể của thế hệ cũ nhờ lai tạo, đột biến và chọn lọc. 1 Phép chọn lọc được thực hiện qua hàm thích nghi, qua đó tính được khả năng tồn tại của cá thể. 2 Phép đột biến dựa trên việc thay đổi một số nhiễm sắc thể được chọn một cách ngẫu nhiên. 3 Phép lai tạo giữa hai cá thể là sự trộn lẫn nhau giữa các nhiễm sắc thể của chúng. Ví dụ 10.4 Giả sử một cá thể gồm có 6 nhiễm sắc thể và chỉ có hai loại nhiễm sắc thể là 0 và 1, ta có: Đột biến (100100) → (101100) Lai tạo (1001⏐10) → (1001⏐01) (1011⏐01) (1011⏐10) 2.2. Mô hình và Thuật toán (a) Mô hình Trong mô hình này, nhiễm sắc thể gồm có 2 loại là 0 và 1; cá thể là một xâu bit; hàm thích nghi là một hàm dương và được ký hiệu là f (fitness). Chúng ta có một phân bố xác suất chọn cho quần thể; xác suất lai pc, cho biết tỉ lệ các cá thể tham gia lai tạo; và xác suất đột biến pm, của nhiễm sắc thể bất kỳ. Công thức tính xác suất chọn: Giả sử quần thể gồm n cá thể được liệt kê từ x1 đến xn, ta có xác suất chọn cá thể thứ k cho bởi: ∑==== ki i k kk xf xfxxpp 1 )( )()( Thủ tục chọn lọc: Coi ∑== ki kpkF 1)( , F(0) = 0. Tạo một số ngẫu nhiên q giữa 0 và 1, nếu q nằm giữa F(k-1) và F(k) thì cá thể xk được chọn. Thủ tục lai tạo: Xét cá thể x, tạo một số ngẫu nhiên giữa 0 và 1, nếu số này bé hơn pc, đưa cá thể này vào nhóm lai tạo. Xét 2 cá thể trong nhóm lai tạo, chọn ngẫu nhiên một vị trí, thực hiện thao tác lai tại vị trí này. Thủ tục đột biến: Xét cá thể x, với mỗi nhiễm sắc thể của x, tạo một số ngẫu nhiên giữa 0 và 1, nếu số này bé hơn pm, đột biến nhiễm sắc thể này. (b) Thuật toán 1. Khởi tạo quần thể ban đầu 2. Tính phân bố xác suất chọn cho quần thể 3. Lặp 3.1. Chọn lọc 3.2. Lai tạo 3.3. Đột biến 3.4. Tính phân bố xác suất chọn cho quần thể (c) Minh họa Ví dụ 10.5 Giả sử cá thể gồm 4 nhiễm sắc thể 0, 1. Độ thích nghi f bằng 5 cộng cho hiệu của số nhiễm sắc thể 1 trừ cho số nhiễm sắc thể 0. Xét quần thể ban đầu x 1101 1100 0111 0001 f 7 5 6 3 p 7/21 5/21 6/21 3/21 F 7/21 12/21 18/21 1 Tạo 4 số ngẫu nhiên (giả sử 0.2, 0.4, 0.3 và 0.6) ta có kết quả sau chọn lọc: x 1101 1100 1101 0111 Với xác suất lai pc = 0.5, ta sẽ chọn ra 1 cặp. Tạo 4 số ngẫu nhiên (giả sử 0.6, 0.4, 0.3 và 0.7), chọn được 1101 và 0111. Tiếp, chọn ngẫu nhiên 1 vị trí lai (giả sử 1), ta được 2 cá thể mới 0101 và 1111. Kết quả sau lai tạo: x 0101 1100 1101 1111 Với xác suất đột biến pm = 0.1, ta hy vọng có 1.6 ~ 2 nhiễm sắc thể sẽ được đột biến. Tạo 16 số ngẫu nhiên (giả sử chỉ có các số thứ 3 và thứ 8 bé hơn 0.1). Ta đột biến bit 3 của cá thể 1 và bit 4 của cá thể 2. Kết quả ta được quần thể mới: x 0111 1101 1101 1111 f 7 7 7 9 p 7/30 7/30 7/30 9/30 F 7/30 14/30 21/30 1 Có thể nhận thấy khả năng thích nghi của quần thể mới cao hơn quần thể cũ. 3. Xử lý ràng buộc 3.1. Khái niệm Nhiều bài toán mà lời giải là một tập hợp các biến sẽ nhận giá trị trong một miền nào đó và thoả mãn một số ràng buộc (Constraint Satisfaction Problem -CSP). Thường thì lời giải cần đạt đến phải tối ưu một hàm mục tiêu nào đó. f(x1, , xn) → min/max sao cho xj ∈ Dj và thoả tập ràng buộc C Ví dụ 10.6 Xét bài toán đoán chữ S E N D + M O R E = M O N E Y. Các ký tự nhận các giá trị đôi một khác nhau. Gọi c0, c1, c2, c3 là các cờ nhớ (nhận trị là 0 hoặc 1) tương ứng từ hàng đơn vị trở đi, ta viết bài toán dưới dạng quen thuộc: S E N D c3 c2 c1 c0 + M O R E M O N E Y Các ràng buộc gồm: }1,0{ }9,...,2,1,0{,,,,, }9,...,2,1{, )( )(O10 )(10 )(10 )(10 53 432 321 210 10 ∈ ∈ ∈ = +=++ +=++ +=++ +=+ jc YRODNE MS rMc rcMcS rNcOcE rEcRcN rYcED Ví dụ 10.7 Bài toán tô màu bản đồ { }⎪⎩ ⎪⎨ ⎧ ∈ =∑ ∑ ∑ ∈ 1,0 1 min ),( ij j ij j Eli ljij x x xx Trong đó xij nhận trị 1 khi và chỉ khi đỉnh i và đỉnh j là kề nhau và có màu giống nhau. Trong tiếp cận này các ràng buộc được xem xét để thu hẹp miền giá trị của các biến. Ta minh họa cách xử lý ràng buộc qua hai ví dụ sau. Ví dụ 10.8 Tô màu bản đồ sau, tập các số tại mỗi đỉnh là các màu hợp lệ của đỉnh. Các ràng buộc là các cung, theo đó 2 đỉnh kề nhau phải có màu khác nhau. Xử lý các ràng buộc (e, a), (e, b), (e, c) và (e, d). Thu hẹp miền giá trị. Xử lý các ràng buộc (b, a), (b, c), và (b, d). Thu hẹp miền giá trị. Và bài toán là không giải được Ví dụ 10.9 Một biến thể của trò chơi Sudoku nổi tiếng có xuất xứ từ Nhật. Đặt các số từ 1 đến 4 vào bảng kích thước 4×4 (gồm 4 ô lớn kích thước 2×2, xem hình) sao cho mỗi dòng, mỗi cột và mỗi ô lớn đều có đủ 4 số này. Chúng ta có tất cả 12 ràng buộc: 4 cho dòng d1, d2, d3, d4; 4 cho cột c1, c2, c3, c4; và 4 cho ô o1, o2, o3, o4. Xét trò chơi với tập giá trị của mỗi ô như sau: 1 1, 2, 3, 4 1, 2, 3, 4 1, 2, 3, 4 1, 2, 3, 4 3 1, 2, 3, 4 1, 2, 3, 4 1, 2, 3, 4 2 1 1, 2, 3, 4 1, 2, 3, 4 1, 2, 3, 4 1, 2, 3, 4 1, 2, 3, 4 Xử lý các ràng buộc d1, d2, d3, c1, c2, c3, o1, o3, o4. Thu hẹp miền giá trị. 1 4 2, 3, 4 2, 3, 4 2, 4 3 2, 4 1, 2, 4 3, 4 2 1 3, 4 3, 4 1, 4 2, 3, 4 2, 3, 4 Xử lý các ràng buộc d1, c2, o1. Thu hẹp miền giá trị. 1 4 2, 3 2, 3 2 3 2, 4 1, 2, 4 3, 4 2 1 3, 4 3, 4 1 2, 3, 4 2, 3, 4 Xử lý các ràng buộc d2, d4, c1, c2, o1, o4. Thu hẹp miền giá trị. 1 4 2, 3 2, 3 2 3 4 1, 4 3, 4 2 1 3, 4 3, 4 1 2, 3, 4 2, 3, 4 Xử lý các ràng buộc d2, c3, o2. Thu hẹp miền giá trị. 1 4 2, 3 2, 3 2 3 4 1 3, 4 2 1 3, 4 3, 4 1 2, 3 2, 3, 4 Giờ đây áp dụng phương pháp giải quyết vấn đề (chẳng hạn tìm kiếm) ta dễ dàng tìm thấy một lời giải. 3.2. Thuật giải (a) Những nét chính Một số heuristic được sử dụng 1 Bậc của đỉnh (ràng buộc nhiều nhất) 2 Giá trị chọn ít nhất Bổ sung một số tính toán đặc thù của bài toán giúp cây tìm kiếm gọn nhất. Định nghĩa 10.1 Cung (a, b) được gọi là vững chắc nếu mọi giá trị khả dĩ của a đều có một giá trị khả dĩ của b. Thuật toán: Thủ tục xử lý cung không vững chắc Vào: cung (a, b) Ra: có thu hẹp miền giá trị của a 1 Gán removed = false 2 Với mỗi x thuộc miền giá trị của a, nếu không có giá trị y nào thuộc miền giá trị của b thoả mãn ràng buộc giữa a và b thì 2.1 Loại x khỏi miền giá trị của a 2.2 Gán removed = true 3 Return removed (b) Thuật giải cung chắc chắn Giống như alpha-beta, thuật giải này tiả nhánh để giảm sai lầm khi gán trị cho biến. Nhờ đó mà quá trình gán trị không phải truy ngược nhiều. Thuật giải 7: thuật giải cung chắc chắn 1 Chọn một ràng buộc và lưu lại trong S 2 Nếu S khác rỗng, lấy khỏi S một ràng buộc đã lưu 2.1 Thực hiện thủ tục xử lý cung không vững chắc 2.2 Nếu có sự thay đổi thì với mỗi biến bị thay đổi miền giá trị, lưu tất cả các ràng buộc liên quan 3 Nếu không chọn được biến để gán trị thì return false 4 Gán trị cho biến, nếu còn biến vẫn chưa được gán trị thì quay về bước 1 5 Return true Ví dụ 10.10 Xét bài toán tô màu bản đồ ở ví dụ trên, tập giá trị ban đầu của các đỉnh là a b c d e 1,2,3 2,3 1,2,3 1,2 3 giả sử xét cạnh (b, e) (b, e) b = 2 (a, b) a = 1, 3 (c, b) c = 1, 3 (d, b) d = 1 (e, a) a = 1 (c, a) c = 3 (a, c) (b, c) (e, c) xung đột! Ví dụ 10.11 Xét bài toán đoán số trong ví dụ trên, tập giá trị ban đầu là S E N D M O R Y c3 c2 c1 c0 1..9 0..9 0..9 0..9 1..9 0..9 0..9 0..9 0,1 0,1 0,1 0,1 1 Xét ràng buộc r5 (r5 : M=c3) M=c3=1 (r4 : S+c2+1=O+10) S=8,9; O=0 (r3 : E+c1=N+10c2) c1=1; c2=0 (r4 : S+1=10) S=9 (r2 : N+c0+R=E+10) N=3..8; E=2..7 (r3 : E+1=N) (r1 : D+E=Y+10c0) S E N D M O R Y c3 c2 c1 c0 9 2..7 3..8 2..8 1 0 2..8 2..8 1 0 1 0,1 Vì đặc trưng của bài toán, bổ sung ràng buộc r6 (nếu không có ràng buộc này cũng không sao, khi ấy cây tìm kiếm sẽ có nhiều nhánh hơn thôi) c0 + 1 + R = 10 2 Xét ràng buộc r6 (r6 : c0+1+R=10) c0=1; R=8 (r2 : N+9=E+10) (r1 : D+E=Y+10) D=6,7; E=5,6; Y=2,3 (r3 : E+1=N) N=6,7 (r2 : N+9=E+10) (r2 : N+9=E+10) S E N D M O R Y c3 c2 c1 c0 9 5,6 6,7 6,7 1 0 8 2,3 1 0 1 1 3 Xét ràng buộc r3 với 2 khả năng cho E. Xét khả năng E=5, và để khả năng còn lại cho cây tìm kiếm, ta có: (r3 : E+1=N) E=5; N=6 (r2 : N+9=E+10) (r1 : D+5=Y+10) D=7; Y=2 Và tất cả các ràng buộc đều thỏa S E N D M O R Y c3 c2 c1 c0 9 5 6 7 1 0 8 2 1 0 1 1 Minh họa cây tìm kiếm M=1; S=9; O=0; c3=1; c2=0; c1=1 R=8; c0=1 E=5; N=6; D=7; Y=2 E=6; Như vậy với sự trợ giúp của thuật giải cung chắc chắn, cây tìm kiếm của chúng ta hết sức gọn nhẹ 4. Máy vector hỗ trợ (Supported Vector Machine - SVM) 4.1. Khái niệm Xét bài toán tách tuyến tính hai nhóm đối tượng sau: + + – – + – Ta có thể giải dễ dàng bằng cách dùng mạng perceptron. Tuy nhiên, vấn đề nằm ở chỗ có rất nhiều lời giải và ta muốn tìm lời giải tốt nhất theo nghĩa sau: + + – – + – Siêu phẳng lời giải nằm ở tâm của hành lang có độ rộng cực đại. Ta cũng quan sát thấy các vector hỗ trợ nằm ở hai lề của hành lang. Bài toán ( ){ 1 min 2 1 ≥+ → bxwy ww iT i T Trong đó wTx + b = 0 là phương trình của siêu phẳng và yi là dấu của nhóm mà xi thuộc vào. 4.2. Thuật toán 1. Giải bài toán đối ngẫu ⎩⎨ ⎧ ≥ = →− 0 0 min 2 1 α α ααα T TT y eM Trong đó M = XTX, X = (y1x1, y2x2, , ymxm), eT = (1, 1, , 1) 2. Tính w = Xα 3. Tính b = 1/yi – wTxi tại một αi > 0. Ví dụ 10.12 Tách tuyến tính bằng SVM với nhóm (+) gồm duy nhất x1= (0, 0)T và nhóm (–) cũng gồm duy nhất x2 = (1, 0)T. Giải: Tính ⎟⎟⎠ ⎞ ⎜⎜⎝ ⎛ −= 00 10 X suy ra ⎟⎟⎠ ⎞ ⎜⎜⎝ ⎛== 10 00 XXM T bài toán đối ngẫu ⎩⎨ ⎧ ≥ =− →−− 0, 0 min 2 1 21 21 21 2 2 αα αα ααα có nghiệm tối ưu là α = (2, 2)T Suy ra w = Xα = (-2, 0)T và b = 1 – wTx1 = 1 Vậy siêu phẳng tách là -2x1 + 1 = 0, tức x1 = 1/2. 4.3. Tách phi tuyến (a) Ý tưởng Ta sẽ tìm phương trình đường cong tách dạng bxxybxw k k kk T +=+ ∑ )()()( φφαφ Trong đó φ là phép biến đổi chuyển sang không gian mới và zk = φ(xk) trong tổng trên là các vector hỗ trợ trong không gian mới. Phương trình cũng chính là siêu phẳng tách trong không gian mới. và dấu của bxxKybxxy k k kk k k kk +=+ ∑∑ ),()()( αφφα sẽ quyết định nhóm của x Ví dụ 10.13 Đường liền nét d(x) là đường cong tách, đường đứt nét là kết quả phân nhóm. (b) Thuật toán Bài toán ( ){ 1)( min 2 1 ≥+ → bxwy ww iT i T φ Thuật toán tính α và b 1. Giải bài toán đối ngẫu ⎩⎨ ⎧ ≥ = →− 0 0 min 2 1 α α ααα T TT y eM Trong đó M = (mij) với mij = yiyjφ(xi)Tφ(xj) 2. Tính b = 1/yi – ΣykαkK(xk,xi) tại một αi > 0. (c) Minh họa Chúng ta không đưa ra các tính toán mà chỉ cho thấy hiệu quả của tiếp cận. Ví dụ 10.14 Chọn φ(x) là có các thành phần đa thức bậc từ 2, ta có K(x, y) = (xy + 1)2 Ta có thể thấy các vector hỗ trợ. Ví dụ 10.15 Chọn φ(x) có 2 2 2)()(),( σφφ yx T eyxyxK −−== Minh họa trường hợp σ lớn Minh họa trường hợp σ nhỏ BÀI TẬP Mạng neuron Bài tập 10.1 c a b -1 x2x1 Cho mạng (hình) với : θa = -0.4 w1a = 0.2 w2a = -0.2 θb = 0.3 w1b = -0.5 w2b = 0.2 θc = 0.1 wac = -0.3 wbc = 0.5 Giả sử tín hiệu của neuron là ±1 và luật học kiểu perceptron với α = 0.2, hãy xác định 1. Tín hiệu ra của a, b, c khi x1 =1, x2 = -1 2. Sai số truyền về a, b khi sai số ở c là –2 3. Các giá trị trọng và ngưỡng của neuron a nếu sai số mà nó nhận được là 0.2 Bài tập 10.2 Cho mạng ca b -1 x2x1 trong đó θa = -0.4, w1a = 0.2, w2a = -0.2; θb = 0.3, w1b = -0.5, w2b = 0.2; θc = 0.1, wac = -0.3, wbc = 0.5. Dùng luật học perceptron với α = 0.2, hãy xác định: 1. Tín hiệu ra của các neuron a, b, c khi x1 =1, x2 = -1 2. Sai số truyền về a, b khi sai số ở c là –2 Bài tập 10.3 Cho mạng neuron loại bộ nhớ kết hợp với 3 neuron vào và 2 neuron ra. Biết ⎟⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜ ⎝ ⎛ − − = 01 23 12 W Xét cặp mẫu x(1, 1, -1), y(-1 1) 1. Tính W sau khi mạng học xong cặp mẫu trên 2. Kiểm tra kết quả học Bài tập 10.4 Phép AND cho bởi x1 x2 y 0 0 0 0 1 1 1 0 1 0 0 1 Xây dựng mạng perceptron: 1. Tạo mạng: cấu trúc, các giá trị trọng và ngưỡng ban đầu sao cho sai số chỉ xảy ra ở dòng 2; 2. Chọn hệ số học thích hợp sao cho không quá 2 chu kỳ học, mạng không còn sai số nữa. Bài tập 10.5 Biểu diễn các chữ cái L, T và I bằng ma trận 3×3 các số –1 và 1. Xây dựng hệ nhận dạng dùng bộ nhớ kết hợp: 1. Chọn số neuron output, xác định luật kết hợp, tính ma trận W; 2. Kiểm tra kết quả học (nếu không khớp, làm lại câu 1); 3. Làm nhiễu chữ T, kiểm tra xem mạng nhận dạng chữ này thành chữ gì? Thuật toán di truyền Bài tập 10.6 Làm lại ví dụ 5, vẫn dùng lại các tham số, kể cả các số ngẫu nhiên; chỉ thay đổi độ thích nghi: f bằng 5 cộng cho 2 lần số nhiễm sắc thể 0 trừ cho số nhiễm sắc thể 1 Bài tập 10.7 Xét bài toán tối ưu g = x2 → min trên đoạn [–1, 1]. 1. Chia đoạn [–1, 1] thành 15 khoảng đều nhau bởi phép chia x0 = -1 < x2 < < x15 = 1. a. Biểu diễn xk bằng biểu diễn nhị phân của k, ví dụ x3 = 0011; b. Coi độ thích nghi bằng f = 1 + g, ví dụ f(0011) = 1 + g(x3) = 1 + g(- 4/5) = 41/25. Tính f cho tất cả 16 cá thể. 2. Biết quần thể gồm 6 cá thể, xác suất lai pc = 0.33, xác suất đột biến pm = 0.1. Hãy c. Chọn ngẫu nhiên một quần thể; d. Tính phân bố xác suất chọn; e. Tự đưa ra các số ngẫu nhiên, và xác định quần thể mới theo cách thức của thuật toán di truyền. Xử lý ràng buộc Bài tập 10.8 Giải bài toán đoán chữ, dùng biểu diễn đồ thị như sau: Bài tập 10.9 Giải bài toán điền chữ sau T A B + T O M = M A I T Bài tập 10.10 Dùng 3 màu 1, 2, 3 hãy tô màu bản đồ có 5 thành phố a, b, c, d, e. Biết biểu diễn đồ thị phẳng của nó gồm các cạnh (a,b), (a,c), (b,c), (b,d), (c,d), (c,e), (d,e) và màu hợp lệ cho a là 1, cho e là 1 hoặc 2, cho các đỉnh còn lại là 1, 2, 3. Bài tập 10.11 Cúp Tiger 98 có 4 đội lọt đến bán kết: Việt Nam, Singapor, Thái Lan và Indonesia. Trước khi thi đấu ba bạn Quang, Dũng và Tuấn dự đoán như sau: 1 Quang: Việt Nam hạng nhì, Thái Lan hạng tư 2 Dũng: Singapor hạng nhì, Thái Lan hạng ba 3 Tuấn: Singapor hạng nhất, Indonesia hạng nhì Kết quả mỗi bạn đoán đúng một đội và sai một đội Dùng một trong những phương pháp đã học cho biết kết quả đúng của mỗi đội Máy vector hỗ trợ Bài tập 10.12 Tìm siêu phẳng tối ưu, với tập ví dụ thuận (+) chỉ gồm 1 phần tử x1 = (1, 1)T, và tập ví dụ nghịch (-) cũng chỉ gồm 1 phần tử x2 = (-1, 0)T. Bài tập 10.13 Tìm siêu phẳng tối ưu, với tập mẫu huấn luyện sau: Ví dụ Biểu diễn Lớp x1 (0, 1)T + x2 (0, 0)T – x3 (-1, 0)T – x4 (2, 0)T + x5 (2, -1)T – Yêu cầu: 1. Huấn luyện đủ 5 ví dụ; 2. Vẽ hình, chọn 2 vector hỗ trợ, giải và thử lại. Phụ lục 2 Ngôn ngữ Prolog 1. Giới thiệu prolog 1.1. Các thành phần của chương trình • Miền giá trị domains • Vị từ predicates • Cơ sở dữ liệu quan hệ database • Mệnh đề clauses • Đích goal • Chú thích % hoặc /**/ 1.2. Sự kiện và luật Tất cả đều được mô tả thông qua vị từ, chẳng hạn với vị từ p(integer) thì • Các sự kiện có thể là p(1), p(3), • Các luật có thể là p(X) if Ví dụ 2.1 Bài toán tìm đường đi: predicates road(symbol, symbol) %để định nghĩa cung route(symbol, symbol) %để định nghĩa đường đi clauses /*các sự kiện*/ road(n,c). road(c,d). road(n,t). road(n,d). road(t,g). road(t,l). road(t,c). road(d,u). road(d,h). road(h,l). road(d,l). /*luật*/ route (X,Y) if road(X,Y); road(X,Z), route(Z,Y), goal route(n,l) 1.3. Quan hệ (a) Định nghĩa Cho quan hệ, chẳng hạn r( A B) a 1 b 2 a 3 là tập con của tập tích nên r ở đây có thể mô tả tường minh bằng cách liệt kê các phần tử của nó hoặc mô tả ẩn thông qua một vị từ nào đó. Ví dụ 2.2 Xét quan hệ đơn giản sau r(A) 1 2 3 4 • Liệt kê predicates r(integer) clauses r(1). r(2). r(3). r(4). • Dùng vị từ (chỉ để kiểm tra xem số n có thuộc r không) predicates r(integer) clauses r(1). r(X):-Z=X-1, Z=0, r(Z). (b) Thao tác Ví dụ 2.3 Cho các quan hệ r, s, r1, r2 như sau predicates r(integer) s(integer, integer) r1(integer) r2(integer) clauses r(1). r(2). r(3). r(4). s(1, a). s(1, b). s(2, a). r1(X):-r(X), X<4. r2(X):-r(X), X>1. Thực hiện các phép toán đại số quan hệ Hội: r1(X); r2(X), not(r1(X)). Giao: r1(X), r2(X). Hiệu: r1(X), not(r2(X)). Bù: r(X), not(r1(X)). Tích: r1(X), r2(Y). Chọn: s(1,X). Chiếu: s(_,X). Kết tự nhiên: r(X), s(X,Y). Kết theta: r(X), s(Z,Y), X<Z. 1.4. Các kiểu đối tượng (a) Chuẩn Kiểu ví dụ char ‘a’ integer (2byte) 258 real (6 byte) 2.56 string “Hello” symbol hello hoặc “hello” (b) Danh sách Ký hiệu [H|T] là một danh sách gồm hai phần H: Head và T: Tail. Dùng con trỏ khai báo kiểu danh sách. Ví dụ 2.4 Sắp xếp một danh sách các số nguyên domains intlist = integer* predicates sort(intlist, intlist) insert(integer, intlist, intlist) clauses insert(X,[],[X]). insert(X,[H|T],L):- X<=H, L = [X|[H|T]]. insert(X,[H|T],L):- X>H, insert(X,T,L1), L = [H|L1]. sort([H],[H]). sort([H|T],X):- sort(T,Y), insert(H,Y,Z), X = Z. Minh họa sort([1,3,2],X false sort([3,2],Y) insert(1,Y,Z) X=Z false sort([2],Y1) insert(3,Y1,Z) Y=Z sort([2],[2]) (c) Kiểu dữ liệu phức hợp Ví dụ 2.5 Minh họa cây nhị phân • Định nghĩa cây nhị phân và vị từ prints domains treetype = tree(string, treetype, treetype) ; empty() predicates prints(treetype) clauses prints(empty). prints(tree(X, Y, Z)) :- write(X), nl, prints(Y), prints(Z). • Tạo và in một đối tượng kiểu cây nhị phân như sau goal prints(tree("Cathy", tree("Michael", tree("Charles", empty, empty), tree("Hazel", empty, empty) ), tree("Melody", tree("Jim", empty, empty), tree("Eleanor", empty, empty) ) ) ). • Một số thao tác mới rất cần được định nghĩa thêm: chẳng hạn bổ sung vị từ search để tìm cây con dựa vào thông tin của đỉnh. predicates search(string, treetype, treetype) clauses search(_, empty(), empty()):-fail. search(S, tree(S,L,R), tree(S,L,R)). search(S, tree(_,L,_), X):-search(S,L,X). search(S, tree(_,_,R), X):-search(S,R,X). • Bây giờ nếu đích cũ được đưa vào vị từ init(treetype) thì một ví dụ áp dụng có thể là goal init(X), search(“Hazel”, X, Y), prints(Y). 1.5. Cơ chế tìm kiếm Là cơ chế hợp nhất, truy ngược và quay lui • Hợp nhất: thay giá trị cụ thể cho các biến của vị từ để đuợc mệnh đề có chân trị đúng (true). • Truy ngược: đến đích gần nhất khi gặp mệnh đề có chân trị sai (false) • Quay lui: khi gặp mệnh đề có chân trị đúng (true) Ta sẽ minh họa cơ chế này qua hai ví dụ sau Ví dụ 2.6 Cho các sự kiện và luật predicates p(symbol, symbol) q(symbol, symbol) clauses p(n,c). p(c,t). p(c,d). p(n,d). q (X,Y):- p(X,Y); p(X,Z), q(Z,Y), goal q(n,t). • Mô tả bằng cấu trúc cây • Cơ chế tìm kiếm Đích 1: q(n, t), hợp nhất X = n và Y = t Đích 2: p(n, t), không tìm thấy trong quan hệ p. Thất bại cho nên truy ngược đến đích 3: p(n, Z) Đích 3: p(n, Z), hợp nhất Z = c. Thành công nên quay lui Đích 4: q(c, t), hợp nhất X = c, Y=t Đích 5: p(n, c), hợp nhất n = n, c = t không thành công, truy ngược đến đích 6 p(c, t) Đích 6: p(n, t), hợp nhất n = n, t = t thành công, quay lui và kết thúc quá trình tìm kiếm. Ví dụ 2.7 Tuỳ theo đích trong hay đích ngoài mà sự truy ngược là mặc định cho dù đã tìm thấy lời giải. Một nhát cắt, !, sẽ ngăn cản sự truy ngược này. Ngoài ra nếu muốn prolog truy ngược để tìm mọi lời giải thì vị từ fail trả về false sẽ ép quá trình truy ngược. Minh họa • Cho quan hệ predicates r(integer) clauses r(1). r(3). r(2). • Đích trong goal r(X), write(“X=”,X,”\n”). % một lời giải goal r(X), write(“X=”,X,”\n”), fail. % truy ngược và vét cạn các lời giải • Đích ngoài goal r(X). % prolog tự động truy ngược goal r(X), !. % nhát cắt ngăn chận truy ngược 1.6. Vài ví dụ lập trình prolog (a) Tìm đường đi domains city = symbol predicates road(city,city) route(city,city) clauses road(n,c). road(c,d). road(n,t). road(n,d). road(t,g). road(t,l). road(t,c). road(d,u). road(d,h). road(h,l). road(d,l). route (X,Y):-road(X,Y); road(X,Z), route(Z,Y), goal route(n,l). (b) Đối tượng phức domains person = person(name,address) name = name(first,last) address = addr(street,city,state) street = street(number,street_name) city, state, street_name = string first, last = string number = integer goal P1= person(name(jim,mos),addr(street(5,"1st st"),igo,"CA")), P1= person(name(_,mos),Address), P2= person(name(jane,mos),Address), write(P2). (c) Xử lý danh sách domains llist = l(list); s(symbol); i(integer); c(char); t(string) list = llist* predicates append(list, list, list) clauses append([], L, L). append([X|L1], L2, [X|L3]) :- append(L1, L2, L3) goal makewindow(1, 7, 7, "answer", 15, 0, 8, 80), append([s(likes), l([s(bill), s(mary)])], [s(bill), s(sue)],Ans), write("FIRST LIST: ", Ans), nl, nl, append([l([s("This"),s("is"),s("a"),s("list")]),s(bee)],[c('c')], Ans2), write("SECOND LIST: ", Ans2), nl. (d) database domains thing = string conds = cond* cond = string database is_a(thing, thing, conds) type_of(thing, thing, conds) false(cond) predicates run(thing) ask(conds) clauses run(Item):- is_a(X, Item, List), ask(List), type_of(ANS, X, List2), ask(List2), write("The ", Item," you need is a/an ", Ans),nl. run(_):- write("This program does not have enough "), write("data to draw any conclusions."), nl. ask([]). ask([H|T]):- not(false(H)), write("Does this thing help you to "), write(H," (enter y/n)"), readchar(Ans), nl, Ans='y', ask(T). ask([H|_]):- assertz(false(H)), fail. is_a(language, tool, ["communicate"]). is_a(hammer, tool, ["build a house", "fix a fender", "crack a nut"]). is_a(sewing_machine, tool, ["make clothing","repair sails"]). is_a(plow, tool, ["prepare fields", "farm"]). type_of(english, language, ["communicate with people"]). type_of(prolog, language, ["communicate with a computer"]). 2. Thảo luận 2.1. Biểu diễn cây Qua kinh nghiệm bản thân, với các chương trình nhỏ hoặc đơn giản, để viết vị từ mới, ta nên thực hiện qua 3 bước: • Biểu diễn vị từ dưới dạng cây AND/OR. • Để ý đến cơ chế tìm kiếm của PROLOG mà sắp xếp các đỉnh (goal) cho thích hợp. • Viết vị từ Ngoài ra ta cũng có thể hiểu được hoạt động của các vị từ qua việc biểu diễn bằng cấu trúc cây như vậy. Ví dụ 2.8 • Cấu trúc lặp Sơ đồ trên rất giống cấu trúc repeat until của ngôn ngữ pascal. Chẳng hạn nếu vòng lặp thực hiện 2 lần, ta có Minh hoạ vị từ repeat predicates repeat clauses repeat. repeat:-repeat. goal repeat, readint(X), X=0. Minh hoạ vị từ for predicates for(integer, integer) clauses for(I,I). for(I,K):- L=K+1, for(I,L). goal for(I,1), write(X), I=2. • Xét chuơng trình minh họa vị từ dowhile sau predicates dowhile p clauses while. while:- while, p. p :- readint(X), X=2. goal dowhile, fail. Biểu diễn qua 2 vòng lặp Ta không những hiểu hoạt động của các vị từ mà còn thấy nó làm việc không giống lập trình cấu trúc. Khác với repeat, ở đây dowhile không là vị từ làm việc độc lập nên khó dùng hơn repeat. Cái mà chúng ta học được ở ví dụ này là qua đó ta có thể viết một số vị từ tương tự. Ví dụ 2.9 Để viết vị từ max, ta có thể dùng biểu diễn domains intlist = integer* predicates max(intlist, integer) max(integer, integer, integer) clauses max([H|[]],H). max([H|T],X):- max(T,Y), max(H,Y,X). max(X,Y,X):-X>=Y. max(_,Y,Y). goal max([1,3,2],X) 2.2. Dùng đại số quan hệ Ví dụ 2.10 Để tìm giá trị max trên quan hệ r, từ mệnh đề (∃x∈r)(∀y∈r)(x ≥ y), ta có phép toán là r(x) – (σx<yr×r)[x]. Do đó predicates max(integer) p(integer) database r(integer) clauses r(1). r(3). r(2). p(X):- r(X), r(Y), X<Y. max(X):- r(X), not(p(X)). BÀI TẬP Bài tập 2.1 Trong 10 ví dụ nói trên, hãy 1. Cài đặt chúng 2. Viết một số đích (goal). Bài tập 2.2 Viết các vị từ thích hợp chuyển các thể hiện của quan hệ thành danh sách. Bài tập 2.3 Viết các vị từ sau và xây dựng chương trình áp dụng 1. min(X, Y, Z) theo nghĩa Z = min(X, Y) 2. min(L, M) theo nghĩa M = min(danh sách L) 3. ptb1(A, B, X, N) theo nghĩa phương trình bậc 1: AX + B = 0, X là nghiệm nếu có còn N là số nghiệm : 0, 1 hoặc 2 (tức vô số nghiệm) 4. ptb2(A, B, C, X, Y, N) theo nghĩa phương trình bậc 2: AX2 + BX + C = 0, X và Y là 2 nghiệm nếu có còn N là số nghiệm: 0, 1, 2 hoặc 3 (vô số nghiệm) Bài tập 2.4 Viết các vị từ làm việc với danh sách như tìm phần tử M trong danh sách L: search(M, L), nối hai danh sách L1 và L2 thành L: join(L1, L2, L), xoá phần tử M trong danh sách L0 thành danh sách L: del(M, L0, L). Bài tập 2.5 Định nghĩa cây nhị phân và viết các vị từ như: tìm phần tử M trong cây T search(M, T), thêm phần tử X vào cây T0 add(X, T0, T), xoá phần tử M khỏi cây T0 del(M, T0, T). Bài tập 2.6 Tìm hiểu và làm việc với các vị từ chuẩn Findall Phụ lục 3 Nghiên cứu tình huống 1. Thiết kế hướng đối tượng dùng C++ 1.1. Một thiết kế đơn giản (a) Cơ sở tri thức Sự kiện là thành phố; con đường (nối trực tiếp) là luật. class City { public: int AddRoad(City* c, int d); int AddRoad(int i, int d); static int AddRoad(int i, int j, int d); City(char c); struct Road { City* c; int d;}; CArray RoadList; static CArray CityList; char name; }; CArray City::CityList; City::City(char c){ name = c; CityList.Add(this); } int City::AddRoad(City* c, int d){ Road *r = new Road; r->c = c; r->d = d; RoadList.Add(r); return 1; } int City::AddRoad(int i, int d){ return AddRoad(City::CityList[i],d); } int City::AddRoad(int i, int j, int d){ return City::CityList[i]->AddRoad(j,d); } (b) Mô tơ suy diễn Giải quyết vấn đề bằng tìm kiếm. Cài đặt thuật toán tìm kiếm int Solve(City& s, City& g) { //open & close priority_queue,myless> open; queue close; //open <- s open.push(new Node(&s,0)); while (!open.empty()){ //n <-open Node *n = open.top(); open.pop(); //close <- n close.push(n); //n==g if (n->c->name==g.name) { Node *m = close.back(); while (m!=0){ coutc->nameg<<endl; m = m->father; } return 1; } //for m in bn(n) int k = n->c->RoadList.GetSize(); for (int i=0; i<k-1; i++) { City::Road *r = n->c->RoadList[i]; open.push(new Node(r->c,n,n->g+r->d)); } } return 0; }; Tổ chức cây tìm kiếm class Node{ public: City *c; Node *father; int g; Node(City*,Node*,int d=0); }; Node::Node(City*ic,Node*f,int d){ c = ic; father = f; g = d; } int operator<(const Node& a, const Node& b){ return a.g<b.g; } struct myless: less{ bool operator()(const Node*& x, const Node*& y) const { return x->g>y->g; } }; (c) Minh họa void main(){ City v[8]={'n','c','t','d','u','h','l','g'}; City::AddRoad(0,3,19); City::AddRoad(0,2,8); City::AddRoad(0,1,10); City::AddRoad(1,3,10); City::AddRoad(3,6,10); City::AddRoad(3,5,15); City::AddRoad(3,4,10); City::AddRoad(5,6,15); City::AddRoad(2,7,15); City::AddRoad(2,6,18); City::AddRoad(2,1,5); //tìm đường đi từ n đến l if (Solve(v[0],v[6])) cout<<"success\n"; else cout<<"fail\n"; } 1.2. Một thiết kế tổng quát (a) Cơ sở tri thức //Cơ sở tri thức class KB{ public: virtual void *Start()=0; virtual void *Goal()=0; virtual void Bn(void*,Container &)=0; virtual void Show(void*)=0; }; //Bản đồ là một cơ sở tri thức class Map: public KB{ int n, m; struct Road {int f; int t;}; typedef char City; char *Cities; Road *Roads; Road Set(int, int); public: Map(); ~Map(); virtual void *Start(); virtual void *Goal(); virtual void Bn(void*,Container &); virtual void Show(void*); }; //Tháp Hà Nội cũng là một cơ sở tri thức class HNTower: public KB{ int n; struct State {int a, b, c;}; WorkList sl; void *MakeState(int, int, int); public: HNTower(int d = 2){n=d;} ~HNTower(); virtual void *Start(); virtual void *Goal(); virtual void Bn(void*,Container &); virtual void Show(void*);}; (b) Mô tơ suy diễn class Engine{ public: virtual int Reasone(KB &)=0; virtual void Report(KB *)=0; }; //Suy diễn tiến bằng cơ chế tìm kiếm. class Search: public Engine{ struct Snote {void *State; Snote *Father;}; void MakeNote(void*,Snote*); WorkList open, close; public: ~Search(); virtual int Reasone(KB &); virtual void Report(KB*); }; (c) Hệ cơ sở tri thức //Hệ giải bài toán gồm một cơ sở tri thức và một mô tơ suy diễn. class GPSystem{ protected: KB *kb; Engine *e; public: GPSystem(); GPSystem(KB*,Engine*); virtual Solve(); }; (d) Cài đặt Cơ sở tri thức bản đồ Map::Map() { n = 8; m = 11; Cities = new char[n+1]; strcpy(Cities,"nctduhlg"); Roads = new Road[m]; Roads[0].f = 0; Roads[0].t = 3; Roads[1].f = 0; Roads[1].t = 2; Roads[2].f = 0; Roads[2].t = 1; Roads[3].f = 1; Roads[3].t = 3; Roads[4].f = 3; Roads[4].t = 6; Roads[5].f = 3; Roads[5].t = 5; Roads[6].f = 3; Roads[6].t = 4; Roads[7].f = 5; Roads[7].t = 6; Roads[8].f = 2; Roads[8].t = 7; Roads[9].f = 2; Roads[9].t = 6; Roads[10].f = 2; Roads[10].t = 1; } Map::~Map() { delete Cities; delete Roads; } void *Map::Start(){ return &Cities[0]; } void *Map::Goal(){ return &Cities[6]; } void Map::Bn(void *s, Container &c){ for (int i=0; i<m; i++) if (*((City*)(s))==Cities[Roads[i].f]) c.Store(&Cities[Roads[i].t]); } void Map::Show(void*s){ cout<<*(char*)(s); } Cơ sở tri thức tháp Hà Nội HNTower::~HNTower() { State *n; sl.GoToHead(); while (0!=(n=(State*)(sl.Retrieve()))) { delete n; sl.GoNext();} } void *HNTower::MakeState(int a, int b, int c) { State *n; sl.GoToHead(); while (0!=(n=(State*)(sl.Examine()))) { if ((n->a==a)&&(n->b==b)&&(n->c==c)) return n; sl.GoNext(); } n = new State; n->a = a; n->b = b; n->c = c; sl.Store(n); return n; } void *HNTower::Start() { return (MakeState(3,0,0)); } void *HNTower::Goal() { return (MakeState(0,0,3)); } void HNTower::Bn(void *s, Container &c) { State t = *(State*)(s); if (t.a == 3) {c.Store(MakeState(2,1,0)); c.Store(MakeState(2,0,1)); return;} if (t.b == 3) {c.Store(MakeState(1,2,0)); c.Store(MakeState(0,2,1)); return;} if (t.c == 3) {c.Store(MakeState(1,0,2)); c.Store(MakeState(0,1,2)); return;} if ((t.a == 2) && (t.b==1)) {c.Store(MakeState(3,0,0)); c.Store(MakeState(2,0,1)); c.Store(MakeState(0,1,2)); return;} if ((t.a == 2) && (t.c==1)) {c.Store(MakeState(3,0,0)); c.Store(MakeState(2,1,0)); c.Store(MakeState(0,2,1)); return;} if ((t.b == 2) && (t.a==1)) {c.Store(MakeState(0,3,0)); c.Store(MakeState(0,2,1)); c.Store(MakeState(1,0,2)); return;} if ((t.b == 2) && (t.c==1)) {c.Store(MakeState(0,3,0)); c.Store(MakeState(1,2,0)); c.Store(MakeState(2,0,1)); return;} if ((t.c == 2) && (t.a==1)) {c.Store(MakeState(0,0,3)); c.Store(MakeState(0,1,2)); c.Store(MakeState(1,2,0)); return;} if ((t.c == 2) && (t.b==1)) {c.Store(MakeState(0,0,3)); c.Store(MakeState(1,0,2)); c.Store(MakeState(2,1,0)); return;} } void HNTower::Show(void*s) { State t = *(State*)(s); cout<<'('<<t.a<<','<<t.b<<','<<t.c<<")\n"; } Mô tơ suy diễn void Search::MakeNote(void*s,Snote*f){ Snote *n; open.GoToHead(); while (0!=(n=(Snote*)(open.Examine()))) { if (n->State==s) return; open.GoNext(); } close.GoToHead(); while (0!=(n=(Snote*)(close.Examine()))) { if (n->State==s) return; close.GoNext(); } Snote *tmp = new Snote; tmp->State = s; tmp->Father = f; open.Store(tmp); open.GoToHead(); } Search::~Search(){ Snote *n; open.GoToHead(); close.GoToHead(); while (0!=(n=(Snote*)(open.Retrieve()))){ delete n; open.GoNext();} while (0!=(n=(Snote*)(close.Retrieve()))){ delete n; close.GoNext();} } void Search::Report(KB *kb){ close.GoToHead(); Snote *n=(Snote*)(close.Examine()), *t; kb->Show(n->State); t = n->Father; close.GoNext(); while (0!=(n=(Snote*)(close.Examine()))) { if (t==n) { kb->Show(n->State); t = n->Father; } delete n; close.GoNext(); } } int Search::Reasone(KB &kb){ void *s = kb.Start(), *g = kb.Goal(), *m; Snote *n; Queue q; MakeNote(s,0); while (0!=(n=(Snote*)(open.Retrieve()))) { close.Store(n); if (n->State==g) return 1; kb.Bn(n->State,q); while (0!=(m = q.Retrieve())) MakeNote(m,n); open.GoToHead(); } return 0; }; Hệ cơ sở tri thức GPSystem::GPSystem(){ kb = 0; e = 0; } GPSystem::GPSystem(KB*k,Engine*E){ kb = k; e = E; } int GPSystem::Solve(){ return (e->Reasone(*kb)); } (e) Minh họa void main(){ KB *kb = new HNTower; Engine *e = new Search; GPSystem s(kb,e); if (s.Solve()) e->Report(kb); else cout<<"\nfail"; delete kb; delete e; } 2. Cài đặt thuật toán A* bằng prolog domains city = symbol dist = integer database open(city, city, dist) close(city, city, dist) done predicates road(city, city, dist) heuristic(city, dist) init repeat check(city, dist) bn(city, dist) run report report(city) min(city, city, dist) p(dist) clauses road(n,c,10). road(d,l,10). heuristic(n,26). heuristic(c,20). heuristic(t,18). heuristic(d,10). heuristic(g,30). heuristic(l,0). heuristic(u,30). heuristic(h,15). min(F,T,X):-open(F,T,X), not(p(X)). p(X):- open(_,T1,X), heuristic(T1, D1), open(_,T2,Y), heuristic(T2, D2), X+D1>Y+D2. run:- repeat, min(X,Y,D), retract(open(X,Y,D)), asserta(close(X,Y,D)), check(Y,D), done. check(X,_):-X=l, assert(done). check(X,D):-bn(X,D). report:-retract(close(X,Y,D)), write(D),nl,write(Y), report(X). report(z). report(X):-close(Z,X,_), write("<-",X), report(Z). bn(X,D):- road(X,Y,D1), D2 = D + D1, asserta(open(X,Y,D2)), fail. bn(_,_). goal init, assertz(open(z,n,0)), run, report. 3. Xây dựng hệ chuyên gia đơn giản bằng prolog Hệ có thể nhận biết trái cây đang xét là loại trái nào. 3.1. Cơ sở tri thức (a) Mô tả Dùng mạng ngữ nghĩa vàng đỏ màu mọc trên cây Trái táo cực bắc không có ở hình tròn nhỏ kích thước dùng làm rượu Trái nho thân mềm mọc trên cây không có gai (b) Thủ tục Dùng luật sản xuất 1. Nếu X là đối tượng và tất cả các thuộc tính của nó đều đúng → X là loại trái cây đang xét; 2. Nếu A là thuộc tính của X và A chưa biết → hỏi trái cây đang xét có thuộc tính A không 3.2. Cài đặt bằng prolog domains object = symbol attribute = symbol val = integer vlist = val* predicates rule(object, attribute, val) min(vlist, val) isa(object) obj(object) value(object, val) database /*lưu các chứng cứ*/ term(attribute, val) clauses /*tri thức mô tả các loại trái cây*/ obj(apple). obj(grape). rule(apple, on_tree, 1). rule(apple, round, 1). rule(apple, yellow_red, 1). rule(apple, north_hole, 0). rule(grape, small, 1). rule(grape, soft_tree, 1). rule(grape, wine, 1). rule(grape, gai, 0). /*tri thức thủ tục cho mô tơ suy diễn*/ value(X, 1) if rule(X, Y, V), term(Y, V). value(X, 0) if rule(X, Y, U), term(Y, V), U = 1 - V. isa(X) if obj(X), findall(Y, value(X, Y), L), write(L), nl, min(L,1). value(X, V) if rule(X, Y, W), write("does it have : ",Y," 0/1? "), readint(U), assert(term(Y, U)), V=U*W + (1-W)*(1-U). /*các tiện ích*/ min([X], X) if !. min([0|_], 0) if !. min([1|T], V) if min(T, V). goal isa(X), writeline(X). 4. Xây dựng một cơ chế thu nhận tri thức Xét bài toán hệ thức lượng trong tam giác. Để giải bài toán này chúng ta có hàng loạt các công thức. Giả sử chúng ta cung cấp cho hệ các công thức như: Ach CBA haS b a sin 2 1 ×= =++ ×= π thì hệ sẽ thu hoạch được gì? Thay vì hệ chỉ biết những gì ta dạy, ta muốn hệ có khả năng tổng quát hoá. Muốn vậy, chúng ta phải cung cấp cho hệ những tri thức khác cho phép hệ có thể suy luận để tổng quát hoá các công thức mà chúng ta vừa dạy cho nó. Cơ chế học được đưa ra ở đây dựa vào phương pháp học bằng cách xây dựng một giải thích. 4.1. Cơ sở tri thức Dùng luật sản xuất 1. Nếu X là một cạnh → X là một đại lượng; 2. Nếu X là một góc → X là một đại lượng; 3. Nếu X là một đường cao → X là một đại lượng; 4. Nếu X là diện tích → X là một đại lượng; 5. Nếu X, Y, Z là các đại lượng → (X, Y, Z) là một bộ 3 các đại lượng; 6. Nếu S là diện tích và Y, Z là các đại lượng cùng đỉnh → (X, Y, Z) có một ràng buộc; 7. Nếu X, Y, Z là các đại lượng có các đỉnh đôi một khác nhau → (X, Y, Z) có một ràng buộc; 8. Nếu (X, Y, Z) là một bộ 3 các đại lượng và (X, Y, Z) có một ràng buộc → (S, Y, Z) là một công thức 4.2. Minh họa cơ chế học Ký hiệu c(X) : X là một cạnh; g(X): X là một góc; d(X): X là diện tích; v(X): X là đường cao; dl(X): X là một đại lượng; b3(X, Y, Z): (X, Y, Z) là một bộ 3 các đại lượng; rb(X, Y, Z): (X, Y, Z) có một ràng buộc; ct(X, Y, Z): (X, Y, Z) là một công thức; cd(X, Y): X, Y là các đại lượng cùng đỉnh; kd(X, Y, Z): X, Y, Z là các đại lượng có các đỉnh đôi một khác nhau. Cây giải thích khi học công thức ahaS ×= 2 1 như sau ct(X,Y,Z) b3(X,Y,Z) rb(X,Y,Z) dl(X) dl(Y) dl(Z) d(X) cd(Y,Z) kd(X,Y,Z) d(X) c(Y) v(Z) d(S) cd(a,a) d(S) c(a) v(a) và kết quả hệ học được luật mới cụ thể hơn 9. Nếu X là diện tích và Y là một cạnh và Z là một đường cao và Y, Z cùng đỉnh → (X, Y, Z) là một công thức Tương tự, cây giải thích khi học công thức π=++ CBA như sau ct(X,Y,Z) b3(X,Y,Z) rb(X,Y,Z) dl(X) dl(Y) dl(Z) d(X) cd(Y,Z) kd(X,Y,Z) g(X) g(Y) g(Z) kd(a,b,c) g(a) g(b) g(c) kết quả hệ học được luật mới 10. Nếu X, Y, Z là 3 góc có đỉnh khác nhau đôi một → (X, Y, Z) là một công thức Cuối cùng, cây giải thích khi học công thức Achb sin×= như sau ct(X,Y,Z) b3(X,Y,Z) rb(X,Y,Z) dl(X) dl(Y) dl(Z) d(X) cd(Y,Z) kd(X,Y,Z) g(X) g(Y) g(Z) kd(b,c,a) v(b) c(c) g(a) kết quả hệ học được luật mới 11. Nếu X là đường cao và Y là cạnh và Z là góc và X, Y, Z có đỉnh khác nhau đôi một → (X, Y, Z) là một công thức 5. Đối sánh 5.1. Khái niệm Định nghĩa 3.1 Đối sánh là quá trình so sánh hai hoặc nhiều cấu trúc để phát hiện ra chúng là giống hay khác nhau. Các trường hợp 1. Đơn giản nhất là so sánh bằng nhau Chẳng hạn kết quả đối sánh hai xâu acdebfba và acdebeba là khác nhau sau khi so sánh từng ký tự một 2. Phức tạp hơn là trường hợp phải biến đổi trước khi so sánh bằng nhau Chẳng hạnï kết quả đối sánh hai xâu (ab(cd)e) và (ab?xe) là giống nhau sau khi thay ?x bởi (cd) 3. Trường hợp phức tạp nhất đòi hỏi biến đổi dạng biểu diễn trước khi đối sánh. Chẳng hạn một đối tượng ảnh biểu diễn dưới dạng đa mức xám đối sánh với các mô tả theo logic vị từ, rõ ràng một so sánh trực tiếp là không thể trừ phi một dạng được biến đổi về dạng còn lại. 4. Ngoài ra còn một số kiểu đối sánh khác Chẳng hạn yêu cầu đối sánh chỉ các phần tử khoá. 5.2. Đối sánh biểu thức Ta có thể viết luật, sự kiện dưới dạng biểu thức. Với biểu thức ta có thể • Dùng cấu trúc cây nhị phân để biểu diễn • Phép thay thế các biến tự do trên cấu trúc cây cho phép sinh ra các sự kiện mới một cách dễ dàng, trực quan và có thể cài đặt được. Xét ví dụ sau Ví dụ 3.1 Aùp dụng luật x + y = y + x trên biểu thức (a + 2*b) + c*d • Biểu diễn biểu thức • Biểu diễn luật • Áp dụng luật cho đỉnh cộng (+) đầu tiên tìm thấy Bài tập Xét bài toán biến đổi biểu thức mệnh đề, hãy 1. Mô tả cấu trúc dữ liệu cho mệnh đề 2. Mô tả cấu trúc dữ liệu cho luật 3. Mô tả quá trình áp dụng luật đưa biểu thức về dạng chuẩn Tài liệu tham khảo 1 Trí tuệ nhân tạo - Đỗ Trung Tuấn, 1998 2 Trí tuệ nhân tạo, các phương pháp giải quyết vấn đề và kỹ thuật xử lý tri thức - Nguyễn Thanh Thủy 3 Trí tuệ nhân tạo, các phương pháp và ứng dụng - Bạch Hưng Khang - Hoàng Kiếm 4 Giải một bài toán trên máy tính như thế nào (tập 1&2) - Hoàng Kiếm 5 Lập trình C cho trí tuệ nhân tạo - Herbert Schildt 6 Introduction Artificial Intellegent & Expert System - Dan W Patterson 7 Problem Solving & Artificial Intellegent - Jean - Louis Laurière 8 Artificial Intellegence – Elaine Rich – Kevin Knight, 1991 9 Artificial Intellegence A Modern Approach – Stuart Russell – Peter Norvig, 1995 10 Turbo prolog

Các file đính kèm theo tài liệu này:

  • pdfv_bg_tri_tue_nhan_tao_5081_2021091.pdf
Tài liệu liên quan