Saya membaca entri Wikipedia tentang " Daftar masalah NP-complete " dan menemukan bahwa game seperti super mario, pokemon, tetris atau permen crush saga np-complete. Bagaimana saya bisa membayangkan np-kelengkapan game? Jawaban tidak perlu terlalu tepat. Saya hanya ingin mendapatkan gambaran tentang apa artinya game bisa selesai-np.
50
Jawaban:
Ini hanya berarti bahwa Anda dapat membuat level atau teka-teki dalam game-game ini yang menyandikan masalah NP-Hard. Anda dapat mengambil masalah pewarnaan grafik, membuat level Super Mario Bros yang terkait, dan level itu dapat dikalahkan jika dan hanya jika grafik tersebut 3-berwarna.
Jika Anda ingin melihat cara spesifik masalah NP-Complete diterjemahkan ke dalam game, saya sarankan makalah "Game Nintendo Klasik adalah (Komputasi) Keras" . Ini ditulis dengan baik dan mudah diikuti.
Peringatan penting yang perlu diingat adalah bahwa kekerasan-NP membutuhkan generalisasi permainan dengan cara yang "jelas". Sebagai contoh, Tetris biasanya memiliki papan ukuran tetap tetapi bukti kekerasan membutuhkan permainan untuk memungkinkan papan besar sewenang-wenang. Contoh lain adalah musuh di luar layar di Super Mario Bros: buktinya adalah untuk varian permainan di mana musuh di luar layar terus bergerak seolah-olah mereka ada di layar, alih-alih berhenti ada dan diatur ulang ke posisi awal ketika Mario kembali .
sumber
sumber
Berikut ini penjelasan melambaikan tangan yang sederhana:
Permainan seperti itu NP-hard karena perilaku pemain sangat ekspresif. Sementara pada suatu titik tertentu seorang pemain mungkin hanya memiliki sejumlah tindakan yang terbatas, bahkan tetap, yang mungkin, itu cukup untuk menciptakan ruang perilaku atau strategi yang eksponensial di sepanjang permainan; dan sementara Anda mungkin dapat memberikan kondisi sederhana atau formula logis tentang validitas / manfaat / kebenaran tindakan pemain secara lokal, secara global Anda mendapatkan efek yang serupa dengan sirkuit kombinatorial besar, atau formula k-CNF.
Semoga ini masuk akal dan juga cukup berdering lonceng teori CS.
PS - Beberapa game jauh lebih kompleks (secara komputasi) dari itu. Sebagai contoh, boardgames Hex , Go dan dan Reversi adalah PSPACE-complete. Itu pada dasarnya karena formula yang Anda perlukan untuk strategi kemenangan adalah formula bilangan berulang-kali-bolak-balik: Ada gerakan oleh pemain 1, sehingga untuk setiap gerakan oleh pemain 2, ada gerakan oleh pemain 1 dll. Dll. sedemikian sehingga dengan semua gerakan yang telah dimainkan, beberapa gerakan pemain 2 tidak valid atau kami memiliki urutan pemain yang valid 1 telah menang. Dengan game NP, biasanya hanya perilaku / strategi / pilihan pergerakan satu pemain.
sumber
Untuk permainan pemain tunggal, Anda selalu dapat mengajukan pertanyaan "apakah ada strategi kemenangan untuk pemain", dan pertanyaan itu sering kali memiliki jawaban "YA" yang dapat diverifikasi dalam waktu polinomial, dan mungkin NP lengkap.
Untuk permainan dua pemain, jawabannya seringkali tidak dapat diverifikasi dalam waktu polinomial, karena untuk memverifikasi bahwa langkah untuk A adalah langkah yang menang, Anda harus menunjukkan bahwa untuk setiap respons B akan ada lagi langkah yang menang untuk A dan begitu seterusnya.
sumber
Yah, itu tentu dalam NP, karena solusi yang mungkin hanya sejumlah input terbatas (di setiap frame input Anda dapat memilih salah satu tombol k, kami mewakili setiap pilihan tombol untuk setiap frame dengan huruf) yang membawa Anda ke layar menang. Kami tahu bahwa permainan ini telah dikalahkan sebelumnya, jadi kami tahu, bahwa ada solusi. NTM memeriksa kasetnya dan menebak secara ajaib sertifikat panjang yang benar n. Kemudian itu mensimulasikan Super Mario dengan input dan memverifikasinya. Verifikasi dapat dilakukan dalam waktu polinomial (waktu linier sebenarnya, jika solusinya benar, dibutuhkan n frame yang tepat untuk menang).
Untuk menunjukkan kelengkapan NP, kita bisa mengurangi 3-SAT untuk itu dengan membangun pemeriksa 3-Sat dengan generator level (yang dibangun melalui eksekusi kode arbitrer https://www.youtube.com/watch?v=IOsvuEA2h4w ).
Jadi kami memiliki input CNF 3-SAT, yang kami periksa untuk pemformatan yang benar terlebih dahulu. Jika diformat dengan buruk, kami hanya menerjemahkannya menjadi satu input 'lompatan' (tidak mungkin mengalahkan Super Mario dalam satu frame dengan melakukan lompatan).
Kami menyebut panjang input 3-CNF n.
Jika diformat dengan benar, kami menerjemahkannya ke sejumlah input, yang membangun pemeriksa 3-CNF untuk kami (selalu kode panjang yang sama k), menerjemahkan 3-CNF menjadi String input, yang membangun spesifik 3- CNF di pemeriksa (di O (n)), dan periksa semua solusi yang mungkin dengan kekerasan. Itu menganggur dan tidak melakukan apa-apa, jika setelah melalui semua solusi, tidak ada yang ditemukan. Ini me-restart permainan dan menggunakan solusi yang dikenal untuk Super Mario untuk mengalahkan permainan (kode untuk melakukannya adalah memiliki panjang j). Transformasi kami dengan demikian dalam O (n), sehingga dalam waktu polinomial.
Jika CNF diformat dengan buruk, kami tidak menang (menurut definisi, input kami tidak menang, jika kami belum memenangkan satu frame setelah eksekusi). Jika CNF tidak memuaskan, kami tidak menang (Anda tidak bisa menang dengan berhenti untuk satu frame di generator level, kami memastikannya dalam kode kami). Jika CNF memuaskan, pemeriksa menemukan solusi memulai kembali dan memenangkan permainan. Jadi pengurangan polinomial dari 3-Sat ke Super Mario sudah lengkap dan kami telah membuktikan, bahwa Super Mario adalah NP-complete.
(Semoga saya tidak mengacaukannya di suatu tempat. Kami mengalami masalah penyimpanan, jika 3-CNF terlalu panjang, tetapi penyimpanan terbatas biasanya diabaikan dalam konteks ini, saya percaya)
sumber
Saya menulis ulang jawaban ini untuk mencoba menjawab beberapa komentar pada versi sebelumnya.
Saya berasumsi bahwa Anda telah membaca definisi Wikipedia untuk kelengkapan NP yang benar-benar tidak fokus pada game. Saya akan mempermudah arti dari kelengkapan NP dan teori permainan sedikit saja dan menjelaskan esensi dari game NP-Lengkap.
Mari kita pertimbangkan permainan 2 pemain dengan gerakan alternatif, lebih terbatas ini pada dasarnya adalah tentang permainan Kombinatorial . Pada dasarnya gim yang Anda miliki memiliki sejumlah gerakan yang dapat dilakukan dan Anda harus memilih salah satunya. Anda ingin bermain "sempurna" yang berarti Anda tidak akan pernah melakukan gerakan "buruk". Jadi dari langkah yang diijinkan Anda ingin memilih yang terbaik. (Tentu saja lawanmu memiliki tujuan yang sama ...)
Mengingat kondisi permainan saat ini, Anda ingin dapat menggunakan "algoritma efisien" untuk menghitung langkah terbaik. Di sisi lain, mari kita perhatikan bahwa algoritma yang harus mencari melalui seluruh pohon permainan adalah "algoritma yang tidak efisien."
Sekarang poin penting adalah bahwa tidak mungkin untuk memiliki algoritma yang efisien, waktu polinomial, yang bermain sempurna untuk permainan yang NP-lengkap. Untuk memainkan dengan sempurna masalah NP-complete harus, secara definisi, diselesaikan dengan algoritma yang tidak efisien yang berjalan dalam waktu nonpolinomial.
Untuk Nim dimungkinkan untuk membuat algoritma waktu polinomial. Pada titik mana pun dalam game, algoritme dapat menghitung pemain mana yang memiliki langkah kemenangan dan apa yang seharusnya dilakukan.
Di sisi lain mari kita ambil permainan Qubic . (Anda mencoba membuat garis 4 dalam kisi 3D. Jadi pada dasarnya tic-tac-toe pada kisi 4x4x4.) Qubic adalah NP-lengkap sehingga tidak ada algoritma waktu polinomial untuk menghitung langkah sempurna berikutnya. Satu-satunya cara untuk mengetahui apakah Anda saat ini memiliki langkah kemenangan adalah mencoba semua gerakan yang mungkin dilakukan dari kedua pemain untuk memverifikasi bahwa langkah tertentu adalah pemenang, atau setidaknya bukan pecundang.
Sekarang mari kita bahas catur untuk membahas fungsi evaluasi mengabaikan beberapa fitur lain dari program bermain catur. Catur masih merupakan permainan yang belum terpecahkan . Tidak diketahui apakah pemain pertama atau kedua harus menang. Tidak mungkin diberikan posisi dewan dan diprediksi dengan pasti siapa yang akan menang. Bahkan catur memiliki pohon permainan yang sangat besar sehingga mustahil untuk mencari seluruh pohon permainan. Anda akan membutuhkan komputer yang tidak hanya 10 atau 100 kali lebih cepat tetapi miliaran miliar waktu lebih cepat daripada komputer saat ini. (Ada harapan bahwa komputasi kuantum dapat memotong simpul Gordian ini.)
Pikirkan fungsi evaluasi catur sebagai memberikan setiap kemungkinan langkah selanjutnya kemungkinan menjadi langkah terbaik. Apa yang dilakukan program catur adalah menggabungkan pandangan ke depan dengan fungsi evaluasi. Dengan demikian program melihat semua kemungkinan pergerakan di masa depan hingga mencapai titik di mana skor "baik" dapat diberikan ke posisi dewan. Komputer mengevaluasi semua jalur yang mungkin melalui pohon dengan cara ini dan kemudian memilih jalur dengan skor terbaik. Karena pencarian tidak pernah sampai ke akhir permainan untuk semua jalur yang dievaluasi, semua program catur akhirnya menggunakan fungsi evaluasi yang tidak sempurna. (Jika Anda mendekati akhir permainan maka komputer mungkin dapat melihat semua kemungkinan langkah di masa depan.) Itu berarti mungkin untuk mengalahkan program bahkan jika program memiliki posisi yang menang di beberapa titik.
sumber