Tolok ukur unik


16

Pertanyaan ini mungkin berada di garis batas antara on-topic dan off-topic, namun saya telah melihat pertanyaan serupa di sini, oleh karena itu saya akan menanyakannya.


Saya menerapkan pemecah unik -SAT, yang inputnya adalah rumus -CNF memiliki paling banyak tugas yang memuaskan. Untuk menguji perilakunya yang praktis, saya memerlukan seperangkat formula seperti itu. Saya telah mencari mereka di web, dan tidak menemukan apa-apa (sementara, di sisi lain, sangat mudah untuk menemukan suite formula -CNF biasa ).kk1k

Di mana saya dapat menemukan contoh Unik -SAT?k

Atau, saya akan puas juga untuk mengetahui prosedur apa pun untuk menghasilkan contoh unik yang memuaskan. Satu-satunya pendekatan yang saya tahu berjalan di bawah nama generasi instance SAT yang ditanam : Anda secara acak menghasilkan tugas dari variabel , maka Anda hanya menghasilkan klausa yang setuju dengan tugas tersebut. Pendekatan ini tidak memuaskan untuk tujuan saya, karena alasan berikut:n

  • Formula yang diperoleh mungkin memiliki tugas-tugas memuaskan yang tidak diinginkan lebih lanjut.
  • Untuk memastikan bahwa formula dipenuhi secara unik oleh tugas yang diinginkan, Anda harus memperkenalkan semua klausa yang mungkin setuju dengan itu. Ini akan menghasilkan formula dengan terlalu banyak klausa, yang mungkin akan mudah dipecahkan dan karenanya tidak mewakili perilaku kasus terburuk dari pemecah. Tidak jelas bagi saya bagaimana kita dapat secara efisien memaksakan keunikan sambil menjaga agar jumlah klausa tetap masuk akal.

Bagaimana kita bisa menghasilkan formula yang memuaskan secara unik dengan sejumlah klausa yang masuk akal? Dengan wajar Maksudku jauh dari maksimal .2k(nk)


Diberikan rumus SAT dengan variabel dan klausa. Jika jumlah klausa antara dan maka rumus dapat secara unik memuaskan atau tidak memuaskan. .. Saya telah mengerjakan persamaan untuk k-SAT juga. Akan memberi tahu Anda jika saya menemukannya. n m 3 n - 2 n 3 n - 2 n - 2 n - 1 FFnm3n2n3n2n2n1F
Tayfun Pay

Jika Anda memiliki cukup waktu di tangan Anda (dan instans cukup kecil), Anda dapat membuat instans pada transisi fase dan mengujinya dengan pemecah SAT. Jika formula tidak memiliki solusi, buanglah. Jika memiliki solusi X, tambahkan klausa yang menyatakan bahwa solusi tersebut bukan X, dan jalankan solver lagi. Ini dasar tetapi lambat.
Andrew D. King

Jawaban:


7

Berikut adalah salah satu cara untuk menghasilkan instance Unique -SAT, mengingat instance SAT yang Anda tahu cukup memuaskan. Pertimbangkan rumus diberikan olehkψ ( x )φψ(x)

φ(x)h(x)=y,

di mana adalah fungsi hash yang memetakan penugasan ke nilai bit (untuk beberapa nilai kecil ), dan adalah nilai bit acak . Jika memiliki sekitar tugas yang memuaskan, maka (secara heuristik) kami berasumsi bahwax k k y k φ 2 k ψhxkkykφ2kψ akan memiliki tepat satu tugas yang memuaskan (dengan probabilitas konstan). Kita dapat menguji apakah ini kasusnya menggunakan solver SAT (yaitu, menguji apakah memuaskan; jika ya, dan adalah salah satu tugas yang memuaskan, uji apakah memuaskan). Jikax 0 ψ ( x ) x x 0 kψx0ψ(x)xx0ktidak diketahui, Anda dapat menemukan menggunakan pencarian biner atau hanya dengan mengulangi setiap nilai kandidat (di mana adalah jumlah variabel boolean dalam ).kk=1,2,,nnx

Anda dapat memilih fungsi hash secara bebas. Anda mungkin ingin membuatnya sesederhana mungkin. Salah satu konstruksi yang sangat sederhana adalah memiliki memilih subset acak bit dari . Konstruksi yang sedikit lebih canggih adalah memiliki bit ke- dari menjadi xor dari dua bit yang dipilih secara acak dari (memilih pasangan posisi bit yang terpisah untuk setiap , secara independen). Menjaga sederhana akan membuat relatif sederhana.hkxih(x)xihψ

Jenis transformasi ini kadang-kadang digunakan / disarankan, sebagai bagian dari skema untuk memperkirakan jumlah penugasan yang memuaskan ke formula ; Saya telah menyesuaikannya untuk kebutuhan khusus Anda.φ

Anda dapat menemukan banyak testbeds dari instance SAT di Internet, dan Anda dapat menerapkan transformasi ini pada semuanya, untuk mendapatkan koleksi instance Unique -SAT.k


