Hỗ trợ cấu trúc dữ liệu cho tìm kiếm địa phương SAT


20

WalkSAT và GSAT là các thuật toán tìm kiếm cục bộ nổi tiếng và đơn giản để giải quyết vấn đề thỏa mãn Boolean. Mã giả cho thuật toán GSAT được sao chép từ câu hỏi Thực hiện thuật toán GSAT - Làm thế nào để chọn nghĩa đen nào để lật? và trình bày dưới đây.

procedure GSAT(A,Max_Tries,Max_Flips)
  A: is a CNF formula
  for i:=1 to Max_Tries do
    S <- instantiation of variables
    for j:=1 to Max_Iter do
      if A satisfiable by S then
        return S
      endif
      V <- the variable whose flip yield the most important raise in the number of satisfied clauses;
      S <- S with V flipped;
    endfor
  endfor
  return the best instantiation found
end GSAT

Ở đây chúng ta lật biến tối đa hóa số mệnh đề thỏa mãn. Làm thế nào được thực hiện hiệu quả? Phương pháp ngây thơ là lật mọi biến số, và cho mỗi bước qua tất cả các mệnh đề và tính toán có bao nhiêu trong số chúng được thỏa mãn. Ngay cả khi một mệnh đề có thể được truy vấn để thỏa mãn trong thời gian không đổi, phương thức ngây thơ vẫn sẽ chạy trong thời gian , trong đó là số lượng biến và số mệnh đề. Tôi chắc rằng chúng ta có thể làm tốt hơn, do đó câu hỏi:V CO(VC)VC

Nhiều thuật toán tìm kiếm cục bộ lật bài tập biến số tối đa hóa số mệnh đề thỏa mãn. Trong thực tế, với cấu trúc dữ liệu nào hoạt động này được hỗ trợ hiệu quả?

Đây là một cái gì đó tôi cảm thấy như sách giáo khoa thường bỏ qua. Một ví dụ thậm chí là cuốn sách nổi tiếng của Russell & Norvig .


Vâng, những kẻ này xây dựng nó trong phần cứng. Rõ ràng , phương pháp xác suất và heuristic là phổ biến hơn; điều đó sẽ gợi ý rằng bạn thực sự không thể chọn biến "tốt nhất" (rốt cuộc chỉ là tham lam), hoặc nói chung là lựa chọn này không tốt.
Raphael

@Raphael Có thể bạn nói đúng rằng người ta không thể chọn nó rất nhanh, nhưng tôi không dám nói "sự lựa chọn nói chung là không tốt". Có thể tôi đã hiểu nhầm quan điểm của bạn, nhưng tôi khá chắc chắn rằng việc chọn biến "đúng" có tác động rất lớn. Cảm ơn, tôi sẽ đào sâu hơn một chút. Tôi nghĩ rằng một trong những tác giả của các slide mà bạn liên kết (Hoos) có một cuốn sách về chủ đề này.
Juho

Cái "đúng" sẽ là tối ưu, nhưng có lý do để tin rằng cái tối đa hóa bây giờ là cái đúng không? Rốt cuộc, vấn đề không thể giải quyết được bằng (chính tắc) tham lam.
Raphael

Câu trả lời:


9

Cấu trúc dữ liệu cần thiết là một danh sách xảy ra , một danh sách cho mỗi biến chứa các mệnh đề mà biến xảy ra. Các danh sách này được xây dựng một lần, khi CNF được đọc lần đầu tiên. Chúng được sử dụng trong các bước 3 và 5 dưới đây để tránh quét toàn bộ công thức CNF để đếm các mệnh đề thỏa mãn.

Một thuật toán tốt hơn so với lật mọi biến là:

  1. Lập danh sách chỉ các biến xảy ra trong các mệnh đề không thỏa mãn.
  2. x
  3. x
  4. x
  5. x
  6. x
  7. x
  8. Lặp lại các bước 2-7 cho phần còn lại của các biến được tìm thấy trong bước 1.
  9. Lật biến với số cao nhất được ghi trong bước 7.

Một tham chiếu cho cấu trúc dữ liệu (thường được gọi là danh sách kề), ví dụ Lynce và Marques-Silva, Cấu trúc dữ liệu hiệu quả cho các bộ giải SAT Backtracking, 2004.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.