1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu liên kết giữa prolog và c để giải quyết bài toán đồ thị tự đẳng cấu

64 19 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 64
Dung lượng 1,78 MB

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC VINH LUẬN VĂN THẠC SỸ Chuyên ngành: CÔNG NGHỆ THÔNG TIN Mã ngành: 60.48.02.01 ĐỀ TÀI NGHIÊN CỨU LIÊN KẾT GIỮA PROLOG VÀ C ĐỂ GIẢI QUYẾT BÀI TOÁN ĐỒ THỊ TỰ ĐẲNG CẤU Người hướng dẫn: TS NGUYỄN NGỌC HIẾU Người thực hiện: NGUYỄN THỊ HÀ Vinh, tháng 12/2017 MỤC LỤC MỤC LỤC .1 DANH MỤC CÁC TỪ VIẾT TẮT .3 MỞ ĐẦU .4 Sự cần thiết vấn đề nghiên cứu .4 Mục tiêu nghiên cứu Đối tượng phạm vi nghiên cứu 3.1 Đối tượng 3.2 Phạm vi Nội dung nghiên cứu .6 Cấu trúc luận văn CHƯƠNG 1: NGÔN NGỮ PROLOG .7 1.1 Giới thiệu 1.2 Các thuật ngữ Chương trình liệu: 1.3.1 Dữ liệu kiểu liệu 1.3.2 Các phép toán số học 1.3.3 Sử dụng biến chương trình .10 1.4 Sự kiện luật 12 1.4.1.Sự kiện: .12 1.4.2 Luật 12 1.4.3 Phân biệt kiện luật 12 1.5 Cấu trúc chương trình 13 1.6 Cơ chế tìm câu trả lời .16 1.6.1 Phép hợp 16 1.6.2 Cơ chế tìm câu trả lời 17 1.6.3 Sự quay lui 18 1.6.4 Nhát cắt 19 1.7 Tiểu kết chương 20 Chương LIÊN KẾT GIỮA PROLOG VÀ THƯ VIỆN NAUTY C 21 2.1 Thư viện Nauty C 21 2.1.1 Isomorphism and Automorphism 21 2.1.2 Thuật toán Nauty- Phương pháp tinh chỉnh cá nhân hóa 22 2.1.3 Thư viện Nauty C với toán đồ thị đẳng cấu 29 2.2 Liên kết prolog Nauty C 30 2.3 Tổng quan SWI- Prolog 31 2.4 Tiểu kết chương 32 Chương 3: ỨNG DỤNG GIẢI BÀI TOÁN ĐỒ THỊ ĐẲNG CẤU 33 3.1 Đồ thị đẳng cấu 33 3.1.1 Các khái niệm 33 3.1.2 Các ví dụ minh họa đồ thị đẳng cấu 37 3.2 Ứng dụng 39 3.2.1 Ví dụ tạo liệt kê đồ thị: 39 3.2.2 Ví dụ đẳng cấu hai đồ thị 46 3.2.3 Thực chuyển đổi định dạng đồ thị 50 3.3 Cài đặt chạy chương trình minh họa 54 3.4 Ứng dụng thực tế 58 3.5 Tiểu kết chương 59 KẾT LUẬN 60 TÀI LIỆU THAM KHẢO 61 TIẾN ĐỘ THỰC HIỆN ĐỀ TÀI 62 DANH MỤC CÁC TỪ VIẾT TẮT Isomorphism: Đẳng cấu Automorphism: Tự đẳng cấu Boolean: kiểu liệu với hai giá trị True (đúng) false (sai) GI : Vấn đề đẳng cấu đồ thị Coroutining : cho phép trì hỗn việc thực mục tiêu Prolog thật họ định cách an toàn API: Một giao diện lập trình ứng dụng (tiếng Anh Application Programming Interface, viết tắt API) giao diện mà hệ thống máy tính hay ứng dụng cung cấp phép yêu cầu dịch vụ tạo từ chương trình máy tính khác, và/hoặc cho phép liệu trao đổi qua lại chúng REST: mơ hình cung cấp tiêu chuẩn hệ thống máy tính web, giúp hệ thống giao tiếp với dễ dàng HTML5: ngơn ngữ cấu trúc trình bày nội dung cho World Wide Web CSS (Cascading Style Sheets ): tập tin định kiểu theo tầng dùng để miêu tả cách trình bày tài liệu viết ngơn ngữ HTML XHTML Pengines: Lập trình Web Logic dễ dàng Emacs: trình soạn thảo văn đa chức GNU Emacs: trình soạn thảo văn Emacs tạo người sáng lập GNU Project Richard Stallman Eclipse: phần mềm, nhà phát triển sử dụng để xây dựng ứng dụng J2EE JavaScript: ngơn ngữ lập trình HTML Web Git: Hệ thống Quản lý Phiên Phân tán, phát triển nhằm quản lý mã nguồn (source code) hữu hiệu Linux URL: đường dẫn đến website cố định internet MỞ ĐẦU Sự cần thiết vấn đề nghiên cứu Trong toán học tin học, lý thuyết đồ thị nghiên cứu tính chất đồ thị Đồ thị biểu diễn nhiều cấu trúc, nhiều toán thực tế biểu diễn đồ thị Ví dụ, cấu trúc liên kết website biểu diễn đồ thị có hướng sau: đỉnh trang web có website, tồn cạnh có hướng nối từ trang A tới trang B A có chứa liên kết tới B Lý thuyết đồ thị ứng dụng nhiều phân tích lưới Các lưới có nhiều ứng dụng khía cạnh thực tiễn lý thuyết đồ thị, chẳng hạn, phân tích lưới dùng để mơ hình hố phân tích mạng lưới giao thơng nhằm "phát hiện" hình dáng Internet Lý thuyết đồ thị dùng nghiên cứu phân tử … Do vậy, phát triển thuật toán xử lý đồ thị mối quan tâm khoa học máy tính Đồ thị tự đẳng cấu (Đồ thị automorphism) hình thức đối xứng, đồ thị ánh xạ lên thân giữ kết nối cạnh-đỉnh Nghĩa là, đẳng cấu đồ thị từ G đến Ứng dụng đồ thị automorphism bao gồm vẽ đồ thị ví dụ việc tìm nhóm automorphism cho nhiều đồ thị, giải trường hợp có cấu trúc Boolean , đối xứng phân tử dự đốn giải thích tính chất hóa học Vì việc tìm thuật toán tối ưu đẳng cấu đồ thị quan trọng khám phá vấn đề tìm kiếm đồ thị liệt kê Prolog ngơn ngữ lập trình, xuất từ năm 1972 (do Alain Colmerauer Robert Kowalski thiết kế) Mục tiêu Prolog giúp người dùng mơ tả lại tốn ngơn ngữ logic, dựa đó, máy tính tiến hành suy diễn tự động dựa vào chế suy diễn có sẵn (hợp nhất, quay lui tìm kiếm theo chiều sâu) để tìm câu trả lời cho người dùng Prolog sử dụng nhiều ứng dụng trí tuệ nhân tạo ngơn ngữ học khoa học máy tính (đặc biệt ngành xử lý ngơn ngữ tự nhiên mục tiêu thiết kế ban đầu nó) Cú pháp ngữ nghĩa Prolog đơn giản sáng sủa, người Nhật coi tảng để xây dựng máy tính hệ thứ năm mà đó, thay phải mơ tả cách giải tốn máy tính, người cần mơ tả tốn máy tính hỗ trợ họ nốt phần lại Nauty thủ tục ngôn ngữ C hiệu để xác định nhóm tự đẳng cấu đồ thị có đỉnh Nauty tạo đồng đẳng dán nhãn định dạng chuẩn đồ thị, để hỗ trợ kiểm tra đẳng cấu Nó sở chương trình để tạo tất đồ thị 11-đỉnh mà khơng có isomorphs, kiểm tra hầu hết đồ thị 100 đỉnh giây Nauty chuyển thành công đến loạt hệ điều hành trình biên dịch C Vì giản đơn cú pháp ngữ nghĩa prolog hiệu chương trình nauty C để xác định nhóm tự đẳng cấu nên tơi chọn nghiên cứu đến kết hợp prolog C để tạo ra chương trình tìm kiếm liệt kê đồ thị tối ưu Mục tiêu nghiên cứu Nhằm nghiên cứu lý thuyết khái niệm prolog, thư viện nauty C đẳng cấu đồ thị, kết hợp prolog với C việc tìm kiếm đồ thị tự đẳng cấu Đối tượng phạm vi nghiên cứu 3.1 Đối tượng 3.1.1 Nghiên cứu lý thuyết - Nghiên cứu sở lý thuyết kỹ thuật lập trình ngơn ngữ lập trình prolog - Nghiên cứu chương trình Nauty với phương pháp tinh chỉnh cá nhân hóa cho đồ thị đẳng cấu - Một số khái niệm đồ thị tự đẳng cấu ví dụ minh họa - Sự liên kết prolog với thư viện nauty C tìm hiểu số vị từ sử dụng để thực liên kết Prolog C - Ứng dụng liên kết Prolog C cho toán đồ thị tự đẳng cấu 3.1.2 Nghiên cứu thực nghiệm Cài đặt chương trình ngơn ngữ prolog để giải toán đồ thị tự đẳng cấu 3.2 Phạm vi Luận văn tập trung nghiên cứu kết hợp ngôn ngữ lập trình prolog với C ứng dụng cho tốn đồ thị đẳng cấu Nội dung nghiên cứu - Tổng quan ngơn ngữ lập trình prolog: Các thuật ngữ, kiện luật, cấu trúc chung chương trình chế tìm câu trả lời prolog - Thư viện nauty, thực liên kết Nauty prolog, giới thiệu SWI-prolog - Các khái niệm, ví dụ minh họa tính đẳng cấu đồ thị, đồ thị tự đẳng cấu - Các vị từ sử dụng chương trình vị từ thực thi việc liên kết prolog C để giải toán đồ thị Ramsey modul đẳng cấu - Cài đặt chương trình thực nghiệm môi trường SWI-prolog Cấu trúc luận văn Luận văn bao gồm: Phần 1: Phần mở đầu: Phần 2: Phần nội dung: bao gồm chương: Chương NGÔN NGỮ PROLOG Chương LIÊN KẾT GIỮA PROLOG VÀ C Chương 3: ỨNG DỤNG GIẢI BÀI TOÁN ĐỒ THỊ TỰ ĐẲNG CẤU Phần 3: Phần kết luận nêu kết đạt hướng phát triển đề tài CHƯƠNG 1: NGÔN NGỮ PROLOG 1.1 Giới thiệu Prolog ngơn ngữ lập trình Tên gọi Prolog xuất phát từ cụm từ tiếng Pháp Programmation en logique, nghĩa "lập trình theo lơ gích" Xuất từ năm 1972 (do Alain Colmerauer Robert Kowalski thiết kế), mục tiêu Prolog giúp người dùng mô tả lại tốn ngơn ngữ logic, dựa đó, máy tính tiến hành suy diễn tự động dựa vào chế suy diễn có sẵn (hợp nhất, quay lui tìm kiếm theo chiều sâu) để tìm câu trả lời cho người dùng Prolog sử dụng nhiều ứng dụng trí tuệ nhân tạo ngôn ngữ học khoa học máy tính (đặc biệt ngành xử lý ngơn ngữ tự nhiên mục tiêu thiết kế ban đầu nó) Cú pháp ngữ nghĩa Prolog đơn giản sáng sủa, người Nhật coi tảng để xây dựng máy tính hệ thứ năm mà đó, thay phải mơ tả cách giải tốn máy tính, người cần mơ tả tốn máy tính hỗ trợ họ nốt phần cịn lại Một chương trình Prolog bao gồm luật biểu diễn dạng mệnh đề Horn Một mệnh đề Horn biểu diễn kiện không đúng, xảy hay không xảy Một mệnh đề Horn có dạng: Head: -Body (Trong Head vị từ logic, cịn Body rỗng tập vị từ logic) Phần lớn dịch chương trình Prolog yêu cầu vị từ logic phần đầu mệnh đề Horn vị từ dương (khơng có dấu phủ định kèm), vị từ phần Body có dấu phủ định kèm Chương trình logic mà khơng có xuất dấu phủ định kèm gọi chương trình logic xác định, cịn khơng gọi chương trình logic thường 1.2 Các thuật ngữ Một chương trình Prolog sở liệu gồm mệnh đề (clause) Mỗi mệnh đề xây dựng từ vị từ Một vị từ có nhiều nguyên tử logic (logic atom) Mỗi logic atom biểu diễn quan hệ hạng (term) Term sơ cấp (elementary term) hằng, biến phức hợp (compound term) Các term phức hợp biểu diễn đối tượng phức tạp toán xét Term phức hợp hàm tử (functor) có đối số (argument), functor có dạng:  Tên_functor(Đối_1, Đối_2,…, Đối_n) Trong đó:  Tên_functor chuỗi gồm chữ chữ số bắt đầu chữ thường  Các đối biến, term sơ cấp phức hợp Mệnh đề kiện, luật hay câu hỏi Prolog quy ước sau mệnh đề cần có dấu chấm để kết thúc Chương trình liệu: 1.3.1 Dữ liệu kiểu liệu Prolog có hai dạng kiểu liệu: sơ cấp có cấu trúc  Kiểu liệu sơ cấp: gồm số kiểu liệu định nghĩa sẵn Prolog như: - char: kiểu ký tự, sử dụng đặt cặp dấu nháy đơn.Ví dụ: ‘a’, ‘b’, … - string: kiểu chuỗi, sử dụng đặt cặp dấu nháy đơi Ví dụ: “hoc vien cao hoc” - integer: kiểu số nguyên - unsigned: kiểu số nguyên dương không dấu - real: kiểu số thực  Kiểu liệu có cấu trúc: tương tự cấu trúc ghi, đối tượng có nhiều thành phần, thành phần lại cấu trúc Prolog xem thành phần đối tượng xử lý cấu trúc Để tổ hợp thành phần thành đối tượng nhất, Prolog sử dụng hàm tử Ví dụ: Cấu trúc gồm thành phần ngày tháng năm tạo hàm tử date Ngày 19/2/1984 viết sau : date(19, february, 1984) Mọi thành phần hàm tử date (hai số nguyên nguyên tử) Tuy nhiên ta thay thành phần biến hay cấu trúc khác Chẳng hạn ta thay thành phần thứ biến Day (chú ý tên biến bắt đầu chữ hoa) thể ngày tháng : date(Day, february, 1984) G Tồn song ánh từ G sang C: C 1 G qua C 5 >1 24 2 >5 >2 3 >4 >3 Hình 3.12 Song ánh từ G1 qua C Vậy kết thu đồ thị C đẳng cấu với đồ thị G cho, với hoán vị [1, 5, 2, 4, 3] Bài toán 2: Cho đồ thị, kiểm tra đồ thị có đẳng cấu hay khơng, có hốn vị sử dụng Đầu vào: Đồ thị G1 G2 Đầu ra: Nếu đồ thị đẳng cấu hiển thị hốn vị sử dụng Nếu đồ thị không đẳng cấu kết trả lời là: False Đầu vào đồ thị G1 G2 Đầu đồ thị C đẳng cấu với G1 G2 Hình 3.13:Minh họa đồ thị G1, G2 đồ thị C 48 Để thực toán ta sử dụng vị từ Isomorphic_graph /6 kiểm tra hai đồ thị đẳng cấu Nó có dạng: isomorphic_graphs(N, Graph1, Graph2, Perm, Canonic, Opts):'$isomorphic'(N, Graph1, Graph2, Perm, Canonic, Opts) Việc kiểm tra hai đồ thị đầu vào N đỉnh, Graph1và Graph2 đẳng cấu qua hoán vị ứng dụng Perm, hai Canonic hình thức kinh điển chia sẻ vị từ thực Trong trường hợp Graph1và Graph2 không đẳng cấu vị từ không thực Bây thực kiểm tra câu lệnh sau: ?- N=5, G1 = [[0,1,0,1,1], [1,0,1,0,0], [0,1,0,1,0], [1,0,1,0,1], [1,0,0,1,0]], G2 = [[0,1,0,1,1], [1,0,1,0,0], [0,1,0,0,1], [1,0,0,0,1], [1,0,1,1,0]], isomorphic_graphs(N, G1, G2, P, C, []) Nếu đồ thị G1 G2 đẳng cấu kết trả về: N=5, G1 = [[0,1,0,1,1], [1,0,1,0,0], [0,1,0,1,0], [1,0,1,0,1], [1,0,0,1,0]], G2 = [[0,1,0,1,1], [1,0,1,0,0], [0,1,0,0,1], [1,0,0,0,1], [1,0,1,1,0]], P =[1,2,3,5,4], C = [[0,1,0,1,0], [1,0,0,0,1], [0,0,0,1,1], [1,0,1,0,1], [0,1,1,1,0]] Ta cần chứng minh tính đắn kết thu Để qua sát cách trực quan ta biểu diễn đồ thị G1, G2, C dạng đồ họa Ta thấy tồn song ánh từ G1 đến C, từ G2 đến C, từ G1 đến G2 nên ta có G1 G2 đẳng cấu với 49 G2 G1 11 5 4 2 3 C Hình 3.14: Song ánh đồ thị Ta thực kiểm tra với đồ thị khác: ?- N=5, G1 = [[0,1,0,1,0], [1,0,1,0,0], [0,1,0,1,0], [1,0,1,0,1], [1,0,0,1,1]], G2 = [[0,1,0,1,1], [1,0,1,0,0], [0,1,0,0,1], [1,0,0,0,1], [1,0,1,1,0]], isomorphic_graphs(N, G1, G2, P, C, []) Do G1 G2 không đẳng cấu, vị từ không thực kết trả là: False 3.2.3 Thực chuyển đổi định dạng đồ thị Trong gói nauty ngồi việc hỗ trợ cho đồ thị đẳng cấu, hỗ trợ cho việc thực chuyển đổi định dạng đồ thị Các định dạng hỗ trợ bao gồm: ma trận kề, danh sách kề, danh sách cạnh, định dạng graph6 50 Ở ta sử dụng vị từ graph_convert/5 vị từ thực chuyển đổi đồ thị khác graph_convert(N, InFmt, OutFmt, In, Out) :'$graph_convert'(N, InFmt, In, OutFmt, Out) Trong N số đỉnh đồ thị, InFmt định dạng đồ thị đầu vào, OutFmt định dạng đồ thị đầu ra, In biến đầu vào, Out biến đầu Ví dụ: để chuyển đổi đồ thị danh sách đồ thị từ định dạng graph6 sang định dạng ma trận kề prolog graph6 định dạng để lưu trữ đồ thị vô hướng theo cách nhỏ gọn, sử dụng ký tự ASCII in Các tệp định dạng có loại văn chứa dòng biểu đồ Graph6 phù hợp với đồ thị nhỏ đồ thị dày đặc lớn Theo Brendan McKay để mô tả mã hóa nguyên tắc chung là: Tất số mơ tả có số thập phân trừ hiển nhiên nhị phân Ngoài tiêu đề, ký tự cuối dịng ký tự ":", ";" "&" bắt đầu dòng, tất byte có giá trị phạm vi 63-126 (tất ký tự ASCII in) Một tập tin đối tượng tệp văn bản, quy ước cuối sử dụng cục tốt; nhiên thói quen đầu vào thư viện C phải hiển thị tiêu chuẩn đơn LF cuối dịng cho chương trình) Một bit vector x có chiều dài k biểu diễn sau Ví dụ: 1000101100011100 (1) Thêm vào bên phải với để làm cho độ dài bội số Ví dụ: 100010110001110000 (2) Chia thành nhóm gồm bit Ví dụ: 100010 110001 110000 (3) Thêm 63 vào nhóm, coi chúng số nhị phân lớn Ví dụ: 97 112 111 Các giá trị sau lưu trữ byte Vì vậy, số byte trần (k / 6) Cho R (x) biểu thị biểu diễn x chuỗi byte 51 Mô tả định dạng graph6 sau: Một đồ thị G có n đỉnh Ta biểu diễn cạnh theo thứ tự tạo thành ma trận G dạng bit vector x chiều dài n (n-1) / 2, sử dụng thứ tự (0,1), (0,2), (1,2), (0,3), (1,3), (2,3), , (n-1, n) Sau đó, đồ thị biểu diễn N (n) R (x) Ví dụ: Giả sử n = G có cạnh 0-2, 0-4, 1-3 3-4 x = 10 010 1001, thêm bit 00 vào bên phải 010010 100100, đổi hệ thập phân cộng 63 vào nhóm ta R(x)= 81 99 Sau N (n) = 68 R (x) = 81 99 Vì vậy, đồ thị 68 81 99, đối chiếu với bảng mã ASCII đồ thị có dạng DQc Trở lại với chương trình prolog, để chuyển đổi đồ thị từ định dạng graph6 sang định dạng ma trận kề, ta thực truy vấn: ?- G= 'DRo', graph_convert(5, graph6_atom, adj_matrix, G, A) Kết trả về: G= 'DRo', A= [[0,0,1,0,1], [0,0,0,1,1], [1,0,0,1,0], [0,1,1,0,0], [1,1,0,0,0] Bây ta kiểm tra tính ví dụ trên: Đầu vào G= 'DRo', Đầu A= [[0,0,1,0,1], [0,0,0,1,1], [1,0,0,1,0], [0,1,1,0,0], [1,1,0,0,0] Đầu tiên để dễ dàng quan sát biểu diễn đồ thị dạng đồ họa Ta biểu diễn đồ thị dạng danh sách cạnh: (0,2), (1,3),(2,3), (0,4), (1, 4) Tiếp theo ta biểu diễn dạng bit vector: 0100111100 Ta thêm bít vào cuối dãy cho đủ bội 6: 010011 110000 Đổi nhóm nhị phân thành số hệ thập phân: 19 48, cộng 63 vào ta R(x)= 82 111 Sau N (n) = 68 R (x) = 82 111 52 Vậy đồ thị 68 82 111 Đối chiếu với bảng mã ASCII đồ thị có dạng DRo, với đầu vào cho Tương tự với danh sách đồ thị ta sử dụng vị từ kiểm tra: ?- Gs= ['DRo','DbW','DbB','Daa'], maplist(graph_convert(5, graph6_atom, adj_matrix), Gs, As) Kết quả: Gs = ['DRo', 'DbW', 'DbB', 'Daa'], As = [[[0, 0, 1, 0, 1], [0, 0, 0, 1, 1], [1, 0, 0, 1, 0], [0, 1, 1, 0, 0], [1, 1, 0, 0, 0]], [[0, 1, 0, 0, 0], [1, 0, 0, 1, 1], [0, 0, 0, 1, 1], [0, 1, 1, 0, 0], [0, 1, 1, 0, 0]], [[0, 1, 0, 0, 0], [1, 0, 0, 1, 0], [0, 0, 0, 1, 0], [0, 1, 1, 0, 0], [0, 0, 0, 0, 0]], [[0, 1, 0, 0, 1], [1, 0, 0, 1, 0], [0, 0, 0, 0, 0], [0, 1, 0, 0, 0], [1, 0, 0, 0, 0]]] Hầu hết vị từ cốt lõi pl-nauty nhiều ví dụ mơ tả như: gọi đến canonic_graph / mà giao diện với tích hợp Prolog cơng cụ nauty (ở ví dụ tạo đồ thị tự đẳng cấu), Isomorphic_graph / kiểm tra hai đồ thị đẳng cấu , Canonic_graph/6, dùng để biểu diễn đồ thị dạng kinh điển (ở ví dụ kiểm tra đồ thị đẳng cấu), graph_convert/5 vị từ thực chuyển đổi đồ thị khác (ở ví dụ cuối cùng), dựa vị từ Densenauty/8 Densenauty/8 liên kết trực tiếp tới chức thư viện nauty C có tên Vị từ gọi theo cách tương tự đối tượng thư viện Nauty C, Thuộc tính Densenauty/8 có dạng: Densenauty(NVert, Graph, Labeling, Partition, Permutation, Orbits, Canonic, Opts) Trong đó: Nvert số đỉnh đầu vào Graph đồ thị đầu vào Labeling, Partition, Orbits nhãn, phân vùng, quỹ đạo đồ thị đầu vào Canonic dạng kinh điển đồ thị đầu vào Permutation phép hoán vị đỉnh đồ thị đầu vào áp dụng để có đại diện kinh điển Canonic 53 Đối số cuối Opts sử dụng để kiểm soát định dạng biểu đồ đầu vào đại diện Canonic 3.3 Cài đặt chạy chương trình minh họa Các ví dụ trình bày luận thực thành công hệ điều hành Ubuntu cài đặt SWI- Prolog phiên 7.x.x Phần chạy chương trình SWI- prolog thực việc mã hóa ví dụ nêu Bài toán Tạo liệt kê đồ thị: Tạo liệt kê đồ thị Ramsey modul đẳng cấu dạng ma trận kề (Code toán viết lưu với tên têp RamseyGT.pl) Tệp liệu vào có tên: RamseyGT.pl Tiến hành thực thi: Gõ lệnh sau dấu nhắc ?-: ?- genRamseyGT(S, T, N,G) Trong S, T, N số nguyên dương ta định, N số đỉnh đồ thị (chú ý đỉnh 0), G biến để lưu giá trị ma trận biểu diễn đồ thị tìm thấy Hoặc ta gõ lệnh: ?- genRamseyGT(S, T, N,G), length(G,M) Lệnh thị thêm tổng số đồ thị tìm thấy Hình 3.15 Kết thực thi toán tạo liệt kê đồ thị hệ thống SWI-Prolog 54 Nếu gọi canonic_graph(N1, NewGraph, Canonic) thay dòng lệnh Canonic= NewGraph, ta kết quả: Hình 3.16 Kết thực thi tốn tạo liệt kê đồ thị hệ thống SWI-Prolog Bài tốn tìm kiếm đồ thị đẳng cấu với đồ thị cho (Code toán viết lưu với tên têp Densenauty.pl) Tệp liệu vào có tên: Densenauty.pl Tiến hành thực thi: Gõ lệnh ?- N=…, G = [[…], […], […], […], […], …], canonic_graph(N, Adj_matrix, Adj_matrix, G, P, C) Trong N số đỉnh đồ thị, G biểu diễn đồ thị dạng ma trận, giá trị người dùng định Kết sau thực là: số đỉnh N , đồ thị G, đồ thị C đồ thị tìm thấy, giá trị P thể hốn vị thực Hoặc dạng rút gọn: ?- N=…, G = [[…], […], […], […], […], …], canonic_graph(N, G, C) 55 Hình 3.17 Kết thực thi tốn tìm kiếm đồ thị đẳng cấu hệ thống SWI-Prolog Bài toán kiểm tra đồ thị có đẳng cấu khơng (Code tốn viết lưu với tên têp Densenauty.pl) Tệp liệu vào có tên: Densenauty.pl Tiến hành thực thi: Gõ lệnh: ?- N=…, G1 = [[…], […], […], […], […], …], G2 = [[…], […], […], […], […], …], isomorphic_graphs(N, G1, G2, P, C, []) Trong N số đỉnh đồ thị, G1, G2 biểu diễn đồ thị dạng ma trận, giá trị người dùng định Kết sau thực là: Nếu G1, G1 đẳng cấu kết thị N, đồ thị G1, G2, đồ thị Canonic đồ thị chia sẻ đẳng cấu với G1 G2, giá trị P thể hoán vị thực Nếu G1, G2 khơng đẳng cấu kết False 56 Hình 3.18 Kết thực thi tốn kiểm tra đẳng cấu đồ thị hệ thống SWI-Prolog Bài toán chuyển đổi đồ thị từ định dạng graph6 sang định dạng ma trận kề (Code toán viết lưu với tên têp Densenauty.pl) Tệp liệu vào có tên: Densenauty.pl Tiến hành thực thi: Gõ lệnh ?- G= '…', graph_convert(5, graph6_atom, adj_matrix, G, A) Trong G định dạng grapg6 người dùng định Kết sau thực hiện: G ban đầu, A đồ thị biểu diễn dạng ma trận kề Hoặc ta thực chuyển đổi danh sách đồ thị: ?- Gs= [' ', '…', '…', '….'], maplist(graph_convert(5, graph6_atom, adj_matrix), Gs, As) Trong Gs, As danh sách đồ thị 57 Lưu ý: với toán chuyển đổi tất đồ thị grapg6 đầu vào kí tự D Hình 3.19 Kết thực thi toán chuyển đổi đồ thị từ định dạng graph6 sang định dạng ma trận kề hệ thống SWI-Prolog 3.4 Ứng dụng thực tế Ứng dụng chủ yếu đồ thị đẳng cấu biết đến cheminformatics (là việc sử dụng kỹ thuật máy tính thơng tin áp dụng cho loạt vấn đề lĩnh vực hóa học- xác định hợp chất hóa học), tự động hóa thiết kế điện tử (xác minh tương đương với biểu diễn khác thiết kế mạch điện tử) Ngồi theo tơi vấn đề đẳng cấu đồ thị ứng dụng nhiều vào thực tế bao gồm : - Trong trình biên dịch, ví dụ để thực tối ưu hóa khác - Trong việc thiết kế công cụ tìm kiếm - An ninh, tức máy quét dấu vân tay, máy quét khuôn mặt, máy quét võng mạc , vv 58 - Hệ thống thực phân cụm sử dụng thuật tốn đồ thị đẳng cấu nhanh, ví dụ: liên kết hai tài khoản facebook người, công nhận người dùng web dựa hành vi họ, công nhận đạo văn giải pháp sinh viên, - Kỹ thuật dân dụng, quy hoạch thành phố, quy hoạch nội thất xây dựng 3.5 Tiểu kết chương Nội dung chương trình bày phần quan đề tài nghiên cứu Nội dung trình bày chương số khái niệm đồ thị đơn giản, khái niệm đồ thị tự đẳng cấu đồ thị đẳng cấu, khái niệm đồ thị Ramsey modul đẳng cấu, toán đồ thị đẳng cấu liệt kê, kiểm tra, chuyển đổi, tất toán liên quan đến tích hợp prolog với Nauty Trong phần cài đặt chạy chương trình minh họa giới thiệu cách chi tiết cụ thể việc thực thi ví dụ nêu 59 KẾT LUẬN Luận văn tập trung nghiên cứu tích hợp prolog với thư viện nauty ứng dụng việc giải toán đồ thị đẳng cấu Các kết mà luận văn đạt là: Tìm hiểu khái niệm sở ngơn ngữ lập trình prolog ngữ nghĩa lớp chương trình này, số khái niệm đồ thị đơn giản, đồ thị đẳng cấu đồ thị Ramsey modul đẳng cấu Nghiên cứu liên kết prolog với thư viện nauty Và phần đề tài việc tích hợp prolog với thư viện nauty nhằm giải tốn đồ thị đẳng cấu như: tìm liệt kê đồ thị Ramsey modul đẳng cấu, kiểm tra hai đồ thị có đẳng cấu hay khơng, chuyển đổi đồ thị từ định dạng graph6 sang định dạng ma trận kề Gói thử nghiệm chạy Linux 64 bit (debian ubuntu) với phiên swi-prolog 7.x.x Hướng phát triển luận văn: Nghiên cứu ……………… 60 TÀI LIỆU THAM KHẢO [1] Phan Huy Khánh (2004), Lập trình Lơgic Prolog, Nxb Đại học quốc gia Hà Nội [2] Lê Văn Hạnh, lý thuyết đồ thị, Đại học quốc tế Hồng Bàng [3] Babai, L 2015 Graph isomorphism in quasipolynomial time CoRR abs/1512.03547 [4] McKay, Brendan D and Piperno, A 2016 Nauty and Traces Users Guide (Version 2.6) [5] McKay, B D and Piperno, A 2014 Practical graph isomorphism, II Journal of Symbolic Computation 60, 94–112 [6] Brendan McKay grapg6 format: https://users.cecs.anu.edu.au/~bdm/data/formats.txt [7] Wielemaker, J., Schrijvers, T., Triska, M., and Lager, T 2012 SWI-Prolog Theory and Practice of Logic Programming 12, 1-2, 67–96 61 TIẾN ĐỘ THỰC HIỆN ĐỀ TÀI Các nội dung, công việc TT thực Thời gian (bắt đầu – kết thúc) Kết dự kiến - Xây dựng đề cương luận văn 7/2017 – 12/2017 12/2017 Bảo vệ đề cương luận văn - Nghiên cứu tổng quan lập trình logic 01/2018 Chương Luận văn - Nghiên cứu liên kết 02/2018 – 03/2018 Chương Luận prolog C văn - Nghiên cứu ứng dụng giải 04/2018 – 05/2018 Chương 3,4 đồ thị tự đẳng cấu Luận văn cài đặt mô toán - Viết báo cáo luận văn 06/2018 – 07/2018 Luận văn tốt nghiệp 62 ... prolog, giới thiệu SWI -prolog - C? ?c khái niệm, ví dụ minh họa tính đẳng c? ??u đồ thị, đồ thị tự đẳng c? ??u - C? ?c vị từ sử dụng chương trình vị từ th? ?c thi vi? ?c liên kết prolog C để giải toán đồ thị. .. đồ thị tự đẳng c? ??u: - - Không chứa clique b? ?c 3, khơng chứa kích thư? ?c đ? ?c lập => Nó đồ thị Ramsey G3 Phép tự đẳng c? ??u (0,2) (3,4) => G3 đồ thị tự đẳng c? ??u: - Không chứa clique b? ?c 3, khơng chứa... thiết vấn đề nghiên c? ??u Trong toán h? ?c tin h? ?c, lý thuyết đồ thị nghiên c? ??u tính chất đồ thị Đồ thị biểu diễn nhiều c? ??u tr? ?c, nhiều toán th? ?c tế biểu diễn đồ thị Ví dụ, c? ??u tr? ?c liên kết website

Ngày đăng: 01/08/2021, 11:41

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Phan Huy Khánh (2004), Lập trình Lôgic trong Prolog, Nxb Đại học quốc gia Hà Nội Sách, tạp chí
Tiêu đề: Lập trình Lôgic trong Prolog
Tác giả: Phan Huy Khánh
Nhà XB: Nxb Đại học quốc gia Hà Nội
Năm: 2004
[6] Brendan McKay grapg6 format: https://users.cecs.anu.edu.au/~bdm/data/formats.txt Link
[2] Lê Văn Hạnh, lý thuyết đồ thị, Đại học quốc tế Hồng Bàng Khác
[3] Babai, L. 2015. Graph isomorphism in quasipolynomial time. CoRR abs/1512.03547 Khác
[4] McKay, Brendan D. and Piperno, A. 2016. Nauty and Traces Users Guide (Version 2.6) Khác
[5] McKay, B. D. and Piperno, A. 2014. Practical graph isomorphism, II. Journal of Symbolic Computation 60, 94–112 Khác
[7] Wielemaker, J., Schrijvers, T., Triska, M., and Lager, T. 2012. SWI-Prolog. Theory and Practice of Logic Programming 12, 1-2, 67–96 Khác

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w