Mengapa tidak ada algoritma perkiraan untuk SAT dan masalah keputusan lainnya?

18

Saya memiliki masalah keputusan NP-lengkap. Diberikan contoh masalah, saya ingin merancang algoritma yang menampilkan YA, jika masalahnya layak, dan, TIDAK, jika tidak. (Tentu saja, jika algoritme tidak optimal, itu akan membuat kesalahan.)

Saya tidak dapat menemukan algoritma perkiraan untuk masalah seperti itu. Saya sedang mencari secara khusus untuk SAT dan saya menemukan di halaman Wikipedia tentang Algoritma Aproksimasi sebagai berikut: Keterbatasan lain dari pendekatan ini adalah bahwa itu hanya berlaku untuk masalah optimasi dan bukan untuk masalah keputusan "murni" seperti kepuasan, meskipun seringkali mungkin untuk .. .

Mengapa kita tidak, misalnya, mendefinisikan rasio perkiraan menjadi sesuatu yang proporsional dengan jumlah kesalahan yang dibuat oleh algoritma? Bagaimana kita benar-benar menyelesaikan masalah keputusan secara serakah dan tidak optimal?

Ribz
sumber
5
Ada algoritma perkiraan untuk MAX-SAT.
Yuval Filmus
2
MAX-SAT bukan masalah keputusan, bukan?
Ribz
15
Algoritma pendekatan selalu untuk masalah optimasi.
Yuval Filmus
4
Jadi pada dasarnya Anda ingin memiliki algoritme yang selesai dengan cepat tetapi diizinkan untuk sesekali memberikan jawaban yang salah. Saya pikir Anda sangat membingungkan masalah dengan menggunakan istilah yang didefinisikan dengan baik seperti "algoritma aproksimasi" dan "optimal" di sini. Itu memiliki makna yang sangat spesifik. Saya kira Anda mencari heuristik sebagai gantinya - jika Anda memperbarui pertanyaan Anda dengan istilah itu (atau mulai dari awal dengan pertanyaan baru untuk menghindari lebih banyak kebingungan), Anda mungkin memiliki hasil yang lebih baik.
AnoE
Meskipun ini bukan jawaban yang lengkap, itu menjelaskan sebagian alasannya: ada masalah SAT penting yang hanya memiliki kesalahan bit rendah tidak lebih baik daripada menjadi setengah kesalahan bit.
Joshua

Jawaban:

33

Algoritma pendekatan hanya untuk masalah optimasi, bukan untuk masalah keputusan.

Mengapa kita tidak mendefinisikan rasio aproksimasi sebagai pecahan dari kesalahan yang dilakukan algoritma, ketika mencoba menyelesaikan beberapa masalah keputusan? Karena "rasio aproksimasi" adalah istilah dengan makna standar yang didefinisikan dengan baik, yang berarti sesuatu yang lain, dan itu akan membingungkan untuk menggunakan istilah yang sama untuk dua hal yang berbeda.

OK, bisakah kita mendefinisikan beberapa rasio lain (sebut saja itu sesuatu yang lain - misalnya, "rasio-det") yang menghitung jumlah kesalahan yang dibuat algoritma, untuk beberapa masalah keputusan? Tidak jelas bagaimana cara melakukannya. Apa yang akan menjadi penyebut untuk fraksi itu? Atau, dengan kata lain: akan ada jumlah contoh masalah yang tak terbatas, dan bagi sebagian dari mereka algoritma akan memberikan jawaban yang benar dan yang lain akan memberikan jawaban yang salah, sehingga Anda berakhir dengan rasio yang "Sesuatu dibagi dengan tak terbatas", dan yang akhirnya menjadi tidak berarti atau tidak didefinisikan.

Sebagai alternatif, kita dapat mendefinisikan sebagai fraksi kesalahan kesalahan algoritma, pada contoh masalah ukuran n . Kemudian, kita dapat menghitung batas r n sebagai n , jika ada batas seperti itu. Ini akanrnnrnnharus didefinisikan dengan baik (jika ada batasnya). Namun, dalam kebanyakan kasus, ini mungkin tidak terlalu berguna. Secara khusus, secara implisit mengasumsikan distribusi yang seragam pada contoh masalah. Namun, di dunia nyata, distribusi aktual pada contoh masalah mungkin tidak seragam - seringkali sangat jauh dari seragam. Akibatnya, jumlah yang Anda dapatkan dengan cara ini sering kali tidak berguna seperti yang Anda harapkan: sering memberi kesan menyesatkan tentang seberapa baik algoritma tersebut.

Untuk mempelajari lebih lanjut tentang bagaimana orang-orang berurusan dengan kepraktisan (NP-hardness), lihat Menangani masalah kepraktisan: masalah lengkap NP .

