Seberapa efisien pemecah SAT berbasis DPLL pada instance PHP yang memuaskan?

15

Kita tahu bahwa pemecah SAT berbasis DPLL gagal menjawab dengan benar pada contoh tidak memuaskan (prinsip hole pigeon), misalnya pada "ada pemetaan injeksi dari n + 1 ke n ":PHPn+1n

PHPnn+1:=(i[n+1] j[n] pi,j)(ii[n+1] j[n] (¬pi,j¬pi,j))

Saya mencari hasil tentang bagaimana kinerjanya pada contoh memuaskan , misalnya pada "ada pemetaan injeksi dari n ke n ".PHPnn

Apakah mereka menemukan tugas yang memuaskan dengan cepat pada contoh seperti itu?

Kaveh
sumber
1
Dengan "gagal menjawab dengan benar" maksud Anda "kehabisan sumber daya pada nilai n" yang cukup besar?
Vijay D
@ Kaveh Apakah Anda mengizinkan pengulangan klausa dan / atau pengulangan variabel dalam klausa yang sama? Terima kasih
Tayfun Bayar
@ VijayD, maksud saya algoritma tidak mengembalikan jawaban yang benar dalam waktu polinomial untuk cukup besar . Saya berharap seseorang dapat membuktikan bahwa algoritma berbasis DPLL akan bekerja dalam waktu polinomial pada keluarga ini. n
Kaveh
@ Geekster, saya tidak yakin apa yang Anda maksud. Saya memiliki keluarga formula tertentu. Apakah Anda bertanya apakah ada pengulangan dalam rumus itu?
Kaveh

Jawaban:

14

Pada contoh memuaskan , pemecah SAT berbasis DPLL akan memberikan tugas yang memuaskan dalam waktu linier.PHP

Untuk melihat alasannya, amati bagaimana pengkodean CNF dari instance tidak memuaskan dengan n hole dan n + 1 merpati identik secara sintaksis dengan instance k = n Pewarnaan Grafik, di mana grafik input adalah kumpulan n + 1 simpul .PHPnn+1k=nn+1

Demikian pula, pengkodean CNF dari instance memuaskan dengan n hole dan n pigeon identik secara sintaksis dengan instance k = n Graph Coloring, di mana grafik input adalah kumpulan dari n simpul.PHPnnk=nn

Sekarang, mewarnai klik simpul dengan n warna mudah: pindai simpul, dan tetapkan masing-masing dari mereka salah satu warna yang tersisa (warna yang sudah ditetapkan secara otomatis dikesampingkan oleh klik grafik, menggunakan unit propagation) . Apa pun dari warna yang Anda pilih, itu akan bagus dan akan membawa Anda ke tugas yang memuaskan.nn

Dari sudut pandang pemecah DPLL: setiap kali akan mencoba menebak nilai boolean dari variabel , nilai tersebut akan benar (apa pun itu), karena pasti akan ada tugas yang memuaskan di mana variabel v i memiliki nilai dugaan. Unit propagasi akan melakukan sisa pekerjaan, dengan memandu pemecah sepanjang jalur yang memuaskan (dengan kata lain: dengan mencegahnya menebak nilai yang salah).vivi

Pencarian kemudian menghasilkan satu variabel setelah yang lain, secara linear, setiap kali membuat tebakan yang benar.

Giorgio Camerani
sumber
Terima kasih, ini yang kuharapkan. Omong-omong, apakah Anda tahu referensi yang menyatakan ini (yaitu "algoritma DPLL memecahkan contoh PHP / GC yang memuaskan dalam waktu linier")?
Kaveh
1
Sama sama. Saya tidak tahu referensi apa pun yang menyatakan ini, saya baru saja mendapatkannya sendiri melalui beberapa alasan. Seharusnya tidak sulit untuk membuktikannya secara formal, dengan mengandalkan fakta bahwa setiap pemecah SAT menggunakan beberapa heuristik yang masuk akal baik dalam memilih variabel berikutnya dan dalam menebak nilai booleannya. Harus diperhatikan, pada kenyataannya, bahwa setidaknya ada satu heuristik yang tidak masuk akal yang menghalangi kita untuk mencapai solusi dalam waktu linier (heuristik yang tidak masuk akal seperti itu akan disetel ke false setiap variabel, sampai memungkinkan). Sementara dengan heuristik yang wajar, waktu linier dipastikan.
Giorgio Camerani
Saya setuju. Saya berharap bahwa seseorang mungkin telah menyatakan ini di suatu tempat sehingga saya dapat mengutip ketika saya membutuhkannya. Saya ingin menunggu beberapa hari lagi dan jika tidak ada yang memberikan referensi saya akan menerima jawaban ini. Terima kasih lagi. :)
Kaveh
Dengan senang hati ;-) Cheers!
Giorgio Camerani