Mulai makalah SAT solver

24

Saya ingin membuat pemecah SAT pertama. Saya tahu kompetisi SAT dan konferensi SAT, dan ada begitu banyak makalah tentang hal ini. Saya seorang pemula, seorang pemula yang kewalahan. Di mana saya harus mulai? Akhirnya saya ingin mendorong yang canggih. Saya ingin beberapa saran ahli tentang cara memulainya, sehingga saya tidak akan membuang waktu untuk hal-hal yang tidak penting terlalu dini. Terimakasih banyak.

Zirui Wang
sumber
6
Sudahkah Anda menerapkan algoritma DPLL? Sudahkah Anda menyetel dan menyempurnakan implementasi Anda agar berjalan sangat cepat?
Jukka Suomela
5
The Handbook of Satisfiability - amazon.co.uk/… (mungkin periksa perpustakaan, biayanya cukup tinggi).
MGwynne
1
@Jukka: komentar -> jawaban?
Suresh Venkat
4
Saya tidak setuju dengan Jukka. Mengapa menemukan kembali roda? Tidak ada alasan untuk mengulang apa yang MiniSAT telah menyediakan open source. Jika Anda tertarik untuk menambah kerangka CDCL, penambahan Anda akan terlihat pada peningkatan kinerja MiniSAT. Juga, DPLL dengan sendirinya tidak cukup; banyak perbaikan telah dilakukan. Pada dasarnya, ikuti jawaban Mikolas!
Huck Bennett
1
Lihat juga pertanyaan terkait cstheory.stackexchange.com/q/1988
András Salamon

Jawaban:

18

Ikhtisar pemula yang sangat baik diberikan oleh artikel berikut dari 2009.

Ada beberapa cara untuk masuk ke aspek teknis. Anda bahkan dapat mulai dengan kertas Davis-Putnam yang asli. Ini sangat jelas dan memiliki contoh-contoh terperinci. Ketika membahas optimasi SAT dalam kursus, kami menemukan bahwa beberapa orang mungkin membayangkan sudah ada di sana. Makalah Davis-Logeman-Loveland (saya merasa) kurang instruktif, tetapi sangat singkat sehingga Anda bisa membacanya.

Mungkin ada cara untuk mengejar perkembangan 50 tahun ke depan. Saya akan merekomendasikan slide kuliah. Hanya mencari 'DPLL' akan memunculkan banyak tutorial. Jika Anda menjelajahinya, saya yakin kabutnya akan hilang - sampai batas tertentu. Ada juga banyak survei bermanfaat. Kertas Zhang-Malik adalah tempat yang baik untuk memulai. Ada beberapa artikel dalam Buku Pegangan Kepuasan yang mungkin berguna bagi Anda.

Saya mendukung saran Mikolaos. Kode MiniSAT bersih dan ukurannya bisa diatur. Anda bisa bermain dengannya. Ada beberapa solver lain yang bisa Anda coba. CryptoMiniSat juga cukup bersih. Anda juga harus berkonsultasi dengan karya Armin Biere , yang menulis solver SAT dan menulis tentang menulis solver SAT.

Vijay D
sumber
17

Saya sarankan pertama memahami teknik mana yang benar-benar memajukan solver, untuk yang saya sarankan ikhtisar dan analisis berikut .

Maka saya akan merekomendasikan mengunduh kode sumber minisat dan membaca deskripsinya .

Tentu saja mungkin individu tetapi saya menemukan melihat kode sumber yang paling berharga.

Mikolas
sumber
9

Jika Anda kewalahan oleh semua pekerjaan yang ada di luar sana, mengapa Anda tidak mulai berpura-pura bahwa tidak ada yang memperbaiki masalah sebelumnya? Jika tujuan Anda adalah untuk akhirnya membangun pemecah SAT yang kompetitif, itu akan menjadi perjalanan yang cukup panjang. Dengan memulai hanya bermain-main tanpa 'memeriksa solusinya', Anda bisa mendapatkan lebih banyak daripada kalah.

nmnm .

nm

James King
sumber
9

Mulailah dengan kertas survei yang bagus. Sangat mudah untuk menyerang sedikit demi sedikit subjek dan menjadi bingung dengan nama yang berbeda dalam literatur untuk teknik yang sama dan nama yang sama digunakan untuk teknik yang berbeda. Juga mudah untuk memberlakukan kembali pertempuran algoritmik lama (daftar terjadi vs daftar kepala-ekor vs. dua literal yang ditonton untuk implementasi DPLL misalnya) jika Anda tidak tahu bagaimana keadaannya.

Pemecah Kepuasan oleh Gomes, et. Al. akan memberi Anda tanah yang kasar.

Meningkatkan Solver SAT Menggunakan Teknik-Teknik Mutakhir oleh Manthey akan membawa Anda lebih dekat ke masa kini.

Kyle Jones
sumber