TrưỜng đẠi học công nghệ ĐẶng thị như hoa các kỹ thuật sat solving



tải về 160.27 Kb.
Chuyển đổi dữ liệu21.12.2018
Kích160.27 Kb.



ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

ĐẶNG THỊ NHƯ HOA


CÁC KỸ THUẬT SAT SOLVING

Ngành: Công nghệ Thông tin

Chuyên ngành: Kỹ thuật phần mềm

Mã số: 60.48.01.03


TÓM TẮT LUẬN VĂN THẠC SĨ

NGÀNH CÔNG NGHỆ THÔNG TIN


Hà Nội - 2016

TÓM TẮT


SAT Solving là bài toán chứng minh sự thỏa mãn (SAT / UNSAT) của một công thức Lôgic mệnh đề (Propositional Lôgic) và các công cụ tự động SAT Solver đóng vai trò là các bộ giải công thức đó. Ngày nay các SAT Solver cũng đóng vai trò là các công cụ nền cho các SMT (SAT Module Theories) Solver, những công cụ tự động chứng minh sự thỏa mãn hay không thỏa mãn (SAT/UNSAT) của các công thức lôgic trên lý thuyết vị từ cấp I (FOL I). Các nghiên cứu về SMT Solver hiện nay đang là các chủ đề có tính thời sự, bởi SMT Solver được ứng dụng trong các bài toán về kiểm chứng, kiểm thử chương trình.

Bài toán SAT là bài toán có độ phức NP và các kỹ thuật SAT Solving đã được nghiên cứu, phát triển đã lâu. Tuy nhiên, sự phát triển mạnh mẽ của các SAT solver trong những năm gần đây thông qua các cuộc thi SAT Competition tổ chức hàng năm cho thấy nhiều kỹ thuật cải tiến trong cài đặt các SAT solver đã được tiến hành thực nghiêm. Ngày nay các SAT solver có khả năng giải quyết các công thức lên đến hàng triệu biến với hàng trăm ngàn mệnh đề.

Luận văn đi sâu tìm hiểu các kỹ thuật cơ bản, các thuật toán cơ bản được cài đặt trong các SAT solver, đồng thời đưa ra các ví dụ minh họa cụ thể nhằm làm rõ cách thức hoạt động. Các kỹ thuật này được cài đặt trong một SAT solver phổ biến hiện nay đó là MiniSAT, một SAT solver mã nguồn mở mà rất nhiều SAT solver mạnh trên thế giới được mở rộng cải tiến từ SAT Solver này. Bên cạnh đó, luận văn cũng tìm hiểu 2 kĩ thuật tiên tiến đang được cài đặt trong các SAT Solver mạnh hiện nay là GlueMinisat, Glucose. Luận văn tiến hành chạy thực nghiệm so sánh 3 SAT solver này trên các bộ dữ liệu thực nghiệm chuẩn (từ cuộc thi SAT competition) để thấy rõ tính hiệu quả, tính nhanh nhạy của các kỹ thuật tiên tiến đang được sử dụng.

Nội dung luận văn này được chia thành 4 chương như sau:



  • Chương 1 sẽ được giới thiệu về các vấn đề cơ bản như Lôgic mệnh đề, bài toán SAT, các SAT Solver và ứng dụng của phương pháp SAT Encoding .

  • Chương 2 sẽ trình các kỹ thuật SAT solving cơ bản bao gồm thủ tục DPLL, và các kỹ thuật áp dụng trong DPLL như: CDCL, Back Jumping, 2 Watched literals, Clause Elimination.

  • Chương 3 trình bày các kỹ thuật SAT Solving tiên tiến hiện nay, những kỹ thuật đang được cài đặt trong các SAT solver mạnh trên thế giới như GlueMinisat, Glucose.

  • Chương 4 tiến hành thực nghiệm so sánh và đánh giá 3 SAT Solver trên bộ dữ liệu chuẩn của cuộc thi SAT competition hàng năm.

MỤC LỤC


MỤC LỤC iv

CHƯƠNG 1. GIỚI THIỆU 1

1.4.2. Trò chơi Sodoku 3

1.5. Một số ứng dụng khác của SAT 3

3



CHƯƠNG 2. CÁC KỸ THUẬT SAT SOLVING CƠ BẢN 4

2.1. Thủ tục DPLL truyền thống 4

2.1.1. Một số khái niệm cơ bản 4

2.1.2. Các luật cơ bản của thủ tục DPLL 5

2.2. Thủ tục DPLL hiện đại 7

2.2.1. Backjumping 7

2.2.2. Learn và Forget 8

2.2.3. Mệnh đề Backjump 8

2.3. Thuật toán CDCL 10

2.3.1. Nội dung chính của CDCL 10

2.3.2. Giải thuật CDCL 10

2.3.3. Suy diễn mệnh đề và mức quay lui 11

2.3.4. Biểu đồ kéo theo 12

2.3.5. Học từ mệnh đề xung đột 12

2.4. Kỹ thuật Two -Watched literals 13

2.4.1. Watched literal 13

2.4.2. Two- Watched literal 13

2.5. Giải pháp loại bỏ biến và loại bỏ mệnh đề 14

2.5.1. Loại bỏ biến 14

2.5.2. Loại bỏ mệnh đề 16