DW
sumber
3
+1. Tetapi poin terakhir tidak solid, orang bisa berargumen bahwa Anda dapat mendefinisikan rasio aproksimasi sebagai batas ketika n menuju tak terhingga dari jumlah kesalahan yang dibuat oleh program pada input panjang n di atas jumlah string panjang n. Ini tentu saja ternyata tidak berguna, karena seringkali sebuah program sederhana yang hanya menampilkan "YA" (atau "TIDAK") mencapai rasio yang baik (kadang-kadang bahkan 1!).
aelguindy
1
@det, itu pertanyaan terpisah, yang harus Anda tanyakan secara terpisah (setelah membacanya di buku teks standar atau sumber online). Kami lebih suka Anda hanya bertanya satu pertanyaan per posting.
DW
1
@aelguindy, poin bagus. Saya telah memperbarui jawaban saya sesuai dengan itu.
DW
2
@det Mengapa serakah? Apa artinya "hampir" memecahkan masalah keputusan?
Raphael
2
@Mehrdad: Biasanya Anda mengevaluasi algoritme aproksimasi dengan kesalahan terburuknya: batas atas seberapa non-optimalnya. Jadi, misalnya, Anda dapat mengatakan bahwa algoritma perkiraan yang diberikan selalu menemukan hasil yang setidaknya lima perenam dari hasil optimal. Tidak ada cara nyata untuk menerjemahkannya ke masalah keputusan; jika algoritma Anda kadang-kadang memancarkan (katakanlah) 0.1, maka baik kadang-kadang off 0,9 (dalam hal ini Anda akan melakukan lebih baik, dalam kasus terburuk, untuk selalu memancarkan 0,5), atau yang "perkiraan" -ness adalah palsu dan "0,1 "sebenarnya hanya berarti" 0 ".
ruakh
14

Alasan Anda tidak melihat hal-hal seperti rasio perkiraan dalam masalah pengambilan keputusan adalah bahwa mereka umumnya tidak masuk akal dalam konteks pertanyaan yang biasanya ditanyakan tentang masalah pengambilan keputusan. Dalam pengaturan optimasi, masuk akal karena berguna untuk menjadi "dekat." Di banyak lingkungan, itu tidak masuk akal. Tidak masuk akal untuk melihat seberapa sering Anda "dekat" dalam masalah logaritma diskrit. Tidak masuk akal untuk melihat seberapa sering Anda "dekat" untuk menemukan grafik isomer. Dan juga, dalam kebanyakan masalah pengambilan keputusan, tidak masuk akal untuk "dekat" dengan keputusan yang tepat.

Sekarang, dalam implementasi praktis, ada banyak kasus di mana membantu mengetahui bagian mana dari masalah yang dapat diputuskan "dengan cepat" dan bagian mana yang tidak bisa. Namun, tidak seperti optimisasi, tidak ada cara satu ukuran yang cocok untuk mengukur ini. Anda dapat melakukannya secara statistik, seperti yang Anda sarankan, tetapi hanya jika Anda mengetahui distribusi statistik dari input Anda. Sebagian besar waktu, orang-orang yang tertarik dengan masalah keputusan tidak begitu beruntung memiliki distribusi seperti itu.

Sebagai studi kasus, pertimbangkan masalah penghentian. Masalah penghentian diketahui tidak dapat diputuskan. Ini memalukan, karena ini adalah masalah yang sangat berguna untuk dapat diselesaikan jika Anda membuat kompiler. Namun dalam praktiknya, kami menemukan bahwa sebagian besar program sebenarnya sangat mudah dianalisis dari perspektif masalah yang terhenti. Compiler memanfaatkan ini untuk menghasilkan kode optimal dalam keadaan ini. Namun, kompilator harus menyadari bahwa ada kemungkinan kode tertentu tidak dapat ditentukan. Program apa pun yang bergantung pada kode yang "mungkin dapat dipilih" bisa mendapat masalah.

Namun, metrik yang digunakan oleh kompiler untuk menentukan seberapa baik yang mereka lakukan dalam menyelesaikan kasus-kasus khusus dari masalah penghentian ini sangat berbeda dari metrik yang digunakan oleh program kriptografi untuk menguji apakah pasangan bilangan prima tertentu dapat dikeraskan dengan kuat terhadap serangan. Tidak ada satu ukuran cocok untuk semua solusi. Jika Anda menginginkan metrik seperti itu, Anda ingin menyesuaikannya agar sesuai dengan ruang masalah dan logika bisnis Anda.

