Jawaban:
Algoritma inti seperti DPLL dan penyempurnaannya seperti CDCL sepenuhnya deterministik.
Perhatikan bahwa non-determinisme tidak selalu berarti bahwa algoritma dapat menyebabkan hasil yang salah. Misalnya kita bisa membedakan
Algoritma Monte Carlo , yang merupakan algoritma acak yang outputnya mungkin salah dengan beberapa probabilitas.
Algoritma Las Vegas , yang merupakan algoritma acak yang outputnya selalu benar , tetapi algoritma 'bertaruh' dengan sumber daya yang digunakan dalam perhitungan, misalnya waktu berjalan pada input yang identik dapat bervariasi.
Pada ekstrim lain adalah algoritma probabilistik untuk menyelesaikan -SAT seperti Schöning [1] yang merupakan Monte-Carlo, dan sangat efektif dalam praktik mengingat kesederhanaannya. Menariknya algoritma Schöning dapat sepenuhnya derandomised tanpa kehilangan (banyak) keefektifannya [2].
Dalam praktiknya, pemecah SAT industri selalu menggunakan tingkat keacakan tertentu, sehingga dapat 'lepas' dari perilaku terburuk dari algoritma berbasis-DPLL. MiniSat adalah perangkat lunak yang sangat dapat dikonfigurasi dan berkembang. Yang mengatakan, MiniSat tidak sepenuhnya deterministik: pilihan variabel percabangan kadang-kadang acak, tergantung pada opsi baris perintah. (Defaultnya adalah 2% variabel percabangan dipilih secara acak IIRC.) Demikian juga, MiniSAT memiliki opsi untuk menginisialisasi skor VSIDS secara acak. (VSIDS adalah heuristik untuk 'mengukur' pengaruh variabel.)
U. Schöning, Algoritma Probabilistik untuk-SAT Berdasarkan Pencarian dan Restart Lokal Terbatas .
RA Moser, D. Scheder, Derandomisasi Penuh dari Schöning's Algoritma -AT .
Itu benar. DPLL mengeksplorasi ruang secara mendalam. Jika mengembalikan 'unsat' maka tentu tidak ada tugas yang memuaskan.
Baru-baru ini, para peneliti telah mengembangkan pemecah SAT yang mensertifikasi yang juga memberikan bukti ketidakpuasan, ketika mereka mengembalikan "tidak". Bukti ini dapat diperiksa oleh orang lain, yang menyediakan cara bagi orang lain untuk memverifikasi bahwa rumus tidak memuaskan tanpa mereka harus menjalankan kembali algoritma SAT. Ini dapat bermanfaat dalam beberapa konteks.
MiniSAT adalah implementasi, bukan algoritma. Perilakunya tergantung pada kodenya. Saya tidak dapat berbicara dengan apa yang dilakukan kode.
Pemecah SAT dapat bersifat deterministik atau tidak tergantung pada bagaimana penerapannya. Perhatikan bahwa nondeterminisme di sini hanya dapat memengaruhi model yang dihasilkan, bukan jawaban (SAT atau UNSAT) dari pemecah! Untuk tujuan diversifikasi dan lain-lain, pemecah SAT umumnya memperkenalkan keacakan pada titik tertentu: misalnya untuk menginisialisasi kegiatan variabel atau membuat keputusan acak. Dalam minisat misalnya, keputusan acak dibuat dengan memanggil fonction yang selalu mengembalikan nomor acak yang sama saat menggunakan seed acak yang sama. Jadi pada titik ini ketika Anda tidak mengubah konfigurasi pemecah apa pun, Anda akan selalu memiliki jawaban dan model yang sama. Mengubah benih acak misalnya tidak akan mempengaruhi jawaban (SAT atau UNSAT) tetapi dapat mengubah model dan waktu eksekusi.