CHƯƠNG 3. CÁC KỸ THUẬT SAT SOLVING TIÊN TIẾN HIỆN NAY 18

3.1. GlueMiniSat 18

3.1.1. Giới thiệu 18

3.1.2. Tiêu chí đánh giá Learn Clause 18

3.1.3. Chiến lược tự khởi động lại 18

3.2. Glucose 19

3.2.1. Quản lý mệnh đề học 19

3.2.2. Khởi động lại 19



CHƯƠNG 4. THỰC NGHIỆM 20

4.1. Giới thiệu về MiniSat 20

4.2. Giao diện lập trình ứng dụng 20

4.3. Tổng quan về Minisat 20

4.4. Thực nghiệm 21

4.4.1. Biên dịch Minisat 21

4.4.2. Biên dịch GlueMinisat 22

4.4.3. Biên dịch Glucose 23

4.4.4. Bộ dữ liệu thực nghiệm (Benchmarks) 23

4.4.5. Thực nghiệm 23



KẾT LUẬN 26

TÀI LIỆU THAM KHẢO 27




MỤC LỤC iv

CHƯƠNG 1. GIỚI THIỆU 1

1.4.2. Trò chơi Sodoku 3

1.5. Một số ứng dụng khác của SAT 3

3



CHƯƠNG 2. CÁC KỸ THUẬT SAT SOLVING CƠ BẢN 4

2.1. Thủ tục DPLL truyền thống 4

2.1.1. Một số khái niệm cơ bản 4

2.1.2. Các luật cơ bản của thủ tục DPLL 5

2.2. Thủ tục DPLL hiện đại 7

2.2.1. Backjumping 7

2.2.2. Learn và Forget 8

2.2.3. Mệnh đề Backjump 8

2.3. Thuật toán CDCL 10

2.3.1. Nội dung chính của CDCL 10

2.3.2. Giải thuật CDCL 10

2.3.3. Suy diễn mệnh đề và mức quay lui 11

2.3.4. Biểu đồ kéo theo 12

2.3.5. Học từ mệnh đề xung đột 12

2.4. Kỹ thuật Two -Watched literals 13

2.4.1. Watched literal 13

2.4.2. Two- Watched literal 13

2.5. Giải pháp loại bỏ biến và loại bỏ mệnh đề 14

2.5.1. Loại bỏ biến 14

2.5.2. Loại bỏ mệnh đề 16



CHƯƠNG 3. CÁC KỸ THUẬT SAT SOLVING TIÊN TIẾN HIỆN NAY 18

3.1. GlueMiniSat 18

3.1.1. Giới thiệu 18

3.1.2. Tiêu chí đánh giá Learn Clause 18

3.1.3. Chiến lược tự khởi động lại 18

3.2. Glucose 19

3.2.1. Quản lý mệnh đề học 19

3.2.2. Khởi động lại 19



CHƯƠNG 4. THỰC NGHIỆM 20

4.1. Giới thiệu về MiniSat 20

4.2. Giao diện lập trình ứng dụng 20

4.3. Tổng quan về Minisat 20

4.4. Thực nghiệm 21

4.4.1. Biên dịch Minisat 21

4.4.2. Biên dịch GlueMinisat 22

4.4.3. Biên dịch Glucose 23

4.4.4. Bộ dữ liệu thực nghiệm (Benchmarks) 23

4.4.5. Thực nghiệm 23



KẾT LUẬN 26

TÀI LIỆU THAM KHẢO 27



BẢNG CÁC THUẬT NGỮ VÀ TỪ VIẾT TẮT

STT

Thuật ngữ

Từ viết tắt / Diễn giải

1

SAT

Satisfiability

2

UNSAT

Unsatisfiability

3

SAT Solver

Một công cụ chứng minh tự động các công thức Lôgic mệnh đề

4

CNF

Conjunctive Normal Form

5

BCP

Boolean Constraint Propagation

6

DPLL

Davis–Putnam–Logemann–Loveland

7

CDCL

Conflict Driven Clause Learning

8

UIP

Unique Implication Point

9

LBD

Literal Blocks Distance



CHƯƠNG 1. GIỚI THIỆU


1.1. Bài toán SAT

Bài toán SAT là một bài toán trong 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ủa một công thức Lôgic mệnh đề.

Một công thức Lôgic mệnh đề là SAT khi tồn tại một bộ giá trị true hoặc false trên các 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 đó là UNSAT khi và chỉ khi mọi bộ giá trị true hoặc false của biến Lôgic mệnh đề luôn làm cho công thức có giá trị là false.

1.2. Lôgic mệnh đề

Đầu vào của bài toán SAT là một công thức Lôgic mệnh đề thường được biểu diễn dưới dạng chuẩn tắc hội (CNF) hoặc chuẩn tắc tuyển (DNF).



1.2.1. Công thức Lôgic mệnh đề

Một công thức Lôgic mệnh đề được xây dựng từ các biến và các 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 đây là các khái niệm cơ bản [1]:



a. Mệnh đề

Định nghĩa: Mỗi câu được phát biểu là đúng hay sai được gọi là một mệnh đề.

b. Phép phủ định

Cho P là một mệnh đề, câu “không phải là P” là một mệnh đề khác được gọi là phủ định của mệnh đề P. Kí hiệu: P.



c. Phép hội

