một số bài toán nổi tiếng trong trí tuệ nhân tạo [giải thuật - cài đặt]

16 1.8K 0
một số bài toán nổi tiếng trong trí tuệ nhân tạo [giải thuật - cài đặt]

Đ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

1 MỘT SỐ BÀI TOÁN NỔI TIẾNG TRONG TRÍ TUỆ NHÂN TẠO http://ebooks-ict.blogspot.com/ I. Bài toán người đưa thư sử dụng giải thuật Heuristic 1. Phát biểu bài toán: Bài toán: Để tiết kiệm thời gian đi đưa thư trong một địa phương. Người đưa thư phải đi qua tất cả các điểm cần phát thư rồi trở về vị trí ban đầu với đường đi ngắn nhất. Bài toán có thể phát biểu lại như sau: Giả sử có một đồ thị có trọng số dương, tìm đường đi ngắn nhất qua tất cả các đỉnh của đồ thị rồi trở về đỉnh ban đầu. 2. Hạn chế khi sử dụng thuật toán tối ưu: Đồ thị có n đỉnh, khi đó thuật toán tối ưu cho bài toán này sẽ là thuật toán tìm đường đi ngắn nhất cho chu trình Haminton. Do đó thuật toán tối ưu sẽ có độ phức tạp là O( n!) à Không thể thực hiện thuật toán. -> cần Tìm một thuật giải Heuristic cho bài toán này. 3. Sử dụng thuật toán Heuristic cho bài toán người đưa thư: - Theo kinh nghiệm của con người trong thực tế thì khi ta đi trên những đ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 à sử dụng nguyên lý tham lam. - Thuật giải bài toán sử dụng nguyên lý tham lam: - Ví dụ về thuật giải trên: Với một đồ thị trọng số dương như hình bên. Nếu ta xuất phát từ đỉnh sổ 1, thì đỉnh tiếp theo phải đến là 2 ( vì cạnh 1-2 có trọng số nhỏ nhất so với các đỉnh chưa 2 đến của 1), như vậy tiếp theo ta sẽ đến các đỉnh theo thứ tự là 5, 3, 4, và trở về 1. Như vậy đường đi ngắn nhất theo giải thuật trình bày trên tìm được là: 1 + 3 + 2 + 1+ 7 = 14 4. Cài đặt thuật toán. - Ta có dạng ma trận hóa của đồ thị trong ví dụ ở mục 3, như hình bên: - Chương trình được viết trên môi trường visual C++ 6.0. - Input: một ma trận vuông bằng file “graph.txt “ có dạng như hình bên, hay nhập ma trận bằng tay. - Output: đường đi theo thuật giải Heuristic, và chi phí của đường đi đó. - Tổ chức dữ liệu chương trình: (hình bên) + n: là biến cho biết số đỉnh của đồ thị. + G: dùng để trỏ tới các giá trị của ma trận. + v[Gr.n + 1]: dùng để lưu trữ đường đi theo thuật giải Heuristic. + Gr.G[ i][j ]: đồ thị dưới dạng ma trận. + x: là đỉnh đầu tiên xuất phát. + initGraph(Graph &Gr): Hàm dùng để khởi tạo một đồ thị mới từ cấu trúc đã tổ chức. + ReadGraph(Graph &Gr): dùng để đọc đồ thị từ file .txt + inputHandle( Graph &Gr): dùng để nhập đồ thị bằng tay. + outputGraph(Graph Gr): dùng để xuất đồ thị đã được nhập ra màn hình. 3 + testGraph(int a, int* v, Graph Gr): Kiểm tra điểm đang duyệt có trùng với điểm đã duyệt trên ma trận không. Được gọi trong hàm topNear(…). + topNear(int a, Graph Gr, int* v) : Hàm tìm đỉnh kế tiếp theo thuật giải Heuristic. Được gọi lại trong hàm FindWay(…) . + FindWay(int x, Graph Gr, int* v): Hàm tìm đường đi theo giải thuật Heuristic. Dựa theo cách tìm đường đi có trọng số nhỏ nhất để đi bước tiếp theo. - Giao diện chương trình: console Aplication. 4 Khi thực thi, chương trình sẽ yêu cầu chọn nhập ma trận đồ thị bằng tay hay bằng file “graph.txt”. Ví dụ như hình trên chọn nhập ma trận bằng file txt. Ta nhập tiếp đỉnh bắt đầu (ở đây nhập 1), thì chương trình sẽ cho ra đáp án cho ví dụ trên: Đường đi là: 1 – 2 – 5 – 3 – 4 – 1 Chi phí cho đường đi này theo giải thuật Heuristic là: 14. Nếu như chọn cách nhập ma trận bằng tay thì ta phải nhập từng giá trị của ma trận vào. - Nhấn ESC để thoát khỏi chương trình, Phím bất kỳ để tiếp tục chương trình với cách duyệt từ đỉnh khác. 5. Đánh giá thuật giải Heuristic của bài toán: - Ưu điểm: Thuật giải Heuristic cho bài toán người đưa thư có độ phức tạp O(n 2 ) tốt hơn rất nhiều so với thuật toán tối ưu ( có độ phức tạp O( n!) ). - Nhược điểm: thuật giải có những hạn chế, chưa cho ra lời giải chính xác. 5 -> Kết luận: Thuật giải Heuristic cho bài toán người đưa thư tuy chưa đưa ra được lời giải chính xác cho bài toán, nhưng nó cho ra một lời giải có thể chấp nhận được với độ phức tạp thấp hơn nhiều so với thuật toán tối ưu. 6 II. Lan truyền kích hoạt trên mạng ngữ nghĩa – spreading activation in semantic network. Posted on 15/12/2010by thanhcuong1990 1. Đôi điều cần biết về về giải thuật lan truyền kích hoạt(spreading activation) - Lan truyền kích hoạt (spreading activation) là một phương pháp để tìm kiếm các mạng lưới liên kết, các mạng thần kinh(neural networks), hoặc mạng ngữ nghĩa (semantic networks). Quá trình tìm kiếm được bắt đầu bằng cách ghi nhãn một tập hợp các nút nguồn (ví dụ các khái niệm trong mạng ngữ nghĩa) với kích hoạt hay “activation” và sau đó lặp đi lặp lại các lan truyền hay “spreading” tiếp tục kích hoạt các nút tiếp theo liên quan đến nút nguồn. Trong kích hoạt lan truyền, các nút đã được kích hoạt, và các nút chưa kích hoạt được lưu lại để phục vụ cho việc tìm nút lan truyền tiếp theo hợp lý hơn. - Lan truyền kích hoạt được ứng dụng trong truy suất thông tin, bằng việc sử dụng ngữ nghĩa của một mạng lưới đại diện cho các nút tài liệu và các từ ngữ có trong văn bản đó. 2. Thuật toán: Cho một đồ thị có hướng được thể hiện bởi mảng Nodes[1 N], mỗi kích hoạt liên quan đến giá trị A[i] là một số thực nằm trong khoảng [0.0 1.0]. Link[i, j] sẽ kết nỗi với nguồn node[i] với mục tiêu là node[j]. Mỗi liên kết có một trọng số là W[i, j] thường là một số thực nằm trong dãy [0.0 1.0]. Các tham số: - Ngưỡng kích hoạt F là một số thực nằm trong khoảng [0.0 1.0]. - Yếu tố suy biến D (Decay factor) là một số thực nằm trong khoảng [0.0, , 1.0]. Các bước thực hiện thuật toán: - Khởi tạo đồ thị, cài đặt tất cả các kích hoạt giá trị A[i] = 0, thiết lập một hoặc thêm các nút gốc để kích hoạt một giá trị ban đầu lớn hơn ngưỡng F. Giá trị khởi tạo thông thường là 1. - Đối với mỗi node[i] chưa được kích hoạt trong đồ thị có một kích hoạt A[i] lớn hơn giá trị node ngưỡng kích hoạt F. 7 - Đối với mỗi Link[i, j] kết nối node[i] với mục tiêu node[j] , điều chỉnh: A [j] = A [j] + (A [i] * W [i, j] * D) trong đó D là yếu tố suy biến. - Nếu một nút nhận được một mục tiêu điều chỉnh giá trị kích hoạt của nó sẽ vượt quá 1.0, sau đó đặt giá trị kích hoạt mới của nó là 1.0. Tương tự như vậy, duy trì 0.0 như một giá trị ràng buộc kích hoạt thấp hơn, các nút mục tiêu của nó sẽ nhận được giá trị điều chỉnh xuống dưới 0.0. - Khi một nút đã kích hoạt nó có thể kích hoạt lại một lần nữa, mặc dù các biến thể của thuật toán cơ bản cho phép bỏ qua việc lặp đi lặp lại và vòng qua đồ thị. - Các nút nhận được giá trị kích hoạt mới có vượt quá ngưỡng kích hoạt F được đánh dấu để kích hoạt vào chu trình kích hoạt tiếp theo. - Nếu kích hoạt bắt nguồn từ nhiều hơn một nút, một biến của thuật toán sẽ cho phép đánh dấu các kích hoạt đã đi qua để phân biệt với các con đường chưa được kích hoạt trên đồ thị. - Thủ tục chấm dứt khi một trong hai không có thêm các nút để kích hoạt trong trường hợp các dấu hiệu chuyển từ nhiều nguồn gốc, khi có nhiều hơn một con đường xuất phát từ một nút. Các biến sử dụng trong thuật toán cho phép lặp đi, lặp lại hoặc sa thải nút hoặc dòng kích hoạt trong đồ thị, chấm dứt sau khi một trạng thái kích hoạt ổn định, đối với một số trường, được đạt tới, hoặc số lần lặp vượt quá mức tối đa. 3. Ví dụ: 8 Trong ví dụ này, nút gốc của kích hoạt lan truyền là node 1 với giá trị kích hoạt ban đầu là 1(100%). Mỗi liên kết có trọng số là 0.9. Các yếu tố suy biến là 0.85. Có 4 chu kỳ lan truyền kích hoạt xảy ra (thể hiện qua 4 màu của đồ thị trên). Màu sắc và độ bão hòa chỉ ra các giá trị kích hoạt khác nhau. 9 III. Giải bài toán tam giác sử dụng mạng ngữ nghĩa – Solution for triangle using semantic network Posted on 16/12/2010by thanhcuong1990 Bài viết này mô tả bài toán giải tam giác bằng mạng ngữ nghĩa (chương trình nhỏ) kèm theo chương trình demo viết trên Visual studio 2010 (C#). Tài liệu tham khảo hơi nhiều chỗ nên hiện giờ chưa nhớ hết. Bài này chỉ demo 5 công thức trong tam giác được lấy từ ví dụ của giáo trình trường Đại học công nghệ thông tin – xuất bản năm 2007. 1. Sơ lược về bài toán tam giác bằng mạng ngữ nghĩa. Có 22 yếu tố liên quan đến cạnh và góc của tam giác. Để xác định một tam giác thì ta phải có 3 yếu tố. Trong đó phải có yếu tố cạnh. Như vậy có khoảng vài ngàn cách để xây dựng hay xác định một tam giác. Theo thống kê thì có khoảng trên 200 công thức liên quan đến cạnh và góc của tam giác. Để giải bài toán này bằng mạng ngữ nghĩa, ta phải sử dụng khoảng 200 đỉnh để chứa công thức và khoảng 22 đỉnh để chứa các yếu tố của tam giác. Mạng ngữ nghĩa cho bài toán này có cấu trúc như sau: Đỉnh của đồ thị bao gồm 2 loại: - Đỉnh chứ công thức (ký hiệu bằng hình chữ nhật). - Đỉnh chứa các yếu tố tam giác (ký hiệu bằng hình tròn). Cung: chỉ nối từ đỉnh hình tròn đến đỉnh hình chữ nhật cho biết yếu tố tam giác xuất hiện trong công thức nào(không có trường hợp cung nối giữa hai đỉnh hình tròn hay nối giữa 2 đỉnh hình chữ nhật). * Lưu ý : trong một công thức liên hệ giữa n yếu tố của tam giác, ta giả định rằng nếu đã biết giá trị của n-1 yếu tố thì sẽ tính được giá trị của yếu tố còn lại. Chẳng hạn như trong công thức tổng 3 góc của tam giác bằng 180 0 thì khi biết được hai góc, ta sẽ tính được góc còn lại. 2. Cơ chế thực hiện và giải thuật: Cơ chế suy diễn thực hiện theo thuật toán “loang” đơn giản sau : B1 : Kích hoạt những đỉnh hình tròn đã cho ban đầu (những yếu tố đã có giá trị)B2 : Lặp lại bước sau cho đến khi kích hoạt được tất cả những đỉnh ứng với những yếu tố cần tính hoặc không thể 10 kích hoạt được bất kỳ đỉnh nào nữa.Nếu một đỉnh hình chữ nhật có cung nối với n đỉnh hình tròn mà n-1 đỉnh hình tròn đãđược kích hoạt thì kích hoạt đỉnh hình tròn còn lại (và tính giá trị đỉnh còn lại này thông qua công thức ở đỉnh hình chữ nhật). Giả sử ta có mạng ngữ nghĩa để giải bài toán tam giác như hình sau: (Ví dụ này cũng sẽ được sử dụng trong source code demo chương trình kèm theo). Ví dụ : “Cho hai góc a, b và chiều dài cạnh a của tam giác. Tính chiều dài đường cao hC”.Với mạng ngữ nghĩa đã cho trong hình trên. Các bước thi hành của thuật toán như sau : Bắt đầu : đỉnh a, b, acủa đồ thị được kích hoạt. - Công thức (1) được kích hoạt (vìa, b,a được kích hoạt). Từ công thức (1) tính được cạnh b. Đỉnh b được kích hoạt. - Công thức (4) được kích hoạt (vì a, b). Từ công thức (4) tính được góc d - Công thức (2) được kích hoạt (vì 3 đỉnh b,d,b được kích hoạt). Từ công thức (2) tính được cạnh c. Đỉnh cđược kích hoạt. - Công thức (3) được kích hoạt (vì 3 đỉnh a, b, c được kích hoạt) . Từ công thức (3) tính được diện tích S. Đỉnh S được kích hoạt. - Công thức (5) được kích hoạt (vì 2 đỉnh S, c được kích hoạt). Từ công thức (5) tính được hC. Đỉnh hC được kích hoạt. - Giá trị hC đã được tính. Thuật toán kết thúc. [...]... đủ n-1 yếu tố Trở lại mạng ngữ nghĩa đã cho Quá trình thi hành kích hoạt được diễn ra như sau : Mảng biểu diễn mạng ngữ nghĩa ban đầu (1) (2) (3) (4) (5) a -1 0 0 -1 0 b -1 -1 0 -1 0 d 0 -1 0 -1 0 a -1 0 -1 0 0 b -1 -1 -1 0 0 c 0 -1 -1 0 -1 S 0 0 -1 0 -1 12 hC 0 0 0 0 -1 Khởi đầu : đỉnh a, b, a của đồ thị được kích hoạt (1) (2) (3) (4) (5) a 1 0 0 1 0 b 1 1 0 1 0 d 0 -1 0 -1 0 a 1 0 1 1 0 b -1 -1 -1 ... c 0 -1 -1 0 -1 S 0 0 -1 0 -1 hC 0 0 0 0 -1 Trên cột (1), hiệu (1+1+1 – (-1 )) = 4 nên dòng b sẽ được kích hoạt (1) (2) (3) (4) (5) a 1 0 0 1 0 b 1 1 0 1 0 d 0 -1 0 -1 0 a 1 0 1 1 0 b 1 1 1 0 0 c 0 -1 -1 0 -1 13 S 0 0 -1 0 -1 hC 0 0 0 0 -1 Trên cột (4), hiệu (1+1+1 – (-1 )) = 4 nên dòng d sẽ được kích hoạt (1) (2) (3) (4) (5) a 1 0 0 1 0 b 1 1 0 1 0 d 0 1 0 1 0 a 1 0 1 1 0 b 1 1 1 0 0 c 0 -1 -1 0 -1 S... trên chương trình - Chọn giá trị cần tính trong combobox phía bên phải - Nhấn bắt đầu tính để thực hiện tính tam giác theo mạng ngữ nghĩa đã được cài đặt - Để bắt đầu với bài toán mới, nhấn vào button Làm bài khác 5 Tài liệu tham khảo: - Giáo trình Trí Tuệ Nhân Tạo – Đại học công nghệ thông tin – GS.TSKH Hoàng Kiếm, Ths Đinh Nguyễn Anh Dũng – Xuất bản năm 2007 - Model Driven Architecture and Ontology... -1 S 0 0 -1 0 -1 hC 0 0 0 0 -1 Trên cột (2), hiệu (1+1+1 + (1)) = 4 nên dòng c được kích hoạt (1) (2) (3) (4) (5) a 1 0 0 1 0 b 1 1 0 1 0 d 0 1 0 1 0 A 1 0 1 1 0 B 1 1 1 0 0 14 C 0 1 1 0 1 S 0 0 -1 0 -1 hC 0 0 0 0 -1 Trên cột (3), hiệu (1+1+1 – (-1 )) = 4 nên dòng S được kích hoạt (1) (2) (3) (4) (5) a 1 0 0 1 0 b 1 1 0 1 0 d 0 1 0 1 0 a 1 0 1 1 0 b 1 1 1 0 0 c 0 1 1 0 1 S 0 0 1 0 1 hC 0 0 0 0 -1 Trên...3 Xây dựng chương trình giải bài toán tam giác bằng mạng ngữ nghĩa theo ví dụ trên Chương trình được xây dựng trên môi trường visual studio 2010, ngôn ngữ C# Giao diện chương trình demo ví dụ trên Về mặt chương trình, ta có thể cài đặt mạng ngữ nghĩa giải bài toán tam giác bằng một mảng hai chiều A trong đó: Cột : ứng với công thức Mỗi cột ứng với một công thức tam giác khác nhau (đỉnh hình... thực hiện thao tác “kích hoạt” một đỉnh hình tròn, ta đặt giá trị của toàn dòng ứng với yếu tố tam giác bằng 1 Để kiểm tra xem một công thức đã có đủ n-1 yếu tố hay chưa (nghĩa là kiểm tra điều kiện “đỉnh hình chữ nhật có cung nối với n đỉnh hình tròn mà n-1 đỉnh hình tròn đã được kích hoạt“), ta chỉ việc lấy hiệu giữa tổng số ô có giá trị bằng 1 và tổng số ô có giá trị -1 trên cột ứng với công thức... Dòng: ứng với yếu tố tam giác Mỗi dòng ứng với một yếu tố tam giác khác nhau (đỉnh hình tròn) Phần tử A[i, j] = -1 nghĩa là trong công thức ứng với cột j có yếu tố tam giác ứng với cột i Ngược lại A[i,j] = 0 // Khai báo biến private float[,] a = new float[8, 5]; // Khởi tạo các yếu tố trong tam giác theo ma trận lúc đầu pivate void init() { float temp = -1 ; // Bien tam 11 for (int i = 0; i < 8; i++... nghĩa: // Lấy vị trí yếu tố chưa biết private int GetElementNotKnow(int k) // Kích hoạt yếu tố chưa biết private void activationElementKnow() 15 // Kích hoạt theo cơ chế lan truyền private void spreadingActivation(int j, int ElementNotKnow) // Xử lý private void Solution() 4 Cách sử dụng chương trình demo: - Nhập vào các giá trị lúc đầu của tam giác vào các textbox màu vàng trên chương trình - Chọn giá trị... Nguyễn Anh Dũng – Xuất bản năm 2007 - Model Driven Architecture and Ontology Development – Tác giả: Dragan Gasevic, Dragan Djuric, Vladan Devedzic - http://en.wikipedia.org/wiki/Semantic_network http://en.wikipedia.org/wiki/Spreading_activation - http://ebooks-ict.blogspot.com/ 16 . 1 MỘT SỐ BÀI TOÁN NỔI TIẾNG TRONG TRÍ TUỆ NHÂN TẠO http://ebooks-ict.blogspot.com/ I. Bài toán người đưa thư sử dụng giải thuật Heuristic 1. Phát biểu bài toán: Bài toán: Để tiết. -1 0 0 -1 0 b -1 -1 0 -1 0 d 0 -1 0 -1 0 a -1 0 -1 0 0 b -1 -1 -1 0 0 c 0 -1 -1 0 -1 S 0 0 -1 0 -1 13 hC 0 0 0 0 -1 Khởi đầu : đỉnh a, b, a của. tham số: - Ngưỡng kích hoạt F là một số thực nằm trong khoảng [0.0 1.0]. - Yếu tố suy biến D (Decay factor) là một số thực nằm trong khoảng [0.0, , 1.0]. Các bước thực hiện thuật toán: - Khởi

Ngày đăng: 17/10/2014, 07:30

Từ khóa liên quan

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

Tài liệu liên quan