Multicore SAT Solver

12

Saya mencoba memecahkan 25k klausa 5k variabel masalah SAT. Karena sudah berjalan selama satu jam (precosat) dan saya ingin menyelesaikan yang lebih besar setelah itu, saya mencari SAT-Solver multi-core.

Karena sepertinya ada banyak SAT-Solver, saya sangat tersesat.

Adakah yang bisa menunjukkan yang terbaik untuk kasus saya?

Saya juga akan senang jika seseorang bisa memberi saya perkiraan waktu (jika memungkinkan).

multsatsolv
sumber
1
Anda mencari program yang sudah jadi? Maka ini bukan situs terbaik untuk ditanyakan. Anda ingin belajar tentang pemecahan SAT? Selamat datang! Anda mengatakan telah mencari; apa yang kamu temukan Apa yang membingungkan Anda?
Raphael
Yah, saya melihat jumlah utas terkait SAT di beberapa forum StackExchange. Saya akhirnya terlalu memilih antara CS teoritis dan CS (dan pilih nanti). Di mana seharusnya saya meminta program nama-siap? Terima kasih.
multsatsolv

Jawaban:

8

Lihatlah hasil dari kompetisi SAT 2013 tahun ini . Berdasarkan hasil ini, pasti mencoba Lingeling . Plingeling adalah varian paralelnya.

Jika Anda tidak perlu membuktikan ketidakpuasan (mungkin Anda tahu contohnya memuaskan, dan Anda hanya perlu tahu tugas yang membuatnya SAT), Anda bisa mencoba metode pencarian lokal juga.

Juho
sumber
Terima kasih. Saya akan melihat (P) Lingeling. Juga, saya tidak tahu apakah itu memuaskan (meskipun lebih baik, kalau tidak saya terjebak).
multsatsolv
+1. Berdasarkan pengalaman kami, plingeling tentu saja yang harus Anda coba dulu (setidaknya jika Anda memiliki komputer tunggal dengan banyak inti dan banyak memori). Untuk kinerja yang lebih banyak lagi, cobalah untuk menemukan cluster komputasi dengan node sebanyak mungkin dan jalankan beberapa contoh lingeling (atau plingeling) dengan berbagai benih acak.
Jukka Suomela
4

Saya tidak yakin tentang keberadaan pemecah masalah multicore praktis, tetapi ada beberapa proyek dan makalah:

Saya juga menemukan poin menarik ini: Anda dapat menjalankan sat-solver reguler beberapa kali dengan seed berbeda pada masalah yang sama secara paralel, untuk mendapatkan efek multi-core.

Sunting: Memasukkan komentar saya pada ide vzn di sini:

Metode alternatif serupa adalah dengan hanya memilih variabel tunggal, mengatur nilainya menjadi true, mengirimkannya ke satu contoh solver. Tetapkan nilainya menjadi false, dan kirimkan ke pemecah contoh lain. Anda dapat melakukan ini untuk variabel , dan menjalankan proses secara bersamaan. Memilih variabel untuk diatur bisa sedikit rumit, yaitu. jika mereka secara langsung bergantung satu sama lain, maka tidak ada gunanya memilih satu dan kemudian yang lain. Langkah penyederhanaan mungkin diperlukan untuk melakukan pilihan-pilihan yang berurutan / rekursif.2 kk2k


(Saya juga akan senang jika seseorang bisa memberi saya perkiraan waktu (jika mungkin) untuk menyelesaikan masalah variabel X klausa Y SAT.)

Tidak ada yang bisa memberi Anda perkiraan waktu berdasarkan variabel , klausa, karena beberapa masalah SAT sangat sulit (baca: tidak akan terjadi) untuk dipecahkan, bahkan dengan relatif kecil ; sementara instans besar lainnya dapat diselesaikan dengan relatif cepat (dan untuk instans ini solver sat berguna).n m , nmnm,n

Realz Slaw
sumber
Terima kasih atas tautannya. Saya akan membaca beberapa di antaranya. Saya harap masalah saya tidak terlalu sulit untuk dipecahkan.
multsatsolv
@multatsolv tergantung pada masalahnya. Itu juga tergantung pada encoding. Pemecah SAT dapat menangani penyandian berbeda dari masalah yang sama secara berbeda. Dan pemecah SAT yang berbeda mungkin lebih baik pada satu pengkodean daripada yang lain; tidak ada ilmu pengetahuan mengenai hal ini (betul ada, tetapi tidak ada artinya mencoba memahami, dalam evolusi cepat para pemecah SAT): satu-satunya yang harus dilakukan adalah mencoba kombinasi berbeda dari pengkodean dan pemecah.
Realz Slaw
3

Sebenarnya ada cara yang sangat sederhana untuk mengubah solver SAT menjadi versi paralel karena SAT memalukan paralel dalam arti berikut.

2nn2n

vzn
sumber
nk
3
Pendekatan ini tampaknya tidak bekerja dengan baik dalam praktiknya. Untuk contoh positif, pendekatan berikut ini biasanya jauh lebih baik jika Anda memiliki banyak komputer: jalankan saja misalnya berlama-lama dengan contoh yang sama tetapi berbeda benih acak dan tunggu sampai salah satu pemecah menemukan solusi.
Jukka Suomela
n
1
@ vzn: Pendekatan yang Anda sarankan. Untuk melihat mengapa itu tidak bekerja dengan baik, cobalah dengan contoh dunia nyata dan bandingkan dengan apa yang saya sarankan. :) Pendekatan Anda akan sangat masuk akal jika Anda berurusan dengan algoritma pencarian backtracking yang naif, tetapi pemecah SAT modern jauh lebih dari pencarian backtracking yang naif.
Jukka Suomela
baik-baik saja tetapi dapatkah Anda menjelaskan dengan kata-kata apa masalahnya ? pendekatan Anda mungkin bekerja untuk contoh yang memuaskan ok tapi tidakkah akan mengambil waktu yang sama secara paralel untuk menemukan contoh yang tidak memuaskan tidak peduli berapa banyak contoh terpisah dijalankan? jika tidak, mungkin ada
referensi