Toán học đang được áp dụng rộng rãi trong các lĩnh vực trong cuộc sống. Phương pháp Toán là cơ sở quan trọng trong nhiều ngành khoa học cũng như ngành Khoa học máy tính, trong đó có các bài toán tìm thỏa mãn SAT (Satisfiability). Ở bài báo cáo này tôi xin trình bày bài toán 3SAT nhưng trước đó tôi sẽ trình bày một số cơ sở lý thuyết của bài toán ở phần thứ đầu sau đó mới đi vào bài toán.
RƯỜN I HỌC SƯ PH M TP HỒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN CAO HỌC NGÀNH: KHOA HỌC MÁY TÍNH KHỐ: 28 MƠN HỌ : PHƯƠN PH P N R N N HỌC Ề TÀI CUỐI KÌ: TÌM HIỂU BÀI TỐN 3-CNF SAT Giảng viên hướng dẫn : TS Huỳnh ăn ức Sinh viên thực : Nguyễn Thanh Thuỷ Lớp : Khoa Học Máy Tính – Khoá 28 MSSV : KHMT – 2017 - 010 TP Hồ Chí Minh,tháng năm 2018 A M CL C Giới thiệu B Cơ sở lý thuyết Tổng quan thuật toán 1.1 Định nghĩa: 1.2 Phân tích thuật toán đánh giá thời gian thực thuật toán 1.2.1 Phân tích thuật tốn 1.2.2 Tại lại cần có thuật tốn hiệu quả? Lý thuyết độ phức tạp 2.1 Máy tính Turing 2.2 Các khái niệm độ phức tạp thuật toán 2.2.1 Độ phức tạp trường hợp xấu 2.2.2 Độ phức tạp trung bình 2.2.3 Độ phức tạp tiệm cận 2.2.4 Độ phức tạp đa thức (Polynomial) 2.2.5 Thuật toán đa thức 2.3 Cách tính độ phức tạp 2.3.1 Các quy tắc 2.3.1.1 Quy tắc cộng: 2.3.1.2 Lệnh Quy tắc nhân: 2.4 Lớp P, NP mối quan hệ lớp P lớp NP 2.4.1 Lớp P 2.4.2 Lớp NP 2.4.3 Mối quan hệ lớp P lớp NP 2.4.4 Lớp tốn NP - khó (NP - hard) NP - đầy đủ (NP – Complate) 2.4.4.1 Các toán định 2.4.4.2 Bài tốn NP – Khó (NP – Hard) 2.4.4.3 Bài toán lớp NPC 2.4.4.4 Mối quan hệ P, NP NPC biểu diễn hình sau: ……………………………………………………………8 2.4.5 Một số toán NPC - Bài toán Vertex – Cover Lôgic mệnh đề 3.1 Công thức Lôgic mệnh đề 3.2 Chuẩn tắc hội CNF 10 3.3 Giải toán chứng minh logic 10 3.3.1 Bài tốn chứng logic: 10 3.3.2 Cách giải 10 C Nội dung 11 Bài toán SAT 11 1.1 Lịch sử phát triển SAT: 11 1.2 Bài toán SAT 11 1.3 Bài toán CNF-SAT 12 1.4 Bài toán chứng minh thỏa mãn (SAT): 12 1.5 Giải toán SAT 12 1.5.1 Phương pháp Backtracking 12 1.5.2 Các phương pháp tối ưu hoá lặp (Iterative optimization methods) ……………………………………………………………… 13 Bài toán 3-CNF SAT 13 2.1 Định nghĩa 13 2.2 Ứng dụng toán - SAT 14 2.3 Thuật toán DPLL giải toán SAT 15 2.3.1 Lịch sử 15 2.3.2 Giải thuật DPLL 15 D 2.3.3 Cài đặt giải thuật 16 Kết luận 16 E Tài liệu tham khảo 16 A Giới thiệu Trong Tốn học có nhiều dạng tốn tốn khác nhau, có tốn tiền đề kết toán khác Nhiều toán chưa giải khởi nguồn để người tìm hiểu tìm tịi Tốn học áp dụng rộng rãi lĩnh vực sống Phương pháp Toán sở quan trọng nhiều ngành khoa học ngành Khoa học máy tính, có tốn tìm thỏa mãn SAT (Satisfiability) Ở báo cáo xin trình bày tốn 3SAT trước tơi trình bày số sở lý thuyết tốn phần thứ đầu sau vào toán B sở lý thuyết Tổng quan thuật toán ịnh nghĩa: Thuật toán dãy hữu hạn bước, bước mơ tả xác phép toán hành động cần thực hiện…để cho ta lời giải toán Các đặc trung thuật tốn - Input - Output - Tính xác định - Tính khả thi - Tính dừng - Tính đơn vị - Tính tổng quát 1.1 1.2 Phân tích thuật toán đánh giá thời gian thực thuật toán 1.2.1 Phân tích thuật tốn Phân tích thuật tốn trình tìm đánh giá thời gian dung lượng nhớ cần thực thuật toán Hầu hết tốn có nhiều thuật toán khác để giải chúng nhiệm vụ phải tìm thuật tốn tốt để thực toán đặt 1.2.2 Tại lại cần có thuật tốn hiệu quả? Kỹ thuật máy tính ngày tiến nhanh, máy tính lớn đạt hàng trăm triệu phép tốn giây Tuy nhiên có thuật tốn mà độ phức tạp thời gian lớn mà máy tính đại tốn nhiều thời gian Khi việc phân tích thuật tốn để tìm thuật tốn hiệu cần thiết 2.1 Lý thuyết độ phức tạp Máy tính Turing Máy tính Turing máy tính tốn trừu tượng, vừa có khả máy tính thực , vừa cho phép định nghĩa mặt toán học tính tốn Một máy Turing T = (, Q, , , q0, b ,F) Trong : Q tập hữu hạn trạng thái, Γ chữ băng (bộ chữ dùng băng), b∈là ký hiệu trống (ký hiệu cho phép xuất cách vô hạn băng bước q trình tính tốn), ⊆Γ chữ vào (bộ chữ dùng cho xâu vào), : Q x Γ Q x Γx {L, R} hàm phận, hay gọi hàm dịch chuyển (là hàm định nghĩa việc dịch chuyển trạng thái máy Turing máy trạng thái), L R hiểu trái (Left) phải (Right)), q0∈Q trạng thái đầu (trạng thái khởi tạo), F⊆Q tập trạng thái thừa nhận – accepting state (hoặc trạng thái cuối) Nhận xét: Máy Turing có cấu tạo đơn giản lại làm việc liên quan tới tính tốn phép tính Từ mơ hình định nghĩa phép cộng (mã hóa dạng nhị phân) cách dịch chuyển đầu đọc 0, từ định nghĩa phép tính khác Có hai loại: Máy tính Turing tất định Máy tính Turing không tất định 2.2 2.2.1 2.2.2 Các khái niệm độ phức tạp thuật toán ộ phức tạp trường hợp xấu Cho thuật toán A với đầu vào n, đó: - Độ phức tạp nhớ trường hợp xấu định nghĩa là: LA(n) = max{lA(e)║│e│≤n} Tức chi phí lớn nhớ Trong ví dụ trên: Dữ liệu vào: n+1, ra:1, phụ:1 nên LA(e)=n+3 - Độ phức tạp thời gian trường hợp xấu định nghĩa : TA(n) = max{tA(e)║│e│≤n} Tức chi phí lớn thời gian Trong ví dụ TA(n) =1+2(n-1) = 2n-1 ộ phức tạp trung bình Là tổng số độ phức tạp khác ứng với liệu chia cho tổng số 2.2.3 ộ phức tạp tiệm cận Thuật toán A với đầu vào n gọi có độ phức tạp O(f(n)) số C, N0: TA(n) C.f(n) , n N0 Tức TA(n) có tốc độ tăng O(f(n)) 2.2.4 ộ phức tạp đa thức (Polynomial) Thuật toán gọi có độ phức tạp đa thức tồn đa thức P(n) mà TA(n) C.P(n) , n N0 Thuật toán đa thức Thuật toán gọi đa thức độ phức tạp thời gian trường hợp xấu đa thức Việc đánh giá độ phức tạp toán vấn đề phức tạp Vì người ta thường quan tâm đến việc đấnh giá độ phức tạp thời gian trường hợp xấu toán 2.2.5 Một số đơn vị đo tốc độ tăng: - O(1): Hầu hết thị chương trình thực lần hay nhiều vài lần⇒Thời gian chạy chương trình số - O(logN): Thời gian chạy chương trình logarit, tức thời gian chạy chương trình tiến chậm N lớn dần - O(N):Thời gian chạy tuyến tính Đây tình tối ưu cho thuật toán phải xử lý N liệu nhập - O(NlogN): Thời gian chạy tăng dần lên cho thuật toán mà giải toán cách tách thành tốn nhỏ hơn, sau tổ hợp lời giải - O(N2): Thời gian chạy bậc 2, trường hợp có ý nghĩa thực tế cho toán tương đối nhỏ Thời gian bình phương thường tăng dần thuật tốn phải xử lý tất cặp phần tử liệu (2 vịng lặp lồng nhau) - O(N3): Thuật tốn xử lý ba phần tử liệu (3 vòng lặp lồng nhau)⇒ ý nghĩa với toán nhỏ - O(2n) , O(n!), O(nn): Thời gian thực thuật toán lớn tốc độ tăng hàm mũ 2.3 2.3.1 Cách tính độ phức tạp Các quy tắc 2.3.1.1 Quy tắc cộng: Nếu T1(n) T2(n) thời gian thực chương trình P1, P2 T1(n)=O(f(n)), T2(n)=O(g(n)) thời gian thực đoạn chương trình nối tiếp T(n)=O(max(f(n),g(n)) 2.3.1.2 Lệnh Quy tắc nhân: Nếu T1(n) T2(n) thời gian thực đoạn chương trình P1, P2 T1(n)=O(f(n)), T2(n)=O(g(n)) thời gian thực đoạn chương trình lồng T(n)=O(f(n).g(n)) 2.4 Lớp P, NP mối quan hệ lớp P lớp NP Thuật tốn khơng đơn định đa thức(Nodeterministic Polynomial NP) Với nhiều toán tối ưu tổ hợp chưa tìm thuật toán đơn định chạy thời gian đa thức, cho phép dùng thuật tốn khơng đơn định lại dễ dàng thuật tốn chạy thời gian đa thức Sự phân lớp tốn Với tốn cho trước có khả xảy ra: Không giải Giải thuật toán - Trường hợp toán giải thuật toán chia làm loại: Thực tế giải được: Được hiểu thuật toán xử lý thời gian đủ nhanh, thực tế cho phép, thuật tốn có độ phức tạp thời gian đa thức Thực tế khó giải: Được hiểu thuật toán xử lý nhiều thời gian, thực tế khó chấp nhận, thuật tốn có độ phức tạp thời gian đa thức (hàm mũ) Do đó, ta có phân lớp toán tác giả Cook Karp đề xuất năm 1970-1971 sau: 2.4.1 Lớp P Thuật toán đơn định (Deterministic algorithm): thuật tốn có kết thực phép toán xác định Định nghĩa: Lớp P bao gồm tất toán giải thuật toán đơn định thời gian đa thức (tức tồn thuật toán giải với thời gian chạy đa thức) Thuật tốn có độ phức tạp O(nk), k số Những tốn có độ phức tạp dạng O(k), O(log(n)), O(n), O(nlog(n)), nk tốn thuộc lớp P Ví dụ: Thuật tốn Ơclide tìm Ước chung lớn (UCLN) hai số thuật toán giải thời gian đa thức Do tốn tìm UCLN hai số m n thuộc lớp P Chú ý: Khơng phải tốn thuộc lớp P có thuật tốn hiệu Nếu tốn khơng thuộc lớp P phải trả giá đắt thời gian chí khơng giải thực tế 2.4.2 Lớp NP Thuật tốn khơng đơn định (nondeterministic algorithm): thuật tốn có kết khơng phải giá trị mà tập hợp hữu hạn giá trị Định nghĩa Là lớp tốn giải thuật tốn khơng đơn định thời gian đa thức Hay, lớp toán mà nghiệm giả định kiểm chứng thời gian đa thức (Nondeterministic polynomial) Ví dụ: Bài tốn HC (Hamilton cycle) - Intance: Cho đồ thị vô hướng G = (V,E) - Question: Hỏi đồ thị vô hướng G = (V,E) có chu trình Hamilton hay khơng? P Sắp xếp Cây khung bé Nhân ma trận Tìm kiếm Đường ngắn 2.4.3 NP Bài toán túi Bài tốn ba lơ Bài tốn người du lịch Mối quan hệ lớp P lớp NP Ta thấy cách trực quan P NP Tuy vậy, người ta chưa tìm tốn thuộc lớp NP khơng thuộc lớp P Có nghĩa câu hỏi " P = NP?" chưa có lời giải Mặc dù vậy, nhiều nhà khoa học cho P ≠ NP Có lẽ lý hấp dẫn lý giải nhà khoa học tin P ≠ NP, tồn lớp toán NP\P gọi lớp NP -đầy đủ NPComplete hay gọn NPC) Lớp có tính chất gây kinh ngạc rằng, toán lớp giải thuật tốn đơn định thời gian đa thức, tốn lớp NP giải thuật toán đơn định thời gian tương tự, nghĩa P = NP (!) Việc xem xét quan hệ P NP dẫn đến đến nghiên cứu lớp NPC Hình 2: Minh họa giả thuyết mối quan hệ lớp P, NP NP-đầy đủ 2.4.4 Lớp tốn NP - khó (NP - hard) NP - đầy đủ (NP – Complate) 2.4.4.1 Các toán định Định nghĩa: Bài toán định tốn mà câu trả lời “yes” “no” (tương ứng với true/1 hay false/0) Về nguyên tắc tốn biểu diễn dạng tốn định tương ứng Ví dụ tốn định Ví dụ 1: Bài tốn kiểm tra số nguyên tố - Instance: Cho số nguyên n>2 - Question: n có phải số nguyên tố hay khơng? Ví dụ 2: Bài tốn HC (Hamilton cycle) - Intance: Cho đồ thị vô hướng G = (V,E) - Question: Hỏi đồ thị vô hướng G = (V,E) có chu trình Hamilton hay khơng? 2.4.4.2 Bài tốn NP – Khó (NP – Hard) Bài tốn A gọi NP- khó tồn thuật tốn đa thức để giải tốn A kéo theo tồn thuật toán đa thức để giải tốn NP Hay: A NP – Khó B A, với toán B NP 2.4.4.3 Bài toán lớp NPC 2.4.4.3.1 Phép dẫn với thời gian đa thức Định nghĩa: Cho hai toán 1 2 1 lớp Instance ứng với Yes , 1 = 2 lớp Instance ứng với No, 2 = Phép dẫn thời gian đa thức f biến đổi kiện 1 thành kiện 2 thoã mãn: Phép dẫn f thực thời gian đa thức máy Turing f( ) f( ) Ký hiệu : 1 ∞ 2 Ví dụ: Instance: n, thành phố: C = {c1, c2,…cm}, khoảng cách ci, cj d(ci, cj) Z+, B Z+ Question: Tồn hay thỏa : C (1) ,C (2) , ,C (m) thoã: ∑ ( ( ) ( )) ( ( ) ( )) 2.4.4.3.2 Bài toán lớp NPC Định nghĩa: Một toán thuộc lớp NP mà toán thuộc lớp NP khác dẫn với thời gian đa thức gọi toán NPC 2.4.4.4 Mối quan hệ P, NP NP biểu diễn hình sau: 2.4.5 Một số tốn NPC - Bài toán SAT - Bài toán 3-SAT - Bài toán Vertex – Cover - Bài toán Clique - Bài toán Subset – Sum - Bài toán Knapsack - Bài tốn Traveling Salesman - … Hình 2.4.4(1) Sơ đồ chứng minh số toán NPC Ở nội dung này, tơi trình bày tốn 3-CNF SAT Lơgic mệnh đề Đầu vào toán SAT công thức Lôgic mệnh đề thường biểu diễn dạng chuẩn tắc hội (CNF) chuẩn tắc tuyển (DNF) Dưới định nghĩa công thức Lôgic mệnh đề dạng chuẩn tắc tương ứng Công thức Lôgic mệnh đề Một công thức Lôgic mệnh đề xây dựng từ biến phép toán lôgic bao gồm: AND (phép hội), OR (phép tuyển), NOT (phủ định), IMPLICATION (phép kéo theo) Dưới khái niệm [1]: Mệnh đề: Mỗi câu phát biểu hay sai gọi mệnh đề Các phép toán mệnh đề bao gồm: Phép phủ định ( ) Phép tuyển ( ) Phép hội ( ) Phép XOR () Phép kéo theo ( ) Phép tương đương ( ) Bảng chân trị phép toán mệnh đề: Bảng giá trị phép toán mệnh đề 3.1 A 0 B AB 1 AB 0 AB 1 A B 1 A B 0 ̅ 1 1 1 1 3.2 Chuẩn tắc hội CNF CNF tuyển sơ cấp hay hội hai hay nhiều tuyển sơ cấp Dạng chuẩn tắc hội CNF có dạng sau: TSC1 … TSCn Trong TSCi ≡ (P1 … Pm) với n, m Pi biến Lôgic mệnh đề Bất kỳ cơng thức Lơgic mệnh đề chuyển đổi thành công thức dạng CNF nhờ phép biến đổi tương đương như: Luật De Morgan, luật phân phối, phép giao hoán, … Dưới số phép biến đổi tương đương: * Luật De Morgan ¬(A B) ¬A ¬B ¬(A B) ¬A ¬B * Tính chất giao hốn phép Lôgic AB BA AB BA * Tính chất kết hợp phép Lơgic (A B) C A ( B C) (A B) C A ( B C) * Tính chất phân phối A (B C) (A B ) (A C) A (B C) (A B ) (A C) * Biểu diễn phép kéo theo qua phép Lôgic khác A B ¬A B A B ¬(¬A B) A B ¬ B ¬A * Biểu diễn phép tương đương qua phép Lôgic khác A B (A B) (B A) A B A B 3.3 Giải toán chứng minh logic 3.3.1 Bài toán chứng logic: 3.3.2 Cách giải Với sở tri thức (một tập mệnh đề) KB mệnh đề cần chứng minh (gọi định lý) Câu hỏi đặt liệu có tồn thủ tục (suy diễn) giải toán chứng minh logic, số hữu hạn bước Có phương pháp (chứng minh) phổ biến: Sử dụng bảng chân lý (Truth-table) Áp dụng luật suy diễn (Inference rules) Chuyển tốn chứng minh thỗ mãn (SAT) 10 o Phương pháp chứng (Resolution/Refutation) minh phản chứng C Nội dung Bài toán SAT 1.1 Lịch sử phát triển SAT: Năm 1960, thuật toán Davis-Putnam đƣợc phát triển Martin Davis Hilary Putnam Năm 1962, thuật toán Davis–Putnam–Logemann–Loveland (DPLL) đƣợc giới thiệu, thuật toán tiến thuật tốn Davis-Putnam trƣớc Năm 1966, thủ tục DPLL với hàm mũ ràng buộc thấp Tseitin phát triển Năm 1971, toán NP đầy đủ Cook phát triển Năm 1992, thuật tốn tìm kiếm địa phương GSAT Selman, Levesque Mitchell phát triển Năm 1993, giải thuật WalkSAT Kautz Selman phát triển Năm 1994, chuyển pha SAT Gent Walsh phát triển Năm 1998, phƣơng pháp Lagrangian rời rạc( DLM) Shang Wah phát triển Từ năm 2002 trở đi, thi đấu SAT tổ chức Cuộc thi tập hợp số kỹ thuật để thi đấu SAT : learning, unlearning, backjumping, watched literal, special heuristics 1.2 Bài toán SAT Bài toán SAT tốn khoa học máy tính nhằm kiểm tra tính thỏa mãn (SAT - Satisfiability) hay khơng thỏa mãn (UNSAT – Unsatisfiability) công thức mệnh đề Logic Bài toán SAT toán chứng minh thuộc lớp NP - đầy đủ (NP - Complete), toán khác muốn chứng minh thuộc lớp NP – đầy đủ giản lược vấn đề tốn SAT SAT (Satisfiability) Cho biểu thức logic φ(n,m) gồm n biến x1,x2,…, …,xn có dạng hội (conjuction) m mệnh đề (clause) C1,C2,…,Cm, C1 ∧ C2 ∧ … ∧ Cm Trong mệnh đề Ci lại tuyển (disjunction) literal Mỗi literal biến xj phủ định ̅ j Một phép gán (assigment) φ(n,m) cách gán cho biến xi giá trị True False Giá trị phép gán giá trị biểu thức (True False) ta thay giá trị tương ứng biến vào biểu thức Xác định xem có tồn hay không phép gán biểu thức φ(n,m) có giá trị True Một cơng thức Φ satisfiable (thỏa mãn )nếu có phép gán giá trị để giá trị Φ SAT = {: Φ công thức thỏa mãn được} Một công thức Lôgic mệnh đề SAT tồn giá trị true false biến Lôgic mệnh đề làm cho công thức nhận giá trị true Ngược lại cơng thức UNSAT giá trị true false biến Lơgic mệnh đề ln làm cho cơng thức có giá trị false Ví dụ 1.1: Ví dụ công thức SAT: 11 Cho công thức Lôgic mệnh đề: F = (x1 ∨ x2 ∨ x3) ∧ (¬x1 ∨ x2 ∨ x3) x1, x2, x3 biến Lơgic mệnh đề Cơng thức F SAT với giá trị x1 = true, x2 = false x3 = true F cho kết true Ví dụ 1.2: Ví dụ cơng thức UNSAT: Cho cơng thức Lơgic mệnh đề: F = (¬x1∨ x1 ∨ ¬x2) ∧ (x1 ∨¬ x3) ∧ (x1 ∨ x2) x1, x2, x3 biến Lơgic mệnh đề Cơng thức F UNSAT với giá trị F ln cho kết false 1.3 Bài tốn CNF-SAT Mơ tả: - Biến logic nhận hai giá trị: true false Kí hiệu a biến logic, a phủ định a Nếu a nhận giá trị true a nhận giá trị false ngược lại, a nhận giá trị false thìa nhận giá trị true Một tên biến biến logic phủ định biến logic (cũng biến logic) - Một mệnh đề dãy tên biến xen kẽ bới phép toán logic OR ( ) - Một biểu thức logic dạng liên kết chuẩn (conjunction nomal form CNF) dãy mệnh đề kết nối bới phép toán AND () ịnh lý Cook: Bài toán CNF-SAT NP-đầy đủ Cần toán NP (A) dẫn chuyển CNF-SAT: - Cần xây dựng ánh xạ T dẫn chuyển input x toán A biểu thức logic - Lời giải toán định A trùng với giá trị true false CNFSAT Bài toán CNF-SAT NP-đầy đủ 1.4 Bài tốn chứng minh thỏa mãn (SAT): Mục đích toán chứng minh thỏa mãn (Satisfiability – SAT-Problem) xác định biểu thức dạng chuẩn kết hợp (CNF) thỏa mãn hay khơng? Tức chứng minh biểu thức hay khơng? 1.5 1.5.1 Giải toán SAT Phương pháp acktracking Áp dụng chiến lược tìm kiếm theo chiều sâu (Depth-first-search) 12 Xét biến (một định đề đơn), xét khả gán giá trị (True/False) cho biến Lặp lại, tất biến gán giá trị, việc gán giá trị cho tập tập tất biến làm cho biểu thức False Thuật toán quay lui: //Thủ tục thử cho xi nhận giá trị mà nhận procedure Try (i: Integer); begin for (mọi giá trị V gán cho xi) begin ; if (xi phần tử cuối cấu hình) then else begin ; Try(i + 1); //Gọi đệ qui để chọn tiếp xi + ; end; end; end; 1.5.2 Các phương pháp tối ưu hoá lặp (Iterative optimization methods) Bắt đầu với phép gán ngẫu nhiên giá trị True/False cho ký hiệu định đề Đổi giá trị (True thành False/ False thành True) biến Heuristic: Ưu tiên phép gán giá trị làm cho nhiều mệnh đề (hơn) Sử dụng phương pháp tìm kiếm cục bộ: Simulated Annealing, WalkSAT Bài toán 3-CNF SAT ịnh nghĩa Phân biệt biến (variables) literals: Mỗi biến xi có literals tương ứng xi phủ ̅ Nếu xi gán giá trị False literal xi có giá trị False cịn literal ̅ có giá trị True Bài toán 3-CNF SAT phát biều dạng biểu thức định sau: Một công thức boolean dạng 3-CNF clause có literal khác 3-CNF-SAT={Ф Є 3-CNF cơng thức thoả mãn được} Ví dụ: C = { , ̅̅̅} 2.1 13 Một mệnh đề (clause) 3-CNF Sat có giá trị True literal mệnh đề có giá trị True, tất biến mệnh đề nhận giá trị False ịnh lý: 3-CNF-SAT Є NP-đầy đủ Ứng dụng tốn - SAT Cho cơng thức logic có dạng: ( ¬x1 ∨ ¬x3 ∨ ¬x4 ) ∧ ( x2 ∨ x3 ∨ ¬x4 ) ∧ ( x1 ∨ ¬x2 ∨ x4 ) ∧ ( x1 ∨ x3 ∨ x4 ) ∧ ( ¬x1 ∨ x2 ∨ ¬x3 ) Với biến xi biến logic ( TRUE or FALSE) Xác định xem có tồn phép gán trị logic vào biến logic cho tồn cơng thức trở thành TRUE Quy ước: - Mỗi literal logic biểu diễn dạng số nguyên dương âm, i -i tương ứng với xi ¬ xi , tương ứng - Mỗi mệnh đề biểu thức biểu diễn mã hóa ký tự Ví dụ, (-1, 2, -3) đại diện cho phân tách (¬ x ∨ x ∨ ¬ x ) - Toàn biểu thức kết nghĩa danh sách liệu Ví dụ, biểu thức có mã hóa: [(-1, -3, -4), (2, 3, -4), (1, -2, 4), (1, 3, 4), (-1, 2, -3)] Phân tích: Thuật tốn solve_sat Hàm trả None khơng thể tìm thấy phép gán thoã mãn Đối với biến logic xi, có biến cấu trúc biểu diễn phần âm phần dương xi ¬ xi Coi tổng cho kết cuối Mệnh đề True Cài đặt 2.2 def solve_sat(expression): if len(expression)==0: return [] # Trivial case Otherwise count vars numvars = max([max([abs(v) for v in clause]) for clause in expression]) lp = glpk.LPX() # Construct an empty linear program glpk.env.term_on = False # Stop the annoying output lp.cols.add(2*numvars) # As many columns as there are literals for col in lp.cols: # Literal must be between false and true col.bounds = 0.0, 1.0 def lit2col(lit): # Function to compute column index return [2*(-lit)-1,2*lit-2][lit>0] for i in xrange(1, numvars+1): # Ensure "oppositeness" of literals lp.rows.add(1) lp.rows[-1].matrix = [(lit2col(i), 1.0), (lit2col(-i), 1.0)] lp.rows[-1].bounds = 1.0 # Must sum to exactly for clause in expression: # Ensure "trueness" of each clause lp.rows.add(1) lp.rows[-1].matrix = [(lit2col(lit), 1.0) for lit in clause] lp.rows[-1].bounds = 1, None # At least one literal must be true retval = lp.simplex() # Try to solve the relaxed problem assert retval == None # Should not fail in this fashion if lp.status!='opt': return None # If no relaxed solution, no exact sol for col in lp.cols: 14 col.kind = int retval = lp.integer() # Try to solve this integer problem assert retval == None # Should not fail in this fashion if lp.status != 'opt': return None return [col.value > 0.99 for col in lp.cols[::2]] Ví dụ chạy Vì vậy, làm để làm việc này? Hãy nhớ lại cơng thức CNF chúng: (¬ x ∨ ¬ x ∨ ¬ x ) ∧ ( x ∨ x ∨ ¬ x ) ∧ ( x ∨ ¬ x ∨ x ) ∧ ( x ∨ x ∨ x ) ∧ (¬x1∨x2∨¬x3) Điều có mã hóa [(-1, -3, -4), (2, 3, -4), (1, -2, 4), (1, 3, 4), (-1, 2, -3)] Giả sử chạy điều trình Python exp = [(-1, -3, -4), (2, 3, -4), (1, -2, 4), (1, 3, 4), (-1, 2, -3)] print resolve_sat (exp) Kết xuất ra: [True, True, False, False] Vì vậy, x1 = T, x2 = T, x3 = F x4 = F Kiểm tra lại ta có mệnh đề thứ hai ¬ x Các mệnh đề thứ ba thứ tư x Mệnh đề thứ năm (cuối cùng) x2 2.3 2.3.1 Thuật toán DPLL giải toán SAT Lịch sử DPLL = Davis-Putnam-Logemann-Loveland Bài báo (Davis Putnam) năm 1960: memory problems – vấn đề nhớ Bài báo thứ hai (Davis, Logemann Loveland) vào năm 1962: Depth-firstsearch with backtracking – duyệt theo chiều sâu Những cải tiến năm 90 đầu năm 90 làm cho DPLL hiệu Thuật toán thức đưa vào làm việc GRASP SATO hệ thống Relsat, cải tiến 2.3.2 Giải thuật DPLL Kiểm tra tính thoả cơng thức Logic dạng chuẩn CNF Liệt kê mơ hình với số Heuristics: i Kết thức sớm: Mệnh đề có literal Mệnh đề sai tất literal sai ii Mệnh đề quán: xuất dấu mệnh đề 15 Ví dụ: (A B), (B C), (C A), A B quán, C không quán Cho mệnh đề quán True iii Câu đơn vị: Câu đơn vị: câu có literal Literal câu phải True 2.3.3 ài đặt giải thuật D Kết luận Có nhiều cách khác tồn để giải 3-CNF SAT Từ tìm kiếm khơng gian định giá, để xây dựng toàn giải pháp thiết lập để chứng minh thỏa mãn cách thao tác công thức Ở phạm vi tơi giới thiệu tốn CNF SAT thuật toán DPLL E Tài liệu tham khảo Bài tập lớn phân tích thiết kế thuật giải _ Thái Trung Tín _ Trường ĐH Tôn Đức Thắng _ 2017 https://123doc.org/document/4691570-tim-hieu-nhung-bai-toan-sat.htm http://www.giaithuatlaptrinh.com A new algorithm for Solving 3-CNF-SAT problem, Belal Qasemi, University of Bonab, Bonab, Iran belal@aut.ac.ir A Polynomial Algorithm for 3-sat, M Angela Weiss - Draft Version, weiss@ime.usp.br, Universidade de S˜ao Paulo, S˜ao Paulo - Brasil 16 ... - Bài toán SAT - Bài toán 3-SAT - Bài toán Vertex – Cover - Bài toán Clique - Bài toán Subset – Sum - Bài tốn Knapsack - Bài tốn Traveling Salesman - … Hình 2.4.4(1) Sơ đồ chứng minh số toán NPC... 11 Bài toán SAT 11 1.1 Lịch sử phát triển SAT: 11 1.2 Bài toán SAT 11 1.3 Bài toán CNF-SAT 12 1.4 Bài toán chứng minh thỏa mãn (SAT): 12 1.5 Giải toán. .. 1.2 Bài toán SAT Bài toán SAT toán khoa học máy tính nhằm kiểm tra tính thỏa mãn (SAT - Satisfiability) hay không thỏa mãn (UNSAT – Unsatisfiability) công thức mệnh đề Logic Bài toán SAT toán