Chuyển đổi các vấn đề (toán học) sang các trường hợp SAT


22

Những gì tôi muốn làm là biến một bài toán tôi có thành bài toán thỏa mãn boolean (SAT) và sau đó giải nó bằng SAT Solver. Tôi tự hỏi nếu ai đó biết một hướng dẫn, hướng dẫn hoặc bất cứ điều gì sẽ giúp tôi chuyển đổi vấn đề của tôi sang một ví dụ SAT.

Ngoài ra, tôi muốn giải quyết điều này trong một thời gian tốt hơn theo cấp số nhân. Tôi hy vọng một SAT Solver sẽ giúp tôi.


1
SAT không có phương pháp hiệu quả ... nhưng hãy xem các slide
Fayez Abdlrazaq Dotta


Chỉ là một giải pháp nhanh chóng và bẩn thỉu trước khi bạn thử bất cứ điều gì khác, trong trường hợp bạn chỉ muốn thử nghiệm một cái gì đó: tiền điện tử . Công cụ nói rằng nó được tập trung cho tiền điện tử, nhưng nó sẽ thực hiện thủ thuật. Hơn nữa, cú pháp của ngôn ngữ mà bạn sẽ sử dụng rất giống c nên bạn sẽ không gặp nhiều vấn đề. Việc cài đặt không khó nhưng bộ tứ rất lớn nên hãy lấy một tách cà phê.
absinthe_minded

1
Xem thêm câu hỏi liên quan cs.stackexchange.com/q/30790
András Salamon

Câu trả lời:


20

Chương 2 của Cẩm nang SAT (của Steven Prestwich) bao gồm cách biến các vấn đề quyết định rời rạc thành CNF, ở một số chiều sâu. (Thật không may, tôi không nghĩ rằng có một dự thảo phiên bản trực tuyến - có lẽ tốt nhất để tham khảo thư viện địa phương của bạn.) Một số tài liệu tham khảo khác được trích dẫn trong kỳ quặc tổng quan Magnus Björk của thành công kỹ thuật SAT Encoding cũng rất hữu ích.

Nếu các vấn đề của bạn là liên tục, hoặc bạn đặc biệt quan tâm đến các hệ thống bất bình đẳng, thì các loại người giải quyết khác có nhiều khả năng sẽ hữu ích. Như Kyle chỉ ra, các bộ giải SMT (như Z3 , Yices hoặc OpenSMT ) có thể hữu ích, mặc dù các lý thuyết theo truyền thống của SMT có xu hướng tập trung vào xác minh phần mềm máy tính, do đó, các bộ giải SMT thường hỗ trợ rất nhiều cho những thứ như biểu thức liên quan đến các số nguyên , nhưng có thể thực hiện kém trên các hạn chế tiêm. Đối với các vấn đề được thể hiện một cách tự nhiên như các hệ thống bất bình đẳng, CPLEX là một trong những vấn đề cần đánh bại (nó đã từng có sẵn để sử dụng học tập miễn phí, và nó vẫn có thể xảy ra). Đối với một số vấn đề quyết định kết hợp (như tìm kiếmđóng gói các hình chữ nhật thành một hình vuông ), các bộ giải ràng buộc như Minion vượt trội hơn các bộ giải SAT và thường dễ sử dụng hơn.


13

Trừ khi bạn dịch các vấn đề toán học sang các trường hợp SAT như một bài tập học tập, thời gian của bạn sẽ được dành nhiều hơn để học về các lý thuyết modulo thỏa đáng . SMT sẽ cho phép bạn thể hiện các phương trình và các ràng buộc khác một cách tự nhiên hơn nhiều so với các trường hợp Boolean SAT. Một số bộ giải SMT hỗ trợ các bộ định lượng phổ biến và phổ biến, cho phép bạn vượt ra ngoài các vấn đề NP và thể hiện PSPACE.

Bên cạnh đó là biểu cảm hơn, người giải quyết SMT là nhanh hơn. Không phải P = NP nhanh hơn, nhưng hiệu quả hơn ở chỗ một bộ giải SMT tốt không loại bỏ thông tin cấu trúc cụ thể theo lý thuyết giúp hướng dẫn người giải qua không gian tìm kiếm. Thực hiện giảm Karp trực tiếp cho một trường hợp SAT buộc người giải SAT phải học lại tất cả cấu trúc đó, thường với chi phí theo cấp số nhân. Ví dụ, thực tế là bổ sung là giao hoán bị mất trên cả bộ giải SAT dựa trên tìm kiếm dựa trên DPLL và tìm kiếm cục bộ; người giải quyết không biết rằng nó đang xử lý các con số! Để tránh thử tất cả các hoán vị của x + y + z = 10, bộ giải SAT cần mã phá vỡ đối xứng, yêu cầu phát hiện tự động hóa đồ thị. Các thuật toán nhận dạng tự động hóa đồ thị tốt nhất hiện nay đòi hỏi thời gian theo cấp số nhân với số đỉnh trong trường hợp xấu nhất,


2
Bạn có đề nghị bất kỳ người giải quyết smt cụ thể?
Dchris

5

Hai công cụ chuyển đổi ngôn ngữ cấp cao sang SMT hoặc CNF.

CVC Cú pháp gần với CAS.

CBMC Nó chuyển đổi một chương trình C sang CNF, cho phép xác nhận. Các xác nhận luôn luôn đúng hoặc nếu sai, một đầu vào mẫu phản ứng được tìm thấy. CBMC không kiểm soát các vòng lặp, vì vậy các chương trình C nhất định có CNF / SMT theo cấp số nhân.


Có vẻ như CBMC không chuyển đổi chương trình C tùy ý thành CNF; nó tạo ra một CNF dựa trên chương trình C thực hiện phân tích tĩnh cho tràn số nguyên, tràn bộ đệm và tương tự.
vy32
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.