Cho hai mệnh đề P, Q. Câu xác định “P và Q” là mệnh đề mới được gọi là hội của 2 mệnh đề P và Q. Kí hiệu: P Q.



d. Phép tuyển

Cho hai mệnh đề P, Q. Câu xác định “P hoặc Q” là một mệnh đề mới được gọi là tuyển của 2 mệnh đề P và Q. Kí hiệu: P Q



e. Phép kéo theo

Cho hai mệnh đề P, Q. Câu “nếu P thì Q” là một mệnh đề mới được gọi là mệnh đề kéo theo của 2 mệnh đề P, Q. Kí hiệu: P Q. P được gọi là giả thiết và Q được gọi là kết luận.



f. Phép XOR

Cho 2 mệnh đề P, Q. Câu xác định “chỉ duy nhất P hoặc Q” nghĩa là “ hoặc là P đúng hoặc là Q đúng nhưng không đồng thời cả 2 đúng” là một mệnh đề mới được gọi là P XOR Q, kí hiệu: P Q.



g. Phép tương đương

Cho hai mệnh đề P, Q. Câu “P nếu và chỉ nếu Q” là một mệnh đề mới được gọi là P tương đương với Q, kí hiệu: P Q.



1.2.2. Chuẩn tắc hội CNF

CNF là một tuyển sơ cấp hay hội của hai hay nhiều tuyển sơ cấp. Dạng chuẩn tắc hội CNF có dạng như sau:

TSC1 TSCn

Trong đó TSCi ≡ (P1 Pm) với n, m và Pi là các biến Lôgic mệnh đề.



1.3. SAT Solver

Công cụ chứng minh một cách tự động công thức logic mệnh đề là SAT hay UNSAT được gọi là SAT Solver.



1.4. Phương pháp SAT Encoding

SAT Encoding là một phương pháp mà trong đó một số bài toán có thể được giải quyết bằng việc đưa về bài toán SAT: Biểu diễn các vấn đề bằng các công thức Lôgic mệnh đề và áp dụng SAT Solver vào để giải các công thức Lôgic mệnh đề.



1.4.1. Trò chơi Hitori

1.4.2. Trò chơi Sodoku


1.4.3. Trò chơi Slitherlink

1.5. Một số ứng dụng khác của SAT

CHƯƠNG 2. CÁC KỸ THUẬT SAT SOLVING CƠ BẢN

2.1. Thủ tục DPLL truyền thống

2.1.1. Một số khái niệm cơ bản


Một công thức Lôgic mệnh đề thường được biểu diễn dưới dạng chuẩn tắc hội hay chuẩn tắc tuyển với các biến lôgic ký hiệu là x, y, z, a, b, c nhận giá trị là TRUE hoặc FALSE.

Dưới đây là một số định nghĩa và ký hiệu dùng trong thủ tục DPLL:



  • Literal: là các biến hay phủ định của các biến

  • Mệnh đề - Clause: Tuyển (phép or) của các literal hoặc hội (phép and) của các literal

  • Công thức dạng chuẩn CNF (chuẩn tắc hội): Là công thức có dạng C1 C2 …..Cn hay viết tắt là {C1, C2,….,Cn} trong đó Ci = l1l2 …lm với li là các literal

  • Công thức dạng chuẩn DNF (chuẩn tắc tuyển): Là công thức có dạng C1 C2 …..Cn trong đó Ci = l1l2 …lm với li là các literal

  • SAT: Một công thức Lôgic mệnh đề là SAT nếu tồn tại một phép gán giá trị làm cho công thức nhận giá trị TRUE.

  • UNSAT: Một công thức Lôgic mệnh đề là UNSAT nếu mọi bộ phép gán giá trị luôn làm cho công thức nhận giá trị FALSE.

  • Tương đương: Hai công thức Lôgic là tương đương nhau nếu mọi phép gán giá trị đều làm cho 2 công thức nhận giá trị như nhau.

  • Mô hình - Model: Là một phép gán giá trị cho một phần hoặc toàn bộ biến Lôgic

  • Validity: Một công thức là VALID nếu mọi phép gán giá trị đầu vào đều làm cho công thức bằng TRUE.

Thủ tục DPLL mô hình hóa các bước tìm lời giải của bài toán SAT bằng phép biến đổi các trạng thái của hệ thống S0 S1 S2, Sn. Trong đó:

  • Trạng thái Si được biểu diễn bằng cặp (M, F) và ký hiệu M║F, với M là một phép gán hiện thời gồm chuỗi các Literal.

  • S0 : là trạng thái bắt đầu, nó có dạng ║F, với M là rỗng và F là công thức Lôgic đầu vào.

  • Sn: là trạng thái kết thúc, có dạng M║F khi đó M là một mô hình (Model) của công thức Lôgic F với M là một phép gán giá trị cho toàn bộ biến Lôgic của F mà làm cho F là TRUE; hoặc Sn có dạng FailState, khi F là công thức UNSAT.

  • Si Si+1 là một bước chuyển trạng thái khi áp dụng các luật chuyển trạng thái được trình bày ở phần sau của thủ tục DPLL.

2.1.2. Các luật cơ bản của thủ tục DPLL




  1. UnitPropagate:

M║F, C l M l ║ F, C l nếu





  1. PureLiteral

