Một số bài toán có thể được giải bằng việc đưa về bài toán SAT, biểu diễn vấn đềbằng các công thức logic mệnh đề và áp dụng SAT Solver vào giải các công thức logicmệnh đề đó, cách tiếp c
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ - ĐHQGHN
KHOA CÔNG NGHỆ THÔNG TIN
CÔNG TRÌNH DỰ THIGIẢI THƯỞNG “SINH VIÊN NGHIÊN CỨU KHOA HỌC”
Nguyễn Thị Mai Hương Nữ Lớp: K58CA
Khoa: Công nghệ thông tin
Người hướng dẫn: TS Tô Văn Khánh
Trang 2MỞ ĐẦU
Bài toán SAT (Satisfiability) là bài toán chứng minh tính thỏa mãn hay không thỏa mãn(SAT/UNSAT) của một công thức logic mệnh đề Các công cụ chứng minh tự động chobài toán này được gọi là SAT Solver, chúng có nhiều ứng dụng trong trí tuệ nhân tạo haytrong các bài toán kiểm chứng, kiểm thử phần mềm Các SAT Solver đóng vai trò nhưcác công cụ nền (backend engine) cho các SMT (SAT Modulo Theories) Solver, là cáccông cụ chứng minh tính thỏa mãn của các công thức logic xây dựng trên lý thuyết logic
vị từ cấp I (First Order Logic - FOL)
Một số bài toán có thể được giải bằng việc đưa về bài toán SAT, biểu diễn vấn đềbằng các công thức logic mệnh đề và áp dụng SAT Solver vào giải các công thức logicmệnh đề đó, cách tiếp cận đó được gọi là SAT Encoding
Trong báo cáo này chúng tôi trình bày các thuật toán giải Hitori bằng các giải thuậttìm kiếm kết hợp quay lui và SAT Encoding Cũng trong báo cáo chúng tôi đề xuất mộtphương pháp SAT Encoding mới để giải trò chơi Lôgic Hitori, được đặt tên là
Connectivity Encoding Chúng tôi đã tiến hành thực nghiệm trên 120 bài toán dữ liệu đầu vào để đánh giá tính hiệu quả của phương pháp Connectivity Encoding so với các phương pháp đã đề xuất trước đấy Connectivity Encoding cho kết quả vượt trội so với phương pháp Chains & Cycles Encoding (một phương pháp SAT Encoding được đề xuất
trước đó) và kết quả cạnh tranh so với 2 giải thuật tìm kiếm kết hợp quay lui
Trang 3DANH MỤC CÁC THUẬT NGỮ VIẾT TẮT.
Thuật ngữ Tên đầy đủ
Trang 4MỤC LỤC
Trang 5…… 28DANH MỤC CÁC HÌNH ẢNH
Trang 6DANH MỤC BẢNG BIỂU VÀ BIỂU ĐỒ
Trang 7I. GIỚI THIỆU
I.1 Trò chơi logic Hitori
Hitori [ 4 ] (Hitori ni shite kure; nghĩa là "hãy để tôi một mình") là một trò chơi logic từ
Nhật Bản, được chơi trên một ma trận với kích thước n x n với và cho trước các số từ 1 đến n Người chơi lần lượt phải bôi đen các ô số sao cho chúng thỏa mãn các luật của trò
chơi Nó lần đầu tiên xuất hiện trên Nikoli [ 4 ](tháng 3 năm 1990)
Hình 1.1: Ví dụ về câu đố Hitori
I.2 Luật chơi của Hitori
Luật chơi của Hitori bao gồm 3 luật về bôi đen các ô trên hàng, trên cột được trình bàydưới đây:
• Luật 1: Giá trị của số trong mỗi ô không được xuất hiện nhiều hơn một lần ở mỗi
Trang 8Hình 1.5: Ví dụ về vi phạm luật 3
Trên cùng một hàng hoặc cột, các số xuất hiện nhiều hơn một lần sẽ phải bôi đen (xóa
ô đó đi) để thỏa mãn luật 1 Hình 1.2 thể hiện cho ta thấy luật 1 của Hitori, trên cột thứ
nhất giá trị 2, 1 không thể xuất hiện nhiều hơn một lần, bởi vậy một trong hai ô có giá trị
2, 1 trên cột 1 đã được xóa đi (bôi đen)
• Luật 2: Các ô được bôi đen không được nằm liền kề nhau trên hàng hoặc cột
Nếu ô có vị trí (i, j) (hàng i, cột j) được bôi đen thì 4 ô tại các vị trí liền kề của nó là (i+1,j), (i, j+1), (i-1, j), (i, j-1) sẽ không được bôi đen.
Như ta thấy trên hình 1.3 Tại hàng 3, hai ô có giá trị 1 cạnh nhau đều được bôi đen,điều này đã vi phạm luật 2 của Hitori Hình 1.4 trình bày cách giải đúng với đầu vàotương tự hình 3
• Luật 3: Mọi ô không bôi đen (ô trắng) phải kết nối được với nhau Nói cách khác
luôn tồn tại một đường đi từ mọi ô trắng đến các ô trắng còn lại
Trang 9Hình 1.7: Đầu vào Hitori Hình 1.8: Lời giải hoàn chỉnh Hitori
Ở hình 1.5 hai ô có giá trị 5 được bôi đen đã tạo thành một đường ngăn cách ô trắng
có giá trị 3 trong góc với các ô trắng khác (vi phạm luật 3 của Hitori) Hình 1.6 là cáchgiải đúng luật 3
Trên đây là ba luật cơ bản của Hitori, với các luật trên, ta có thể đưa ra lời giải chínhxác, đầy đủ ba luật Hitori như hình 1.8 với đầu vào là ma trận 1.7
Lưu ý: Với một ma trận đầu vào Hitori có thể có nhiều hơn một đáp án lời giải.
Phương pháp SAT Encoding có thể tìm ra tất cả các lời giải của Hitori
Trang 10II. CÁC GIẢI THUẬT TÌM KIẾM ĐỂ GIẢI QUYẾT HITORI
Giải thuật tìm kiếm và quay lui là phương pháp được sử dụng phổ biện trong việc giảiquyết trò chơi Lôgic Hitori Đặc điểm chung của các phương pháp này là: cho một ôđược tô đen, sau đó tìm kiếm xung quanh ô đó những ô khác có khả năng được tô đen đểđảm bảo rằng chúng không vi phạm các quy tắc của trò chơi, nếu vi phạm, giải thuật sẽquay lại tìm kiếm các ô khác có khả năng được tô đen Phần này trình bày 2 giải thuậtdựa trên tìm kiếm và kết hợp quay lui
II.1 Thuật toán tìm kiếm thứ nhất.
Thuật toán tìm kiếm thứ nhất được trình bày trong [ 2 ] với tư tưởng dựa trên một số mẫu
(pattern) cho trước, để quyết định ô nào bắt buộc phải tô đen, ô nào phải để trắng và sau
đó thực hiện tìm kiếm tìm kiếm quay lui xem trên danh sách các ô có khả năng được tôđen Thuật toán bao gồm 4 bước như sau:
• Bước 1: Xây dựng các mẫu là các phần được quy định sẵn về các ô cần tô khi các
ô sắp xếp theo như mẫu đã quy định Dưới đây là một số mẫu áp dụng cho thuậttoán
Hình 2.1: Một số mẫu điển hình
Khi các giá trị trong các ô xuất hiện theo một số trường hợp như hình trên thì có
sự quy định rõ về ô cần phải tô đen (ô màu đen) và những ô không được phép tôđen (những ô màu hồng), những ô còn lại là những ô có khả năng tô đen hoặckhông
• Bước 2: Khi các mẫu không đủ để giải quyết Hitori thì phải đến phần thứ hai của
thuật toán, đó là xây dựng một hàm chuẩn StandardCyclePattern Hàm này giống
như một mẫu nhưng phức tạp hơn Đầu tiên cho một ô được tô đen nếu chúng là ô
bội số (ô được đánh dấu là bội nếu nó xuất hiện nhiều hơn 1 lần trên hàng hoặc
cột), vì ô đó được tô đen nên quy định 4 ô bên cạnh nó là ô không được tô (ô
trắng), mục đích để đảm bảo luật 2 của Hitori Dựa vào những ô không được tô đó,
Trang 11nếu chúng là bội thì xét theo hàng và cột để tô màu những ô bội còn lại và tiếp tụcxét những ô vừa tô đen Việc xét tô đen hay không vẫn phải đảm bảo luật 3 củaHitori.
• Bước 3: Nếu như việc sử dụng hàm StandardCyclePattern vẫn chưa giải quyết
hoàn toàn được Hitori, thì phải tới phần tiếp theo là sử dụng một Véc-tơ để lưu các
giá trị ô số nào là bội số, sau đó các phần tử của ô lần lượt được áp dụng hàm
StandardCyclePattern để xác định ô được tô màu
• Bước 4: Phần cuối cùng của giải thuật này là phần quay lui tìm kiếm Nếu như
bước 3 vẫn chưa thể giải được bài toán thì giải thuật quay lui sẽ được sử dụng Nó
sẽ tô đen một ô chưa xác định và từ đó xác định những ô còn lại Nếu mà nó dẫnđến một trạng thái không phù hợp thì ô được tô đen đó phải là ô màu trắng Vàquay lui đến khi nào giải được ma trận Hitori
II.2 Thuật toán tìm kiếm thứ hai
Thuật toán tìm kiếm thứ hai [ 12 ] có tư tưởng khá giống với thuật toán tìm kiếm thứnhất, nhưng khác ở các mẫu mà nó áp dụng Cụ thể bao gồm 4 bước như sau:
• Bước 1: Thực hiện tìm kiếm các mẫu cơ bản, các trường hợp tìm ra các ô chắc
chắn bị xóa đi hay giữ lại
Hình 2.2: Một số mẫu cơ bản
Với các mẫu trên:
o Mẫu thứ nhất: Nếu M=N thì Q phải được để trắng (không được tô đen).
o Mẫu thứ hai: Nếu A=B và A, B nằm cạnh nhau thì các số giống với A, B khác phải
bị xóa (C, D bị tô đen)
o Mẫu thứ ba: Nếu có một số nằm giữa hai số bằng nhau thì số đó phải được để trắng.
o Mẫu thứ tư: Nếu M=N=Q và chúng có vị trí như hình, thì Q phải bị tô đen
• Bước 2: Khi các mẫu ở bước 1 không đủ để giải quyết Hitori thì sang bước hai,
thuật toán đưa ra một số các mẫu phức tạp hơn
Hình 2.3: Các mẫu nâng cao
Trang 12Cụ thể áp dụng như sau:
- Nếu một số là duy nhất trong cả hàng và cột thì nó phải được để trắng.
- Nếu một ô đã bị bôi đen thì các ô liền kề cạnh với nó phải được để trắng (để đảm bảo luật 2).
- Nếu một ô nằm kề cạnh với ba ô đã bị xóa thì nó và ô kề cạnh còn lại phải để trắng
- Nếu trong hàng hoặc cột đã có một ô được xác định là để trắng thì những ô khác bằng nó trong hàng hoặc cột phải bị tô đen
• Bước 3: Trong những ô còn lại, thực hiện đệ quy Ở mỗi lần đệ quy, ta giả sử một
ô chưa xác định trạng thái là được giữ lại, sau đó sử dụng các mẫu nâng cao để suy
ra trạng thái của các ô khác, kiểm tra xem trạng thái được suy ra có vi phạm điềukiện về liên thông và liền kề hay không, nếu có ta quay lui và đánh dấu lại trạngthái của ô vừa được giả sử được giữ lại là bị xóa đi, nếu không ta tiếp tục với ôtiếp theo Cứ như thế cho đến khi tất cả các ô đều được xác định trạng thái
Nhận xét: Hai phương pháp trên có tư tưởng tìm kiếm khá giống nhau, chúng đều tập
trung vào việc xác định các ô tô màu hay không dựa vào các mẫu cho trước, sau đó thựchiện quay lui tìm kiếm Tuy nhiên điểm khác biệt ở đây là các mẫu của thuật toán tìmkiếm thứ hai đã bao hàm các mẫu của thuật toán tìm kiếm thứ nhất Các mẫu của thuậttoán tìm kiếm thứ hai mang tính tổng quát và áp dụng cho nhiều mẫu nhỏ hơn
Trang 13III. PHƯƠNG PHÁP SAT ENCODING
Phần trên báo cáo trình bày 2 giải thuật tìm kiếm dựa trên việc tìm kiếm theo mẫu và thựchiện quay lui Trong phần này, chúng tôi sẽ trình bày một hướng tiếp cận khác giải quyết
trò chơi Lôgic Hitori - phương pháp SAT Encoding SAT Encoding là phương pháp mã
hóa các luật chơi Hitori thành các công thức Lôgic mệnh đề (propositional logic) biểu
diễn dưới dạng CNF
Trong phần này chúng tôi trình 2 phương pháp SAT Encoding khác nhau để giải Hitori:
• Phương pháp SAT Encoding có tên gọi là Chains & Cycles [ 2 ]được đề xuất vàonăm 2006
• Phương pháp SAT Encoding do nhóm nghiên cứu đề xuất - Phương pháp
Connectivity Encoding.
III.1 Các khái niệm cơ bản về SAT Encoding
a) Bài toán SAT
Bài toán SAT (satisfiability problem) [ 6 ] 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 (satisfiability hay unsatisfiability) của một công thức logic mệnh
đề (giá trị của biến logic là true hoặcfalse) Đây là bài toán đầu tiên được chứng minh là thuộc lớp NP - đầy đủ (NP-Complete).
Đầu vào của bài toán SAT là một công thức logic mệnh đề thường được biểu diễndưới dạng chuẩn tắc hội (CNF - Conjunctive Normal Form – hội của các tuyển sơ cấp)
CNF = TSC1 ∧ TSC2 ∧ TSC3 ∧ …
Ví dụ 3.1: Cho một công thức logic mệnh đề CNF như sau:
F = (P ∨ Q ∨ R) ∧ (¬P ∨ Q ∨ R) Trong đó P, Q, R là các biến logic mệnh đề (nhận giá trị true hoặc false), (P ∨ Q ∨ R) và (¬P ∨ Q ∨ R) là các tuyển sơ cấp hay còn gọi là các mệnh đề.
Trong ví dụ 3.1, công thức F là SAT (F = true) vì với bộ giá trị P = true, Q = false và R
= true thì F cho kết quả true
Trang 14b) SAT Solver
Một công cụ có thể chứng minh một cách tự động công thức logic mệnh đề là SAT hayUNSAT được gọi là SAT Solver Có rất nhiều công cụ giải SAT được biết tới như SATlive [ 10] , SAT4j [ 9 ] ,UBCSAT [ 11 ] Ngày nay sức mạnh của SAT Solver đã có nhữngbước tiến đáng kể ứng dụng đáng kể trong thực tế, khả năng giải quyết các công thức đồ
sộ với hàng trăm nghìn mệnh đề, hàng triệu biến
MiniSat [ 1 ]là một dạng mã nguồn mở cho phép các nhà nghiên cứu xây dựng và pháttriển mở rộng các SAT solver dựa trên nó MiniSat là một SAT Solver mạnh và đã giànhnhiều giải thưởng của các cuộc thi SAT 2005 [ 1 ] MiniSat dễ dàng chỉnh sửa và đượcthiết kế tốt
Yêu cầu đầu vào của MiniSat biểu diễn dưới định dạng DIMACS CNF
Trang 15Game Sudoku là một game điển hình trong việc áp dụng SAT Encoding để giải, ta mãhóa mỗi ô trên ma trận Sudoku: xijk biểu diễn ràng buộc cho một ô trên hàng i cột j và cógiá trị là k Các luật chơi của Sudoku sẽ được mã hóa thành các mệnh đề CNF sau:
• Mỗi ô nhận ít nhất một giá trị từ 1->N
Công thức mệnh đề CNF:
xij1 xij2 xij3xijN
• Mỗi giá trị xuất hiện ít nhất một lần trong hàng hoặc cột
Công thức mệnh đề CNF:
( xi1k xi2k xi3kxiNk) …
• Mỗi giá trị xuất hiện ít nhất một lần trong hộp *
Công thức mệnh đề CNF :
( x11k x12k …… x33k)……
Với cách mã hóa như trên, Sudoku sẽ được giải bằng cách sinh các mệnh đề và đưa vào SAT Solver giải quyết
d) Sơ đồ giải SAT
Với việc áp dụng SAT Encoding và sử dụng công cụ MiniSAT trên, chúng tôi tiến hànhgiải quyết bài theo sơ đồ dưới đây
Sơ đồ 3.2 gồm các thành phần:
Hình 3.2: Sơ đồ giải SAT
Trang 16• Dữ liệu vào: Là bài toán cần giải, ví dụ đầu vào là một ma trận Sudoku hay Hitori
thì nó gồm giá trị các số ở mỗi ô của ma trận
• Bộ mã hóa: Mã hóa các luật chơi của dữ liệu vào thành các mệnh đề CNF
(conjunctive normal form) theo chuẩn DIMACS để đưa vào SAT solver Khi mã
hóa sẽ sinh ra file input rồi đưa tới SAT Solver
• SAT Solver: Là công cụ sẽ giải các mệnh đề trong file input rồi sinh ra file output
là kết quả giải SAT Ở đây chúng tôi sử dụng Minisat 1.4 để giải quyết
• Bộ giải mã: Dịch kết quả trong file output trả về từ SAT Solver, đưa ra lời giải
đọc được cho bài toán đầu vào
• Kết quả: Là đáp án cho dữ liệu vào, nếu đầu vào là một ma trận Sudoku thì kết
quả là đáp án của ma trận sudoku đó
III.2 SAT Encoding giải Hitori.
Trong phần này chúng tôi trình bày hai phương pháp SAT Encoding để giải quyết bài
toán Hitori: Chains & Cycles và Connectivity Hai phương pháp đều có cách mã hóa luật
1 và luật 2 như nhau, luật 3 là luật phức tạp và khó nhất của bài toán Hitori giải bằng
SAT Encoding
III.2.1 SAT Encoding cho hai luật đầu của Hitori
Hai loại biến Lôgic mệnh đề (biến boolean) được sử dụng để mã hóa (Encoding) cho luật
1 và luật 2 như sau:
• Biểu diễn ràng buộc về số x ijk: giá trị của biến này là true khi ô ở vị trí hàng i cột j
có giá trị là k Thí dụ x123 = true có nghĩa là ô ở hàng 1, cột 2 có giá trị là 3
• Biểu diễn cho ô được tô đen b ij: kí hiệu này được hiểu rằng ô trên hàng i cột j là ô được bôi đen (được xóa đi để thỏa mãn các ràng buộc của 3 luật trong Hitori).
Luật 1 và 2 của Hitori lần lượt được mã hóa như sau:
a) Mã hóa cho luật 1 của Hitori
Luật 1 nói rằng "Giá trị của số trong mỗi ô không được xuất hiện nhiều hơn một lần ở mỗi hàng, mỗi cột"
Khi xác định được hai hay nhiều ô trên cùng một hàng hoặc cột có giá trị giống nhau,
ta phải mã hóa để giữ lại một ô duy trắng duy nhất và các ô trùng giá trị còn lại phải bị tô
đen (xóa đi) Mệnh đề Lôgic được biểu diễn như sau:
x ijk x ij’k → ¬b ij ˅ ¬b ij’ ≡ ¬x ijk ˅ ¬x ij’k ˅ ¬b ij ˅ ¬b ij’
Trang 17Kí hiệu → biểu diễn cho phép toán suy ra (implication) và ≡ biểu diễn cho phép toán
tương đương trong Lôgic mệnh đề.
Mệnh đề trên được hiểu rằng trên cùng hàng i, nếu cột j và j’ đều có giá trị như nhau
là k thì phải tô đen một trong 2 ô đó hoặc cả 2 Mệnh đề tượng tự được áp dụng cho các ô
có giá trị như nhau trên cùng một cột
b) Mã hóa cho luật 2 của Hitori
Luật 2 nói rằng " Các ô được bôi đen không được nằm liền kề nhau" tức là một ô khi
bị tô đen thì các ô liền kề với nó (có chung cạnh với nó) sẽ không được bôi đen
Mệnh đề Lôgic được biểu diễn cho luật 2 như sau:
b ij →¬ ( b ij+1 b ij-1 b i+1j b i-1j ) ≡ ( ¬b ij ˅ ¬b ij+1 ) ( ¬b ij ˅ ¬b ij-1 ) ( ¬b ij ˅ ¬b i+1j ) ( ¬b ij ˅ ¬b i-1j )
Như vậy việc mã hóa cho hai luật đầu tiên khá đơn giản, số lượng mệnh đề sinh racho hai luật trên là không nhiều Vấn đề khó khăn nhất trong việc SAT Encoding cho
Hitori nằm ở luật 3 Phần tiếp theo trình bày 2 phương pháp SAT Encoding cho Hitori đó
là phương pháp Chains & Cycles Encoding và Connectivity Encoding
III.2.2 Chains & Cycles Encoding Phương pháp Chains & Cycles [ 2 ] là một phương pháp SAT Encoding giải quyết tròchơi Hitori được đề xuất năm 2006 Phương pháp này tập trung vào việc tìm ra tất cả các
Chains và Cycles trong một ma trận Hitori và từ đó sẽ sinh các công thức Lôgic (dưới dạng lôgic mệnh đề - các tuyển sơ cấp) để loại bỏ các Chains và Cycles này Tuy nhiên
số lượng Chains và Cycles sẽ là rất lớn khi mà kích thước của ma trận được tăng lên, đây
là một hạn chế của phương pháp SAT Encoding này Dưới đây chúng tôi trình bày các
khái niệm Chains, Cycles và các công thức Lôgic mệnh đề để loại bỏ Chains và Cycles
a) SAT Encoding loại bỏ Chains
• Một Chain là chuỗi các ô đen được kết nối chéo với nhau trong đó ô đầu tiên và ô
kết thúc đều là các ô thuộc biên
Trong hình 3.3, ô (i, j) có kết nối chéo đến 4 ô lần lượt là (i-1, j-1) (i+1, j-1), (i-1, j+1) và (i+1, j+1).