Kemungkinan lain akan menghasilkan instance Unik -SAT dari kriptografi. Misalnya, anggap adalah permutasi satu arah kriptografis. Biarkan menjadi elemen yang dipilih secara acak dari , dan misalkan . Maka rumus diberikan oleh adalah turunan unik -SAT. Sebagai contoh lain, pilih dua bilangan prima besar secara acak, dan biarkan (dengan korespondensi yang jelas antara bit-string dan integer) adalah Unikkf:{0,1}n{0,1}nx{0,1}ny=f(x)φ(x)f(x)=ykp,qn=pq . Maka rumus diberikan olehφ(x,y)xy=nx>1y>1xyk -SAT. Namun, konstruksi ini sepertinya bukan cara yang berguna untuk membandingkan atau mengoptimalkan pemecah Anda. Mereka semua memiliki struktur khusus, dan tidak ada alasan untuk percaya bahwa struktur ini mewakili masalah dunia nyata. Secara khusus, instance SAT yang diambil dari masalah kriptografi diketahui sangat sulit, jauh lebih sulit daripada instance SAT yang diambil dari banyak aplikasi dunia nyata pemecah SAT lainnya, jadi mereka bukan basis yang sangat baik untuk menentukan tolok ukur solver Anda.


Secara umum, semua teknik yang disebutkan dalam jawaban ini memiliki kelemahan yang mereka hasilkan Unikk contoh -SAT dengan struktur tertentu, sehingga mereka mungkin tidak seperti yang Anda cari - atau, setidaknya, Anda mungkin tidak ingin mengandalkan semata-mata pada formula yang dihasilkan dengan cara ini. Pendekatan yang lebih baik adalah mengidentifikasi aplikasi Unique -SAT (menurut Anda siapa yang akan menggunakan solver Anda, dan untuk tujuan apa?), Dan kemudian mencoba untuk mendapatkan beberapa contoh realistis dari domain aplikasi tersebut.k

Untuk topik terkait, lihat juga Menghasilkan masalah optimisasi kombinatorial yang menarik


Bagian pertama paragraf crypto Anda salah, karena (jika ada fungsi satu arah maka) ada fungsi satu arah yang tidak injeksi.

Terima kasih, @ RickyDemer! Maksud saya permutasi satu arah, tetapi bukan itu yang saya tulis. Tetap.
DW

6

Anda dapat mempertimbangkan algoritma yang digunakan untuk menghasilkan teka-teki Sudoku - mungkin digeneralisasikan ke - karena (biasanya) teka-teki Sudoku seharusnya memiliki solusi unik. Di sisi lain, teka-teki Sudoku juga biasanya dijamin memiliki setidaknya satu solusi ... Tetapi menemukan solusi itu masih bisa menjadi tolok ukur yang baik untuk pemecah Anda.n×n

Anda dapat menggunakan generator Sudoku bersama-sama dengan reduksi menjadi SAT, atau Anda mungkin berpikir tentang cara menerapkan teknik yang digunakan dalam generasi Sudoku untuk secara lebih langsung menghasilkan instance SAT yang unik. Untuk yang pertama, jelas instance SAT Anda akan memiliki beberapa struktur, tetapi tidak jelas bagi saya apakah itu lebih atau kurang struktur daripada misalnya menanam solusi atau menggunakan teknik isolasi saksi. Mungkin tergantung pada kebutuhan dan solver Anda.

Satu referensi yang saya tahu di sini adalah: Sudoku Puzzles Generating: from Easy to Evil .


4

Saya pikir kasus uji yang baik adalah untuk menghasilkan instance 3XOR acak yang unik dan memuaskan (instance yang ditanam) dengan kendala dan kemudian mengubahnya menjadi instance 3SAT.Θ(n)


2

Saya salah satu cara terbaik untuk membuat instance SAT "agak sulit" sambil mengendalikan jumlah solusi adalah dari instance integer / sirkuit yang dikodekan dalam biner. kode ini tidak terlalu rumit, terutama menggunakan sirkuit penambahan EE, dan tidak menyebabkan instance SAT "besar". jumlah solusi sama dengan jumlah faktor (termasuk "permutasi" dari faktor-faktor). Oleh karena itu bilangan prima menghasilkan dua solusi, . solusi tunggal dapat dijamin dengan batasan "perbandingan" lebih lanjut yang membatasi faktor menjadi <(1,p),(p,1)a<ba1 .bp

juga dengan pendekatan ini adalah relatif mudah untuk menemukan angka dengan kasar namun banyak faktor / solusi yang diinginkan. semakin "halus" jumlahnya, semakin banyak faktor.

berbagai peneliti selama bertahun-tahun telah menciptakan kode SAT anjak ini (misalnya untuk kompetisi DIMACS / arcihve yang telah menyimpan beberapa contoh anjak di masa lalu) tetapi sayangnya sepertinya tidak ada versi yang tersedia untuk umum. lihat juga tautan pertama di bawah ini untuk referensi di mana kode itu ditulis / dilaksanakan tampaknya untuk program pascasarjana.