M║F M l ║ F nếu





  1. Decide :

M║F M l ║ F nếu

  1. Fail

M║F, C failstate nếu

  1. Backtrack

M l N║F, C M l ║ F, C nếu

Thủ tục DPLL sẽ áp dụng các luật trên để bắt đầu từ trạng thái S0 ( ║F) và tìm ra trạng thái kết thúc Sn.


2.2. Thủ tục DPLL hiện đại

2.2.1. Backjumping


Backjump có thể quay lui đến vài mức quyết định cùng một lúc, đến mức quyết định thấp hơn mức quyết định ngay trước nó và thêm một vào literal vào mức quyết định đó.
Backjump :
M l N║F, C M l’ ║ F, C nếu

Trong luật Backjump, mệnh đề C là mệnh đề xung đột (conflicting clause) và mệnh đề C’ l’ là mệnh đề để nhảy(backjump clause).



Luật backjump thực việc như sau: Tìm một mệnh đề backjump, quay trở lại 1 mức quyết định sớm hơn và thêm unitpropagate literal (literal có được nhờ áp dụng luật unit propagate) vào ngữ cảnh.

Trong thủ tục DPLL hiện đại, các mệnh đề nhảy được thêm vào tập các mệnh đề và gọi là mệnh đề học được(learned clause), hay còn được gọi là bổ đề. Cách này còn được gọi là học tránh xung đột(conflict-driven learning).


2.2.2. Learn và Forget


Lgroup 112earn :
M║F M ║ F, C nếu

Fgroup 109orget :

M║F M ║ F, nếu




2.2.3. Mệnh đề Backjump


a. Dùng đồ thị xung đột tìm mệnh đề Backjump

b. Dùng thuật toán tìm mệnh đề Backjump

Input: A propositional CNF formula [3]

Output: “Satisfiable” if the formula is satisfiable and “Unsatisfiable” otherwise

1. function DPLL

2. If BCP() = “conflict” then return “Unsatiable”;

3. While (TRUE) do

4. If DECIDE() then return “ Satisable”;

5. else

6. while (BCP() = “conflict”) do

7. backtrack-level:=ANALYZE – CONFLICT();

8. If backtrack-level <0 then return “Unsatiable”;

9. else Backtrack(backtrack-level);



Thuật toán ANALYZE – CONFLICT [3]

Output: Backtracking decision level + a new conflict clause

1. If current-decision-level = 0 then return -1;

2. cl:= current – conflicting-clause;

3. While ( STOP-CRITERION-MET(cl)) do

4. lit:= LAST-ASSIGNED-LITTERAL(cl);

5. var:= VARIABLE-OF-LITERAL(lit);

6. ante:= ANTECEDENT(lit);

7. cl:= RESOLVE(cl, ante,var);

8. add-clause-to-database(cl);

9. return clause-asserting-level(cl); ►2 nd highest decision level in cl


2.3. Thuật toán CDCL

2.3.1. Nội dung chính của CDCL


- Chọn 1 biến và gán giá trị đúng hay sai;

- Áp dụng Unit propagation (BCP);

- Xây dựng đồ thị suy diễn;

- Nếu có xung đột thì phân tích xung đột và quay lại (không theo thứ tự thời gian) về mức quyết định thích hợp;

- Nếu không tiếp tục từ bước 1 cho đến khi tất các giá trị biến được gán

2.3.2. Giải thuật CDCL


Algorithm CDCL (cnfFormula, variables):

If (UnitPropagation(cnfFormula,variables) = CONFLICT)

return UNSAT

else

decisionLevel = 0



while (not AllVariablesAssigned(cnfFormula,variables)):

(variable, val) = PickBranchingVariable(cnfFormula,variables)

decisionLevel += 1

insert (variable, val) in variables



if (UnitPropagation(cnfFormula,variables) == CONFLICT):

backtrackLevel= ConflictAnalysis(cnfFormula,variables)



if( backtrackLevel < 0):

return UNSAT

else

Backtrack(cnfFormula,variables,backtrackLevel) decisionLevel = backtrackLevel



return SAT [12]

Ngoài các hàm CDCL chính, các hàm phụ trợ sau đây được sử dụng:



  • UnitPropagation: kiểm tra xem có xung đột xảy ra không

  • PickBranchingVariable: lựa chọn một nhánh để gán giá trị cho các biến trong nhánh.

  • ConflictAnalysis: phân tích xung đột gần nhất và học một mệnh đề mới từ việc xung đột.

2.3.3. Suy diễn mệnh đề và mức quay lui

2.3.3.1. Suy diễn mệnh đề


Hai mệnh đề có thể suy diễn với nhau nếu ở 2 mệnh đề cùng chứa một literal có giá trị khác nhau, literal này sẽ được triệt tiêu.

2.3.3.2. Mức quay lui


Mức quay lui là mức quyết định cao thứ 2 trong tất cả các mức quyết định của các literal trong mệnh đề được học.

2.3.4. Biểu đồ kéo theo


Khi một xung đột xảy ra sau quá trình suy diễn ràng buộc lý luận, các phép suy diễn dẫn tới từng literal trong mệnh đề xung đột sẽ được xác định rõ ràng.