Cort Ammon - Pulihkan Monica
sumber
Jadi, seperti yang saya pahami, satu-satunya cara untuk menyelesaikan masalah keputusan adalah merancang algoritma optimal yang mungkin sangat tidak efisien? Karena saya memiliki masalah keputusan (NP-complete) dan saya diminta untuk membuat algoritma serakah (cepat) untuk menemukan solusi. Bagaimana saya bisa memecahkan masalah ini? Apakah Anda tahu ada kertas yang berfokus pada masalah seperti ini?
Ribz
1
@Det mendorong kembali dan menyelesaikan masalah. Jika Anda memiliki masalah NP-lengkap, Anda agak terjebak, tapi sangat mungkin bahwa Anda tidak benar-benar perlu untuk menyelesaikan satu. Misalnya, Anda tidak selalu membutuhkan jawaban yang sempurna. Mungkin dekat cukup baik. Atau mungkin Anda dapat memecahkan masalah untuk subset kasus yang mudah, dan menusuk pada yang sulit. Sebagai contoh, algoritma pengemasan seringkali NP-complete, tetapi algoritma yang andal masuk dalam 5% dari optimal menggunakan pendekatan probabalistic adalah umum.
Cort Ammon - Reinstate Monica
2
Dalam semua kejujuran, diberitahu untuk datang dengan algoritma serakah untuk menyelesaikan program NP-lengkap secara harfiah sama dengan yang ditugaskan untuk mengambil seluruh ilmu komputer / komunitas matematika secara terpisah. Jika Anda menemukan sebuah algoritma untuk program NP-lengkap dalam waktu P, di sangat paling tidak Anda akan mendapatkan $ 1 juta Tanah Liat hadiah untuk memecahkan P = NP. Pada kenyataannya, efek dari penemuan Anda akan membentuk kembali komputasi seperti yang kita kenal, dan benar-benar mengubah seluruh industri keamanan / kriptografi dalam semalam. Lebih baik untuk memiliki kata-kata dari tugas yang disesuaikan agar tidak terbukti lengkap NP.
Cort Ammon - Pasang kembali Monica
Saya telah menggunakan algoritma tepat serakah untuk masalah NP-lengkap. Saya hanya perlu menyelesaikan kasus kecil, dan saya bisa mendapatkan server 64-prosesor untuk akhir pekan.
Patricia Shanahan
8

Selain jawaban yang ada, izinkan saya menunjukkan bahwa ada situasi di mana masuk akal untuk memiliki solusi perkiraan untuk masalah keputusan, tetapi berfungsi berbeda dari yang Anda kira.

Dengan algoritma ini, hanya satu dari dua hasil yang ditentukan dengan pasti, sedangkan yang lainnya mungkin salah. Ambil tes Miller-Rabin untuk bilangan prima , misalnya: Jika tes menentukan bahwa bilangan tidak prima, hasilnya pasti. Tetapi dalam kasus lain itu hanya berarti bahwa jumlahnya mungkin prima. Bergantung pada berapa banyak waktu komputasi yang ingin Anda investasikan, Anda dapat meningkatkan kepercayaan diri Anda pada hasilnya, tetapi itu tidak akan 100% karena untuk kasus yang tidak utama.

Ini sangat kuat ketika menangani masalah yang tidak dapat diputuskan: Anda bisa menulis alat yang mencoba memecahkan masalah penghentian untuk bagian kode tertentu. Jika dapat menemukan bukti bahwa program tidak akan berulang tanpa henti, Anda dapat mengklaimnya dengan kepastian 100%. Jika Anda tidak dapat menemukan bukti seperti itu, mungkin saja alur kontrol program terlalu berbelit-belit untuk dianalisis alat Anda, tetapi itu bukan bukti bahwa itu akan berulang selamanya. Dengan menyederhanakan struktur kontrol, Anda mungkin dapat membuat program yang setara yang cukup sederhana untuk alat untuk membuktikan bahwa itu akan berhenti secara pasti.

KomikSMS
sumber
Ada perbedaan besar antara algoritma probabilistik (jawaban Anda) dan aproksimasi (pertanyaan). Secara khusus, kombinasi keduanya adalah jenis yang sangat istimewa.
Raphael
Juga, kita tahu bahwa algoritma probabilistik untuk masalah penghentian tidak ada, dengan asumsi interpretasi yang masuk akal dari istilah dalam konteks ini.
Raphael
@ Raphael Saya tidak bermaksud jawaban saya spesifik untuk algoritma probabilistik. Memang, untuk Miller-Rabin itulah masalahnya, tetapi seperti yang Anda sebutkan sendiri, ini tidak lagi berlaku untuk contoh masalah penghentian, dan saya kira juga tidak akan berlaku untuk sebagian besar kasus di mana Anda menemukan perilaku ini. Poin yang ingin saya sampaikan adalah bahwa Anda hanya akan mendapatkan kepastian pada satu hasil, tetapi tidak pada yang lain.
ComicSansMS
Jika Anda tidak mengatakan lebih dari itu beberapa masalah hanya semi-computable, saya tidak berpikir Anda menjawab pertanyaan itu.
Raphael
@ Raphael Jawaban saya juga tidak spesifik untuk masalah semi-computable. Bahkan, saya tidak berpikir pendekatan yang saya gambarkan bahkan berlaku untuk masalah semi-computable. Di sana Anda sekarang akan yakin jika Anda mendarat di cabang fungsi yang tidak ditentukan, sehingga Anda dapat mengklaim dengan pasti bahwa tidak ada hasil. Apa yang saya jelaskan adalah: Mungkin ada jawaban, tetapi algoritme mungkin tidak cukup sulit untuk menemukannya.
ComicSansMS