empiris / pendekatan lain berulang yang mungkin berguna bagi sebagian orang, untuk membuat lebih "terstruktur" contoh: membuat random SAT contoh dekat titik transisi (wilayah di mana persamaan memiliki probabilitas 50% antara "dipecahkan dan dipecahkan"), dan lalu selesaikan persamaannya. jika tidak dapat dipecahkan, buang dan mulai kembali. jika dipecahkan, menambahkan klausul yang membatasi solusi "tidak" menjadi solusi ditemukan, memperoleh e n + 1 , dan kembali memecahkan-. ulangi jika perlu. ketika persamaan e n + 1 tidak lagi dipecahkan, yang e n harus memiliki solusi tunggal / unik.enen+1en+1en


Saya menyebutkan pendekatan anjak dalam jawaban saya sebelumnya, tetapi saya juga menjelaskan mengapa itu mungkin bukan testbed yang ideal: "Namun, konstruksi ini sepertinya bukan cara yang berguna untuk membandingkan atau mengoptimalkan pemecah Anda. Mereka semua memiliki struktur khusus, dan tidak ada alasan untuk percaya bahwa struktur ini mewakili masalah dunia nyata.Secara khusus, contoh SAT yang diambil dari masalah kriptografi diketahui sangat sulit, jauh lebih sulit daripada contoh SAT yang diambil dari banyak aplikasi dunia lain dari pemecah SAT, jadi itu bukan dasar yang sangat baik untuk membuat tolok ukur solver Anda. "
DW

jadi hal di atas adalah perbedaan yang berbeda bahwa jika seseorang menginginkan contoh yang sangat sulit, jelas merupakan ujian alami untuk setiap pemecah masalah, maka anjak piutang memang merupakan cara yang menjanjikan untuk dilakukan. sangat ragu bahwa Anda dapat menemukan pendapat yang dipublikasikan yang mencerminkan pendapat Anda. untuk mengulang, contoh anjak piutang telah dimasukkan dalam arsip tantangan DIMACS oleh peneliti serius mulai bertahun-tahun yang lalu. Lagi pula, pendapat Anda yang sebaliknya bahkan tidak benar-benar diungkapkan dengan cara yang konsisten sendiri. kriptografi memang merupakan masalah dunia nyata terapan / terapan bahkan lebih dari masalah abstrak / abstrak / akademis yang digunakan untuk contoh SAT ...
vzn

2

Anda dapat dengan mudah menghasilkan formula SAT unik langsung dengan ukuran yang wajar (|F|<n+2k)

Biarkan menjadi model unik - misalkan m hanya berisi "0" (ganti nama variabel nanti jika perlu). Biarkan F a k -SAT rumus hanya dipenuhi oleh m - ukuran maksimum F adalah jumlah total klausa yang dipenuhi oleh m yaitu ( 2 k - 1 ) ( nmm
FkmFm(2k1)(nk) .

Ambil klausa yang menghilangkan semua model yang menetapkan tepat satu "1" di antarax1,x2...xk:(¬x1,x2...xk)(x1,¬x2...xk)...(x1,x2...¬xk)(k1)x1,x2xk
(¬x1,x2xk)(x1,¬x2xk)(x1,x2¬xk)

Ambil klausa yang menghilangkan semua model yang menetapkan tepat dua "1" di antarax1,x2...xk:(¬x1,¬x2,x3...xk)(¬x1,x2,¬x3...xk)...(x1,x2...¬xk-1¬(k2)x1,x2xk
(¬x1,¬x2,x3xk)(¬x1,x2,¬x3xk)(x1,x2¬xk1¬xk)

Teruskan sampai mengambil satu-satunya klausa yang menghilangkan semua model yang menetapkan "1" untuk setiap variabel di antarax1,x2...xk(kk)x1,x2xk .

Satu-satunya model yang belum dihilangkan menetapkan semua ke "0". Karena m adalah model, maka ambil seperangkat klausa n - k yang menghilangkan semua model yang menetapkan "1" ke x i ( k < i n ) dan 0 ke sembarang variabel k - 1 di antara x 1 , x 2x k , misalnya: ( ¬ x k + 1x1,x2xkmnkxi(k<in)0k1x1,x2xk
.(¬xk+1,x1,xk1)(¬xn,x1xk1)

Lalu |F|=i=1k(ki)+nk=2k1+nk

Untuk mendapatkan lebih banyak klausa, tambahkan klausa apa pun yang mengandung setidaknya satu variabel yang dinegasikan. Untuk mendapatkan formula yang tidak memuaskan, cukup tambahkan klausa dengan variabel tidak terdegestasi .k


Ada masalah dalam jawaban Anda: kami memiliki n variabel dan ini berarti dan bukan k
Elaqqad
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.