Việc xác định các phép suy diễn này sẽ được lặp lại đệ quy với tất cả các literal được suy diễn tại mức quyết định hiện tại cho đến khi xét tới biến quyết định của mức quyết định hiện tại. Kết quả sau khi xác định sẽ tạo thành một biểu đồ hở có hướng, hay được gọi là biểu đồ kéo theo.


2.3.5. Học từ mệnh đề xung đột


Bắt đầu từ mệnh đề xung đột, ta bắt đầu từ biến được suy diễn ở cấp quyết định gần nhất (lớn nhất). Tìm ra các biến suy diễn tới biến đó và giữ lại những biến được suy diễn ở cấp quyết định nhỏ hơn cấp quyết định gần nhất.Thủ tục này được lặp lại cho đến khi chỉ còn duy nhất một biến được gán hay suy diễn ở mức quyết định gần nhất. Đây được gọi là điểm suy diễn duy nhất đầu tiên của biểu đồ (1st UIP – Unique Implication Point).

Sau mỗi lần tìm ra các biến mới, ta thêm chúng vào mệnh đề xung đột bằng cách thực hiện toán tử resolution giữa mệnh đề xung đột đang có và tập biến được suy diễn mới tìm được với biến mà ta đang xét.

Sau khi phân tích xong, thêm mệnh đề học được vào các ràng buộc và trả lại mức backtrack.

2.4. Kỹ thuật Two -Watched literals

2.4.1. Watched literal


Ý tưởng cơ bản:

- Khi một literal a được gán là true

- Với các mệnh đề k ở trong danh sách theo dõi (watched list) của, ta làm như sau:


    • Nếu tất cả các literal trừ b được gán là false rồi thì gán b là true.

    • Nếu tất cả các literal đều được gán là false rồi thì thoát và kết luận là UNSAT.

    • Nếu có ít nhất một literal được gán là true rồi thì tiếp tục.

    • Nếu không thì thêm k vào danh sách các phần tử được theo dõi của một literal chưa được gán và xóa nó khỏi danh sách theo dõi của .

2.4.2. Two- Watched literal


a. Ý tưởng cơ bản

Two - watched literal là sự mở rộng của watched literal. Với watched literal (cơ bản) chỉ có một literal được theo dõi thì với 2-watched literal sẽ có 2 literal được theo dõi.

Mọi mệnh đề đều có 2 literal được chọn là .Với mỗi một mệnh đề C và được chọn một cách linh hoạt và thay đổi theo thời gian.được theo dõi đúng cách theo giá trị V nếu:


  • Chúng đều chưa được định nghĩa

  • Ít nhất một trong số chúng là true.

2.5. Giải pháp loại bỏ biến và loại bỏ mệnh đề

2.5.1. Loại bỏ biến

2.5.1.1. Loại bỏ biến sử dụng toán tử phân giải


Cho 2 mệnh đề C1={x, a1, a2, .., an} và C2={, b1, b2,..,bn}.

Khi đó ta có thể thay thế hai mệnh đề C1 và C2 bằng mệnh đề C = { a1, a2, .., an, b1, b2,..,bn}. Ta viết: C = C1C2


2.5.1.2. Loại bỏ biến với quan hệ self – subsum(tự gộp).


Mệnh đề C2 hầu như gộp trong mệnh đề C1, trừ một literal  mà x lại có mặt trong C­2. Khi đó thực hiện phân giải trên C1, C2 ta được . Sau khi thêm  vào công thức CNF, chúng ta loại bỏ C1 cốt yếu là để loại bớt một literal.

Khi đó ta nói C1 được củng cố bởi việc tự gộp sử dụng C2.



Thuật toán:

selfSubsume(Clause C)

for each p C do

for each C’ subsumed by C[p :=] do

strengthen(C’, ) - remove from C’

2.5.1.3. Loại bỏ biến bằng cách thay thế

Thuật toán:

maybeEliminate(Var x)

if (x assigned or has zero occurrences) return

