Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 78 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
78
Dung lượng
2,01 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƢỜNG ĐẠI HỌC VINH NGUYỄN THỊ HỊA BÌNH NGHIÊN CỨU LẬP TRÌNH LOGIC CHO BÀI TOÁN MAX - CLIQUE LUẬN VĂN THẠC SỸ Chuyên ngành: CÔNG NGHỆ THÔNG TIN Mã ngành: 60.48.02.01 Vinh, tháng / 2018 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƢỜNG ĐẠI HỌC VINH NGUYỄN THỊ HỊA BÌNH NGHIÊN CỨU LẬP TRÌNH LOGIC CHO BÀI TỐN MAX - CLIQUE LUẬN VĂN THẠC SỸ Chuyên ngành: CÔNG NGHỆ THÔNG TIN Mã ngành: 60.48.02.01 Ngƣời hƣớng dẫn khoa học: TS NGUYỄN NGỌC HIẾU Vinh, tháng / 2018 iii CƠNG TRÌNH ĐƢỢC HỒN THÀNH TẠI TRƢỜNG ĐẠI HỌC VINH Người hướng dẫn khoa học: TS Nguyễn Ngọc Hiếu Luận văn thạc sĩ bảo vệ Trường Đại học Vinh ngày … tháng … năm 2018 Thành phần Hội đồng đánh giá luận văn thạc sĩ gồm: TT Họ tên Chức danh Hội đồng Chủ tịch Phản biện Phản biện Ủy viên Ủy viên, Thư ký iv TRƯỜNG ĐẠI HỌC VINH PHÒNG QLKH – SĐH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc TP.Vinh, ngày … tháng… năm 2018 NHIỆM VỤ LUẬN VĂN THẠC SĨ Họ tên học viên: Giới tính: Ngày, tháng, năm sinh: Nơi sinh: Chuyên ngành: .MSHV: I- Tên đề tài: II- Nhiệm vụ nội dung: III- Ngày giao nhiệm vụ: IV- Ngày hoàn thành nhiệm vụ: V- Ngƣời hƣớng dẫn khoa học: NGƢỜI HƢỚNG DẪN KHOA HỌC KHOA QUẢN LÝ CHUYÊN NGÀNH (Họ tên chữ ký) (Họ tên chữ ký) v LỜI CAM ĐOAN Tôi xin cam đoan cơng trình nghiên cứu riêng hướng dẫn khoa học thầy giáo TS Nguyễn Ngọc Hiếu Các số liệu, kết nêu luận văn trung thực chưa cơng bố cơng trình khác Học viên thực luận văn Nguyễn Thị Hoà Bình vi LỜI CẢM ƠN Luận văn hồn thành hướng dẫn khoa học thầy giáo TS Nguyễn Ngọc Hiếu Tơi xin bày tỏ lịng biết ơn chân thành kính trọng sâu sắc đến thầy hướng dẫn nhiệt tình, chu đáo, chi tiết, tạo điều kiện tốt để tơi hồn thành luận văn Tơi xin gửi lời cảm ơn đến quý thầy cô giáo Khoa Công nghệ thông tin trường Đại học Vinh, quý thầy cô giáo đơn vị trực thuộc, cán phòng Sau Đại học trực tiếp giảng dạy, truyền đạt kiến thức cung cấp nguồn tư liệu quý báu cho tơi suốt q trình học tập nghiên cứu Tơi xin bày tỏ lịng biết ơn đến người thân gia đình bạn bè, đồng nghiệp động viên, giúp đỡ, tạo điều kiện tơi hồn thành luận văn Mặc dù thân cố gắng trình nghiên cứu thực luận văn thời gian kinh nghiệm cịn hạn chế nên khơng tránh khỏi thiếu sót Vì tơi mong nhận dẫn góp ý q thầy, giáo tất bạn bè Vinh, tháng năm 2018 Học viên Nguyễn Thị Hồ Bình MỤC LỤC LỜI CAM ĐOAN LỜI CẢM ƠN DANH MỤC CÁC THUẬT NGỮ DANH MỤC CÁC KÍ HIỆU CÁC CHỮ VIẾT TẮT DANH MỤC CÁC HÌNH VẼ MỞ ĐẦU 14 Sự cần thiết vấn đề nghiên cứu 14 Mục tiêu nghiên cứu 15 Đối tƣợng phạm vi nghiên cứu 15 3.1 Đối tƣợng nghiên cứu 15 3.2 Phạm vi nghiên cứu 15 Nội dung nghiên cứu 15 Cấu trúc luận văn 16 CHƢƠNG I 17 GIỚI THIỆU VỀ NGƠN NGỮ LẬP TRÌNH LOGIC 17 1.1 Giới thiệu ngơn ngữ lập trình logic 17 1.2 Prolog ngôn ngữ lập trình logic 18 1.2.1 Cú pháp prolog 19 1.2.2 Kiểu liệu prolog 19 1.2.3 Phần thích 20 CHƢƠNG II 21 BÀI TOÁN MAX – CLIQUE 21 2.1 Nhắc lại số định nghĩa đồ thị 21 2.1.1 Đồ thị 21 2.1.2 Bậc đỉnh, biểu diễn đồ thị ma trận 21 2.2 Bài toán Max-Clique 22 2.2.1 Clique đồ thị 22 2.2.2 Bài toán Max – Clique 23 2.2.3 Định nghĩa, công thức độ phức tạp tính tốn 23 2.2.4 Các phƣơng pháp tiếp cận toán Max-Clique 30 2.2.5 Các thuật tốn xác dựa việc giải tốn phụ 32 2.2.6 Phƣơng pháp xác dựa tô màu đỉnh 33 2.3 Các phƣơng pháp chia nhánh ràng buộc dựa tô màu đồ thị 34 2.4 Phƣơng pháp phân nhánh giới hạn dựa cách tô màu 38 2.5 Thắt chặt tập tƣơng ứng P thuật toán lọc 39 2.6 Thuật toán cho toán Max-Clique 42 2.7 Phƣơng pháp tìm kiếm cục cho tốn Max-Clique 42 CHƢƠNG III 56 CÀI ĐẶT MƠ PHỎNG CÁC BÀI TỐN MINH HỌA 56 3.1 Tích hợp Cliquer với SWI - Prolog 56 3.2 Cài đặt hệ thống tìm Max - Clique ứng dụng cho tơ màu đồ thị 56 3.3 Bài tốn minh họa 57 KẾT LUẬN 70 Hƣớng phát triển luận văn 70 TÀI LIỆU THAM KHẢO 71 Tài liệu Tiếng Việt 71 Tài liệu Tiếng Anh 71 PHỤ LỤC 72 CHƢƠNG III: CÀI ĐẶT MƠ PHỎNG CÁC BÀI TỐN MINH HỌA 72 Nội dung tệp liệu: 72 Kết thực thi câu lệnh: 75 Hệ điều hành Ubuntu 78 10 DANH MỤC CÁC THUẬT NGỮ Chương trình Logic Logic program Lập trình logic cổ điển Classical Logic Programming Lập trình logic dạng tuyển Constraint Logic Programming Lập trình logic ràng buộc Disjunctive Logic Programming Mệnh đề Clause Sự kiện Fact Truy vấn Query Vị từ Predicate 64 cho tô màu đỉnh đồ thị Trong tô màu đồ thị, với đồ thị G = ([n], E) số tự nhiên K > 0, tìm kiếm nhãn c: [n] → [k] đỉnh đồ thị cho (i, j) ∈ E ⇔ c (i) ≠ c (j) Trong vấn đề sử dụng số màu tối thiểu để tô màu đồ thị, việc tìm kiếm số màu tối thiểu đồ thị là tìm số k nhỏ Trong trường hợp thực tế, giải vấn đề tô màu đồ thị hiểu việc xây dựng chương trình tuyến tính số ngun mơ hình ràng buộc Ở giải vấn đề màu đồ thị cách mơ hình hố sử dụng ngơn ngữ ràng buộc sau áp dụng mơ hình ràng buộc trình biên dịch BEE (Ben-Gurion University Equi-propagation Encoder) để mã hóa thành ma trận dạng Boolean sau giải mã cách sử dụng SAT Cách tiếp cận vấn đề đưa đồ thị G số tự nhiên k – liệu sửa dụng k màu để tô màu đồ thị? Và vấn đề để tô màu đồ thị với số k màu nhỏ nhất? Để đưa với mơ hình tối ưu hóa vấn đề, em áp dụng tùy chọn giảm dần giải BEE, bước chọn số k số đỉnh max-clique 65 Mơ hình ràng buộc cho tơ màu đồ thị Mơ hình ràng buộc hiểu đơn giản: Với đồ thị G = (V, E) cho số tự nhiên k (số màu), đỉnh u ∈ V gắn với biến số nguyên hữu hạn miền giá trị khoảng [1, , k] thể cho màu Đối với cạnh (u, v) ∈ E, điều kiện Iu ≠ Iv điều kiện đỉnh kề màu tơ phải khác Câu lệnh graphColoring/3 Prolog mã hóa để giải vấn đề tô màu đồ thị Đưa ma trận kề Boolean M đồ thị N đỉnh, biểu diễn số màu đồ thị với danh sách có N giá trị cho giá trị vị trí I tương ứng màu sắc đỉnh I Câu lệnh graphColoring( Graph, Kcolors, Coloring) với tham số Trong tham số thứ nhất, Graph ma trận kề đồ thị cần tô màu Tham số thứ hai số lượng màu sắc cần dùng, tham số cuối bảng màu tương ứng Công việc xử lý ta dùng câu lệnh graphColoring/3 tạo điều kiện đồ thị có cách tơ màu với k màu sắc Đồng thời tạo Map liên quan đến biến số nguyên ( màu sắc đỉnh) với dạng Boolean biểu diễn chúng Dòng thứ hai lời gọi đến BEE với biên dịch mơ hình ràng buộc gửi đến CNF, dòng thứ ba chứa lời gọi đến giải mã SAT Dịng cuối có nhiệm vụ cách tô màu từ BEE sang dạng số nguyên Prolog graphColoring(Graph, KColors, Coloring) :encode(coloring(Graph, KColors), Map, Constr), bCompile(Constr, CNF), sat(CNF), decode(Map, Coloring) Ví dụ, đồ thị sử dụng câu lệnh graphColoring(Graph,4,Coloring) tìm cách tơ màu cho đồ thị với màu tương ứng màu sắc 66 đỉnh Dịng tạo mơ hình ràng buộc, dòng thứ hai thứ biên dịch giải Hình miêu tả mơ hình ràng buộc cho đồ thị Hình Cột trái chi tiết màu ban đầu tạo q trình mã hóa, khai báo biến cột bên phải liệt điều kiện đỉnh liền kề khơng có màu Sau giải vấn đề dòng thứ câu lệnh graphColoring/3 màu dịch trở lại giá trị Prolog kết nhận [1, 2, 3, 4, 2, 1, 1], ví dụ: Hình Mơ hình ràng buộc cho đồ thị cho Dùng để phát nhanh clique có tính hốn vị với nhằm mục đích đơn giản hóa loại bỏ đối xứng vấn đề liên quan đến đồ thị Trong trường hợp tô màu đồ thị, tô màu cho đồ thị G = (V, E), clique C ⊆ V phải tương ứng với tập hợp đỉnh dán nhãn màu khác C tập chứa đỉnh liền kề Được clique C ⊆ V đồ thị, tự động gán nhãn đỉnh C 67 với |C| màu sắc khác nhau, qua phá vỡ đối xứng giới hạn χ(G) Câu lệnh graphColoring/3 tăng cường với bước tiền xử lý ứng dụng Pl-Cliquer việc tìm kiếm max-clique đồ thị cho Clique chuyển đến mã hóa thông qua để dùng điểu kiện để tạo mơ hình ràng buộc Dịng thứ tìm clique đồ thị hợp với max-clique Các dịng cịn lại mơ tả tương tự mục trên, với khác biệt max-clique đưa vào phần trình mã hóa graphColoring(Graph, KColors, Coloring) :Plclique: clique_find_single( Graph, MaxClique), encode(coloring(Graph, KColors, MaxClique), Map, Constr), bCompiler: bCompile (Constr, CNF), satsolver: sat(CNF), decode(Map, Coloring) Q trình mã hóa gán màu ban đầu {1, , |MaxClique|} đến đỉnh max-clique Các đỉnh lại kết hợp với biến thuộc miền hữu hạn khoảng {1, , kColor} thể màu chúng Cuối điều kiện ràng buộc để đỉnh liền kề khơng có màu với Ví dụ, đồ thị hình sử dụng câu lệnh tìm cách tô màu cho đồ thị với màu khác kết hợp tham số Coloring với Dịng để xác định số đỉnh đồ thị Dịng thứ hai tìm kiếm clique hợp max-clique với list danh sách đỉnh Ví dụ, ta có đồ thị Hình 5, slover hợp max-clique [1, 2, 3, 4] Dịng thứ ba tạo mơ hình ràng buộc, dịng thứ tư có nhiệm vụ biên soạn mơ hình ràng buộc vừa tạo đến CNF Dịng thứ gọi lời giải SAT dòng 68 thứ biên dịch kết sang dạng sử dụng ngôn ngữ prolog, dẫn đến thu hai kết tô màu cho đồ thị hai kết không thỏa mãn, nghĩa đồ thị cho tô k màu Chú kể từ lúc max-clique tìm thấy, q trình mã hóa cho biết phần đồ thị tô màu làm giảm đáng kể số lượng ràng buộc từ đỉnh bỏ qua Hình minh họa mơ hình ràng buộc cho đồ thị vị dụ Hình Cột bên trái chi tiết phần màu tạo trình mã hóa khai báo biến, cột bên phải liệt kê ràng buộc cho đỉnh liền kề khơng có màu Hình Ví dụ mơ hình ràng buộc cho đồ thị cho với phần màu tơ Quay lại ví dụ trên, ta có max-clique có kích thước số màu tối thiểu k = màu Nên ta sử dụng lệnh: ?- graphColoring ([[0,1,1,1,1,0,0],[1,0,1,1,0,0,1],[1,1,0,1,0,1,0] [1,1,1,0,0,1,0],[1,0,0,0,0,1,0],[0,0,1,1,1,0,0],[0,1,0,0,0,0,0]], 4, C) Kết quả: 2/7 (max 1) 0,00 s (0.00 s/round) 4/7 (max 2) 0,00 s (0.00 s/round) 5/7 (max 3) 0,00 s (0.00 s/round) 7/7 (max 4) 0,00 s (0.00 s/round) 69 size=4(max 7) C = [1, 2, 3, 4, 2, 1, 1] Xem xét kết trên, graphColoring( Graph, 4, Coloring) đồ thị cho tô với màu màu tương ứng với đỉnh, cho khơng có hai đỉnh kề tô màu Trong phần đề cấp đến việc bổ sung tối ưu hóa thực giải vấn đề tô màu đồ thị, giả thiết max-clique đồ thị tìm thấy Vậy, giải vấn đề đồ thị bao gồm: (1) bước tiền xử lý tơ màu cho max-clique, (2) mơ hình ràng buộc mã hóa sang CNF giải SAT 70 KẾT LUẬN Luận văn tập trung nghiên cứu lập trình logic ngơn ngữ lập trình Prolog ứng dụng cho việc giải tốn max-clique, từ nhanh chóng tìm kiếm max-clique để vận dụng linh hoạt vào nhiệm vụ tô màu đồ thị Các kết mà luận văn đạt là: + Tìm hiểu khái niệm sở chương trình logic ngữ nghĩa lớp chương trình + Giải yêu cầu toán max-clique thể câu lệnh dựa tảng tích hợp Clique SWI-Prolog gọi pl-cliquer chạy hệ điều hành Ubuntu + Tìm cách tơ màu đồ thị với số lượng màu tối thiểu, giảm thời gian liệu so với phương pháp thông thường khác Hƣớng phát triển luận văn + Nghiên cứu tiếp cận ngữ nghĩa khác lập trình logic + Nghiên cứu phát triển hệ thống cho việc xếp thời khóa biểu, lịch thi, trường học + Nghiên cứu khảo sát cách phân bố vùng miền, địa phương … 71 TÀI LIỆU THAM KHẢO Tài liệu Tiếng Việt [1] Phan Huy Khánh (2004), Lập trình Logic Prolog - NXB Đại học quốc gia Hà Nội Tài liệu Tiếng Anh [1] Babel, L., & Tinhofer, G (1990) A branch and bound algorithm for the maximum clique problem Methods and Models of Operations Research, 34(3),207–217 [2] Benlic, U., & Hao, J.K (2013) Breakout local search for maximum clique problems Computers & Operations Research, 40(1), 192–206 [3] Carraghan, R, & Pardalos, P.M (1990) An exact algorithm for the maximum clique problem Operations Research Letters, 9(6), 375– 382 [4] Fahle, T (2002) Simple and Fast: Improving a branch-and-bound algorithm for maximum clique Lecture Notes in Computer Science, 2461, 485–498 [5] Hansen, P, Mladenovi´c, N & Uroˇsevi´e, D (2004) Variable neighborhood search for the maximum clique Discrete Applied Mathematics, 145(1),117–125 [6] Johnson, D.S., & Trick, M.A (1996) Cliques, Coloring, and Satisfiability: Second DIMACS Implementation Challenge DIMACS Series in Discrete Mathematics and Theoretical Computer Science vol 26, AMS, Providence,RI [7] Warren, J.S., & Hicks, I.V (2006) Combinatorial branch-and-bound for the maximum weight independent set problem Technical Report, Texas A&M University 72 PHỤ LỤC CHƢƠNG III: CÀI ĐẶT MÔ PHỎNG CÁC BÀI TOÁN MINH HỌA Nội dung tệp liệu: graph_read_dimacs_file */ graph_read_dimacs_file(Filename, NVert, Matrix, Weights) :graph_read_dimacs_file(Filename, NVert, Matrix, Weights, []) graph_read_dimacs_file(Filename, NVert, Matrix, Weights, Opts) :once(memberchk(edge(Edge), Opts) ; Edge = 1), once(memberchk(non_edge(Anti), Opts) ; Anti = 0), !, absolute_file_name(Filename, Absolute), % must_be(integer, NVert), '$cliquer_graph_read_dimacs_file'(Absolute, NVert, Matrix, Weights, Edge, Anti) clique_find_single */ clique_find_single(Graph, Clique) :% must_be(list(list(integer)), Graph), proper_length(Graph, NVert), '$cliquer_clique_find_single'(NVert, Graph, 0, 0, true, _, _, Clique) clique_find_single(NVert, Graph, Clique) :must_be(integer, NVert), '$cliquer_clique_find_single'(NVert, Graph, 0, 0, true, _, _, Clique) clique_find_single(NVert, Min, Max, Graph, Clique) :must_be(integer, NVert), must_be(integer, Min), must_be(integer, Max), 73 ( Min == Max, Max == -> Maximal = true ; Maximal = false ), '$cliquer_clique_find_single'(NVert, Graph, Min, Max, Maximal, Clique) clique_find_multi */ clique_find_multi(Bound, Graph, Sol) :clique_find_n_sols(Bound, Graph, Sols), member(Sol, Sols) clique_find_multi(Bound, NVert, Graph, Sol) :clique_find_n_sols(Bound, NVert, Graph, Sols, _), member(Sol, Sols) clique_find_multi(Bound, NVert, Graph, Sol, Opts) :ignore(memberchk(total(Total), Opts)), clique_find_n_sols(Bound, NVert, Graph, Sols, Total, Opts), !, member(Sol, Sols) clique_print_all */ clique_print_all(Graph) :proper_length(Graph, NVert), '$cliquer_clique_print_all'(NVert, Graph, 0, 0, true, _) clique_print_all(NVert, Graph, Total) :- 74 must_be(integer, NVert), '$cliquer_clique_print_all'(NVert, Graph, 0, 0, true, Total) clique_print_all(NVert, Min, Max, Maximal, Graph, Total) :must_be(integer, NVert), must_be(integer, Min), must_be(integer, Max), must_be(boolean, Maximal), '$cliquer_clique_print_all'(NVert, Graph, Min, Max, Maximal, Total) graphColoring (Graph, KColors,Coloring ) graphColoring(Graph, KColors, Coloring) :plcliquer:clique_find_single(Graph, MaxClique), encode(coloring(Graph, KColors, MaxClique), Map, Constr), bCompiler:bCompile(Constr, CNF), satsolver:sat(CNF), decode(Map, Coloring) 75 Kết thực thi câu lệnh: * garph_read_dimacs_file/5 * clique_find_single/4 76 * clique_find_n_sols/6 * clique_find_multi/5 77 * clique_print_all/ * graphColoring/3 78 Hệ điều hành Ubuntu Ubuntu hệ điều hành cộng đồng phát triển tất ứng dụng soạn thảo văn bản, thư điện tử, từ phần mềm máy chủ web, cơng cụ lập trình Ubuntu hệ điều hành mã nguồn mở chỉnh sửa, chép cải tiến phần mềm phép giấy phép GNU GPL Trong dòng họ Linux hệ điều hành nhiều người sử dụng máy tính cá nhân - Ubuntu hệ điều hành miễn phí - Cài đặt đơn giản - Khơng u cầu cấu hình máy tính cao - Tương thích tốt với phần cứng - Dễ sử dụng, hỗ trợ phần mềm - Tính bảo mật cao ... VỀ NGÔN NGỮ LẬP TRÌNH LOGIC 1.1 Giới thiệu ngơn ngữ lập trình logic 1.2 Prolog ngơn ngữ lập trình logic Chương BÀI TOÁN MAX- CLIQUE 2.1 Nhắc lại số định nghĩa đồ thị 2.2 Bài toán max- clique Chương... gian tính tốn cho số trường hợp khó dạng DIMACS 2.6 Thuật toán cho toán Max- Clique Phần lớn thuật toán cho toán max- clique gọi "tham lam ” Chúng tạo max- clique cách bắt đầu với clique rỗng sau... tập trung vào toán max- clique Bài tốn MCP Bài tốn MIS Bài tốn MVC Hình Ví dụ minh hoạ cho mối quan hệ tốn MCP, MIS, MVC Có nhiều nghiên cứu việc xây dựng toán max- clique Những nghiên cứu quan tâm,