if (#occurs of x and are both>10) return - heuristic cut- off

def = findDefinition(x)

if (def # NODEF) maybeSubstitute(def)

else maybeClauseDistribute(x)

if (x was eliminated)

propagate Toplevel()

remove learned clause with x - for incremental SAT only



Giải nghĩa: maybeClauseDistribute(x): loại bỏ x bởi mệnh đề phân phối nếu kết quả có mệnh đề ít hơn so với bản gốc (sau khi loại bỏ mệnh đề tầm thường thỏa mãn)

findDefinition(x): trả về hoặc là x ↔ p1 p2 ∨∨. . . ∨ pn hoặc x ↔ p1 ∧ p2 ∧. . . ∧ pn hoặc NoDef.

  • maybeSubstitute(def) định nghĩa của một chức năng phụ thuộc biến và thay thế mỗi lần xuất hiện của biến theo định nghĩa của nó.

2.5.2. Loại bỏ mệnh đề

2.5.2.1. Loại bỏ mệnh đề bằng quan hệ subsum(gộp)


Một mệnh đề C1 được gộp với C2 nếu C1 C2. Một mệnh đề được gộp là không cần thiết và có thể bỏ ra khỏi công thức.

Thuật toán:

findSubsumed(Clause C)

pick the literal p in C with the shortest occur list



for each C’ occur (p) do

if (C # C’ && subset( C, C’))

add C’ to result

return result

subset( Clause C, Clause C’)

if (size (C) & > size (C’)) return FALSE

if (sig(C) & sig(C’) # 0 return FALSE

else return result of iterating over C and C’ in a complete (expensive) subset test

2.5.2.2. Loại bỏ mệnh đề bằng thay thế biến


Nếu x có sự định nghĩa và được loại trừ bởi mệnh đề phân phối, nhiều phép phân giải thừa bị phát sinh. Bằng cách sử dụng định nghĩa, những mệnh đề này có thể được loại bỏ dễ ràng.

Ví dụ 2.12 :

Giả sử có tập các mệnh đề S như sau:



Như trên ta thấy S được chia ra làm 4 tập nhỏ là :

Rx = {1, 2} Gx = {3, 4}

= {4, 5}  = {6}

Tương tự có thể chia S thành 2 tập nhỏ là Sx

Sx = {1, 2, 3}  = {4, 5, 6}

Ta có:  = () ()





 chỉ chứa các mệnh đề không có nghĩa nên có || = 7 > 5 = ||. Thay thế S bởi sẽ giảm số lượng mệnh đề từ 6 thành 5, trong khi việc thực hiện phân tách mệnh đề đầy đủ thực tế sẽ tăng số mệnh để từ 6 thành 7. Ngoài ra, các mệnh đề thừa trong  có thể được thu thập từ .

CHƯƠNG 3. CÁC KỸ THUẬT SAT SOLVING TIÊN TIẾN HIỆN NAY

3.1. GlueMiniSat

3.1.1. Giới thiệu


GlueMiniSat là một SAT solver dựa trên LBD được đề xuất bởi Audemard và Simon [5].

3.1.2. Tiêu chí đánh giá Learn Clause


Một Block bao gồm toàn bộ các literals có cùng level quyết định. Một mệnh đề học được ước lượng bởi số Block có trong mệnh đề.

Định nghĩa LBD: Cho mệnh đề C và một phần vùng các Literals của nó vào n tập con theo phép gán hiện tại, các Literals được phân vào cùng một vùng có chung mức level. LBD của C chính là n [5].

Một mệnh đề C có LBD là hai thì gọi là Glue Clause”

3.1.3. Chiến lược tự khởi động lại


GlueMiniSat sử dụng chiến lược tự khởi động lại nếu một trong hai điệu kiện sau thỏa mãn [9]:

  1. Trung bình mức quyết định của 50 cuộc xung đột cuối * 1.0 lớn hơn mức trung bình toàn bộ.

  2. Trung bình LBDs của 50 mệnh đề học cuối * 0,8 lớn hơn mức trung bình toàn bộ của LBD.

Mục đích của việc khởi động lại này là giảm mức quyết định và nhận được các mệnh đề có LBD nhỏ.

3.2. Glucose


GLUCOSE sẽ giữ mọi glue clause mà không bao giờ xóa chúng trong suốt quá trình tìm kiếm. Các LBD của mệnh đề sẽ được tính toán lại khi chúng được sử dụng và cập nhật nếu LBD trở lên nhỏ hơn. Quá trình cập nhật này rất quan trọng để có thể tạo được nhiều Glue Clauses.

3.2.1. Quản lý mệnh đề học


Trước glucose [6], quản lý mệnh đề học không được coi là một phần quan trọng trong giải quyết CDCL. Kết quả của glucose phụ thuộc rất nhiều vào chất lượng của LBD. Đó là một chỉ số rất tốt trên nhiều trường hợp tuy nhiên nó không đủ để phân biệt. Vì vậy cần giữ cho LBD nhiều hơn. Thực hiện trì hoãn việc làm sạch tiếp theo bằng một hằng số 1000. LBD được tính toán khi mệnh đề được học. Thực hiện tính toán lại khi một mệnh đề được sử dụng trong BCP và thay đổi nó, nếu nó trở nên nhỏ hơn.

3.2.2. Khởi động lại


Trong Glucose, khởi động lại được dựa trên LBD của các mệnh đề học [2]. Nó so sánh một LBD ‘short term average – trung bình ngắn hạn’ trong mệnh đề học với một ‘long term average- trung bình dài hạn’.

Nếu trung bình ngắn hạn là lớn hơn đáng kể so với mức trung bình dài hạn (25%), khởi động lại được kích hoạt, trừ khi khởi động lại xảy ra rất gần đây (ít hơn 50 mâu thuẫn trước đó).




CHƯƠNG 4. THỰC NGHIỆM

4.1. Giới thiệu về MiniSat


Minisat là một SAT Solver nhanh được phát triển bởi Niklas Eén và Niklas Sörensson [19].

Một vài đặc trưng về MiniSAT: Dễ dàng sửa đổi



  • Dễ dàng sửa đổi

  • Hiệu quả cao

  • Được thiết kế để tích hợp

4.2. Giao diện lập trình ứng dụng


Đây là giao diện ngoài của MiniSAT. Các kiểu  lần lượt là các kiểu của biến, literal và vec-tơ.

Class Solver - Public interface

var newVar ()

boll addClause (Vec literals)

bool add... (...)

bool simplifyDB ()

bool solve (Vec assumptions)

Vec model - If found, this vector has the model

Hình 4. 1: Giao diện ứng dụng của Minisat [26]

4.3. Tổng quan về Minisat


Suy diễn (Propagation)

Học (Learning)

Tìm kiếm

Độ ưu tiên của biến

Loại bỏ ràng buộc

Top-level solver

4.4. Thực nghiệm


Hai kỹ thuật Glueminisat và Glucose đã được cài đặt thành hai SAT Solver là Glueminisat [7] và Glucose [8] .

4.4.1. Biên dịch Minisat


Để thực hiện biên dịch Minisat trên Ubuntu, ta thực hiện các bước dưới đây:

- Tạo thư mục chứa Minisat: mkdir Minisat

- Download minisat-2.2.0.tar.gz:

wget http://minisat.se/downloads/minisat-2.2.0.tar.gz

- Gõ câu lệnh : tar xvf minisat-2.2.0.tar.gz

- Gõ cd minisat

- Gõ export MROOT=$(pwd)

- Gõ cd core

- Gõ sudo apt-get install libghc-zlib-dev

- Gõ make (Tạo được file chạy minisat)

- Tạo thư mục examples để lưu lại các benchmark. Gõ mkdir examples

- Copy file minisat ở thư mục Minisat/core chuyển vào thư mục examples: Gõ cp ./core/minisat ./examples/

- Gõ 2 câu lệnh sau để thực hiện chạy minisat:

cd ~/minisat/examples/

./minisat

4.4.2. Biên dịch GlueMinisat


Để thực hiện biên dịch GlueMinisat trên Ubuntu, ta thực hiện các bước dưới đây:

- Download glueminisat-2.2.8:

wget http://glueminisat.nabelab.org/home/download/glueminisat-2.2.8.tar.gz

- Giải nén: unzip glueminisat-2.2.8.zip

- Chạy file build.sh: Gõ ./build.sh (Tạo được file chạy Glueminisat)

- Tạo thư mục examples để lưu lại các benchmark. Gõ mkdir examples

- Copy file glueminisat-simp ở thư mục Glueminisat/binary chuyển vào thư mục examples: cp binary/glueminisat-simp examples/

- Gõ 2 câu lệnh sau để thực hiện chạy Glueminisat:



cd ~/glueminisat-2.2.8/examples/

./glueminisat-simp

4.4.3. Biên dịch Glucose


Để thực hiện biên dịch Glucose trên Ubuntu, ta thực hiện các bước dưới đây:

- Tạo thư mục Glucose:mkdir Glucose

- Download Glucose 2.0:

 wget http://www.lri.fr/~simon/downloads/glucose-2-compet.tgz

- Gõ câu lệnh: tar -xf glucose-2-compet.tgz

- Mở thư mục simp: Gõ cd simp/

- Gõ make rs (Tạo được file chạy Glucose)

- Tạo thư mục Examples để lưu lại các benchmark: mkdir Examples

- Copy file glucose_static từ thư mục simp sang thư mục Examples: cp simp/glucose_static Examples/

- Gõ 2 câu lệnh sau để thực hiện chạy Glucose:

cd ~/Gluecose/examples/

./glucose_static

4.4.4. Bộ dữ liệu thực nghiệm (Benchmarks)


Bộ dữ liệu thực nghiệm SAT Solver là bộ các bài toán dưới định dạng DIMACS CNF (.CNF).

4.4.5. Thực nghiệm


Tiến hành thực nghiệm Minisat, Glueminisat, Glucose trên “Bộ dữ liệu Slitherlink” được tham khảo tại [25] và “Bộ dữ liệu thực nghiệm chuẩn Aprove09” được tham khảo tại [24].



Hình 4.2: Kết quả thực nghiệm trên Slithelink



Hình 4.3: Kết quả thực nghiệm thời gian chạy trên Aprove09
Nhận xét:

a. So sánh Mimisat với Glueminisat và Glucose

Thời gian giải quyết bài toán của Glueminisat và Glucose nhanh hơn nhiều so với Minisat (Bảng 4.2, Hình 4.3). Nguyên nhân là do cùng một bộ dữ liệu thực nghiệm nhưng số lượng các hàm Restart, Conflict, Decision, Propagations của Minisat nhiều hơn so với 2 SAT Solver kia (Bảng 4.1, Hình 4.2). Sự chênh lệch này là 3 SAT Solver sử dụng 3 chiến lược khởi động lại khác nhau.



b. So sánh Glueminisat với Glucose

Nhìn chung Glucose có thời gian thực hiện bài toán nhanh hơn so với Glueminisat. Tuy đều sử dụng chiến lược khởi động lại động (LBD) nhưng điều kiện khởi động lại của 2 SAT Solver này khác nhau. Đây là nguyên nhân dẫn đến số lượng hàm Restart của Glucose ít hơn Glueminisat.


KẾT LUẬN


Luận văn đã giới thiệu, trình bày và phân tích cụ thể các kỹ thuật SAT Solving phổ biến thông qua các ví dụ minh họa. Với sự nỗ lực của bản thân cùng với sự hướng dẫn của TS. Tô Văn Khánh, luận văn đã đạt được những kết quả nhất định :

  • Hiểu được Bài toán SAT, SAT Solver, Các ứng dụng của SAT Solver.

  • Nắm được cơ bản các kỹ thuật cơ bản SAT Solving: thủ tục DPLL, thuật toán CDCL, Kỹ thuật Two- watched literal và giải pháp loại bỏ biến, loại bỏ mệnh đề.

  • Nắm được cơ bản các kỹ thuật tiên tiến SAT Solving: Glueminisat, Glucose.

  • Đọc hiểu code chương trình MiniSAT.

  • Chạy và so sánh được các SAT Solver : Minisat, Glueminisat, Glucose.

Tuy nhiên, luận văn có những hạn chế sau:

  • Chưa thực hiện được việc code và chỉnh sửa chương trình MiniSAT để thực sự nắm rõ cách tùy biến một SAT solver.

  • Chưa liệt kê được các kỹ thuật trong các SAT Solver mới hiện nay như : CryptoMinisat (2015), Riss, Treengeling (2016).

Mặc dù vậy luận văn cũng đã hệ thống lại các kỹ thuật cơ bản của SAT Solving và trình bày các kỹ thuật tiên tiến của SAT Solving trong 2 SAT Solver được coi là mạnh nhất hiện nay.

TÀI LIỆU THAM KHẢO


[1] Armin, Biere (2012), Understanding Modern SAT Solvers, Institute for Formal Models and Verification Johannes Kepler University, Linz, Austria.

[2] Armin Biere and Andreas Frohlich(2015), Evaluating CDCL Restart Schemes.

[3] Daniel Kroening, Ofer Strichman (2008), Decision Procedures for Propositional Logic, Springer Berlin Heidelberg, Germany  pp. 25-57.

[4] Gander(2006), M. : Hitori solver Bachelor,

http://homepage. uibk. ac.at/~csae1761/hitori/website/res/MGCH. pdf.

[5] Gilles Audemard and Laurent Simon (2009), Predicting learnt clauses quality in modern SAT solvers. In Proceedingsof IJCAI-2009, pages 399–404.

[6] Gilles Audemard – Laurent Simon (2012), GLUCOSE 2.1,

[7] Glueminisat, http://glueminisat.nabelab.org/

[8] Glucose http://www.labri.fr/perso/lsimon/glucose/

[9] Hidetomo NABESHIMA, Koji IWANUMA, Katsumi INOUE, Glueminisat2.2.5.

[10] Hitori puzzle, http://nikoli. com/en/puzzle/hitori.

[11] Jakob Nordström(2011), Current Research in Proof Complexity: Problem Set 5.

http://www.csc.kth.se/~jakobn/teaching/proofcplx11/

[12] Joao Marques-Silva, Ines Lynce and Sharad Malik (2009), Handbook of Satisfiability, IOS Press, pp.131-153.

[13] JP Marques-Silva, Karem A. Sakallah (1999), GRASP: A Search Algorithm for Propositional Satisfiability, IEEE Trans. Computers, pp.506-521.

[14] Lynce, I., Ouaknine, J, : Sudoku as a sat problem(2006), In: In Proc. of the Ninth

International Symposium on Artificial Intelligence and Mathematics, Springer.

[15] Nina Narodyska(2011), Introduction to Satisfiability Solving,

Based on slides by Fahiem Bacchus, Niklas Een, Marijen Heule, Lintao Zhang, Toby Walsh.

[16] Matthew W. Moskewicz , Conor F. Madigan , Ying Zhao , Lintao Zhang , Sharad Malik (2001), Chaff: Engineering an Efficient SAT Solver, Proceedings of the 38th annual Design Automation Conference, pp.530-535

[17] Marcelo Finger (n.d.), SAT Solvers A Brief Introduction, Instituto de Matemática e Estatística Universidade de São Paulo

[18] Michael Genesereth (), Introduction to logic, Stanford University,chapter two,

[19] Minisat, http://minisat.se/

[20] Niklas Een and Armin Biere (2005), Effective preprocessing in SAT through variable and clause elimination, Proceedings of the 8th international conference on Theory and Applications of Satisfiability Testing, pp.61 -75.

[21] Pfeiffer, U., Karnagel, T., Scheffler, G. (2013), A sudoku-solver for large puzzles using sat. In Voronkov, A., Sutcliffe, G., Baaz, M., Fermüller, C., eds.: LPAR-17-short. Volume 13 of EPiC Series., EasyChair pp.52 - 57.

[22] RJ Bayardo Jr, RC Schrag, Using CSP look-back techniques to solve real world SAT instances (1997), Proc. AAAI, pp. 203–208,

[23] Robert Nieuwenhuis, Albert Oliveras and Cesare Tinelli (n.d.), Solving SAT and Modulo Theories: from an Abstract Davis-Putnam-Logemann-Loveland Procedure to DPLL(T) Technical University of Catalonia, Barcelona And The University of Iowa, Iowa City.

[24] SAT Benchmark Aprove09, http://www.cril.univ-artois.fr/SAT09/bench/appli.7z

[25] SAT Benchmark Slithelink,

http://www.mediafire.com/file/7h29i4oevf6i0lv/Input+Slithelink.rar

[26] Sorensson, Niklas Eén and Niklas Sörensson (n.d.), An extensible SAT solver, Chalmers University of Technology, Sweden.



[27] The international SAT Competitions web page, http://www.satcompetition.org/


Поделитесь с Вашими друзьями:


Cơ sở dữ liệu được bảo vệ bởi bản quyền ©tieuluan.info 2019
được sử dụng cho việc quản lý

    Quê hương