Bagaimana cara memilih algoritma terbaik untuk permainan papan seperti catur?
15
Bagaimana cara memilih algoritma terbaik untuk permainan papan seperti catur?
Sejauh ini, saya hanya mempertimbangkan tiga algoritma, yaitu, minimax, pemangkasan alpha-beta, dan pencarian pohon Monte Carlo (MCTS). Rupanya, pemangkasan alpha-beta dan MCTS adalah ekstensi dari algoritma minimax dasar.
Tidak satu pun dari algoritma ini yang praktis untuk pekerjaan modern, tetapi mereka adalah tempat yang baik untuk memulai secara pedagogis.
Anda harus selalu lebih suka menggunakan pemangkasan Alpha-Beta daripada pencarian minimal.
Anda harus memilih untuk menggunakan beberapa bentuk pencarian dipandu heuristik jika Anda dapat menemukan heuristik yang berguna. Datang dengan heuristik yang berguna biasanya membutuhkan banyak pengetahuan domain.
Anda harus memilih untuk menggunakan pencarian Monte Carlo Tree ketika Anda tidak memiliki heuristik yang baik, ketika sumber daya komputasi terbatas, dan ketika kesalahan tidak akan melebihi konsekuensi dunia nyata.
Keterangan lebih lanjut:
Dalam pencarian minimum, kami tidak berusaha menjadi sangat pintar. Kami hanya menggunakan pendekatan pemrograman dinamis standar. Sangat mudah untuk mengetahui nilai pergerakan perbedaan jika kita mendekati akhir permainan (karena permainan akan berakhir pada langkah berikutnya, kita tidak harus melihat jauh ke depan). Demikian pula, jika kita tahu apa yang akan dilakukan lawan kita di langkah terakhir permainan, mudah untuk mengetahui apa yang harus kita lakukan di langkah terakhir kedua. Secara efektif kita dapat memperlakukan langkah terakhir kedua sebagai langkah terakhir dari permainan yang lebih pendek. Kami kemudian dapat mengulangi proses ini. Menggunakan pendekatan ini pasti untuk mengungkap strategi terbaik dalam permainan bentuk luas standar, tetapi akan mengharuskan kita untuk mempertimbangkan setiap langkah yang mungkin, yang tidak mungkin dilakukan untuk semua kecuali permainan yang paling sederhana.
Pemangkasan Alpha-Beta adalah peningkatan ketat pada pencarian Minimax. Itu memanfaatkan fakta bahwa beberapa gerakan jelas lebih buruk daripada yang lain. Misalnya, dalam catur, saya tidak perlu mempertimbangkan langkah apa pun yang akan memberi Anda kesempatan untuk menempatkan saya dalam skakmat, bahkan jika Anda dapat melakukan hal-hal lain dari posisi itu. Begitu saya melihat bahwa langkah mungkin menyebabkan kerugian, saya tidak akan repot memikirkan apa lagi yang mungkin terjadi dari titik itu. Saya akan melihat hal-hal lain. Algoritma ini juga pasti menghasilkan hasil yang benar, dan lebih cepat, tetapi masih harus mempertimbangkan sebagian besar gerakan dalam praktik.
Ada dua cara umum yang bisa Anda gunakan untuk mengatasi biaya komputasi ekstrem untuk menyelesaikan jenis gim ini dengan tepat:
Gunakan Heuristik (pencarian A * adalah algoritma yang biasa untuk tujuan pedagogis, tetapi pencarian Quiescence adalah ide yang sama di 2 permainan pemain). Ini hanya fungsi yang memberikan perkiraan nilai kondisi permainan. Alih-alih mempertimbangkan semua gerakan dalam permainan, Anda bisa mempertimbangkan bergerak ke jarak tertentu ke depan, dan kemudian menggunakan nilai heuristik untuk menilai nilai negara yang Anda capai. Jika heuristik Anda konsisten (pada dasarnya: jika selalu melebih - lebihkan kualitas negara), maka ini masih akan menghasilkan jawaban yang benar, tetapi dengan percepatan besar dalam praktik.
Gunakan Rollouts (seperti Pencarian Pohon Monte Carlo). Pada dasarnya, alih-alih mempertimbangkan setiap gerakan, jalankan beberapa ribu game simulasi antara pemain yang bertindak secara acak (ini lebih cepat daripada mempertimbangkan semua gerakan yang mungkin). Tetapkan nilai untuk negara yang setara dengan tingkat kemenangan rata-rata game mulai dari itu. Ini mungkin tidak menghasilkan jawaban yang benar, tetapi dalam beberapa jenis permainan, itu berkinerja andal. Ini sering digunakan sebagai perpanjangan dari teknik yang lebih tepat, daripada digunakan sendiri.
A * sepertinya tidak cocok dengan konteks permainan dua pemain seperti algoritma lainnya? Catatan tentang MCTS: implementasi tipikal tidak "mempertimbangkan semua gerakan ke kedalaman yang tetap" dan kemudian memulai peluncuran; sebagai gantinya, implementasi tipikal secara dinamis, secara bertahap menumbuhkan pohon pencarian pohon, menumbuhkannya lebih banyak di bagian yang lebih menjanjikan (bagian di mana banyak peluncuran didorong oleh strategi Seleksi), menanamnya lebih sedikit di bagian yang kurang menjanjikan.
Dennis Soemers
1
@JohnDoucette mengapa Anda berkata "Tidak satu pun dari algoritma ini praktis untuk pekerjaan modern, tetapi mereka adalah tempat yang baik untuk memulai secara pedagogis." Dalam kasus MCTS, tampaknya sangat sesuai untuk pekerjaan modern bahkan untuk pencarian pemain tunggal ketika transisi ke keadaan berikutnya diberi status dan tindakan didefinisikan dengan baik. Apakah kamu setuju?
Miguel Saraiva
1
@MiguelSaraiva Dengan sendirinya, MCTS bukanlah sesuatu yang biasanya Anda gunakan untuk aplikasi modern. Dikombinasikan dengan sesuatu seperti DNN untuk memberikan heuristik yang dipelajari akan sangat bagus.
John Doucette
1
@JohnDoucette "MCTS bukanlah sesuatu yang biasanya Anda gunakan untuk aplikasi modern". Pertama-tama, "modernitas" yang Anda rujuk memiliki terobosan besar pada 2016 (MCTS + DNN) dan sepertinya Anda menyiratkan bahwa segala sesuatu dari sebelum itu sudah usang (jelas salah). Bahkan, mungkin bahkan lebih masuk akal untuk mengatakan bahwa MCTS biasanya tidak digunakan karena sebaliknya: itu TERLALU maju: Ada banyak aplikasi dalam industri yang benar-benar usang dan dapat DIPERBARUI ke MCTS. Bagi banyak MCTS + DNN ini hanya mimpi yang jauh karena pra-pelatihan cukup banyak terbayangkan.
Johan
1
@ Johan Kedengarannya benar bagi saya untuk aplikasi industri , tetapi pertanyaannya adalah tentang "permainan papan seperti catur". Untuk masalah mainan semacam itu, saya pikir MCTS bukan pendekatan modern yang tepat. Pasti ada banyak masalah dunia nyata di mana itu akan menjadi peningkatan besar pada sistem yang ada dikerahkan.
John Doucette
6
NB Alasan mengapa saya hanya memilih tiga algoritma ini adalah karena waktu yang saya miliki dalam memahami mereka. Dari sedikit riset, saya menemukan bahwa algoritma ini pada dasarnya terjalin ke dalam algoritma minimax. Jadi jika saya bisa mengerti satu maka dua lainnya akan jatuh ke tempatnya.
Dengan konteks ini, saya akan merekomendasikan memulai dengan Minimax . Dari ketiga algoritma, Minimax adalah yang paling mudah dipahami.
Alpha-Beta , seperti yang disebutkan orang lain dalam jawaban lain, adalah peningkatan ketat di atas Minimax. Minimax pada dasarnya adalah bagian dari implementasi Alpha-Beta, dan pemahaman yang baik tentang Alpha-Beta memerlukan dimulai dengan pemahaman yang baik tentang Minimax pula. Jika Anda memiliki waktu yang tersisa setelah memahami dan mengimplementasikan Minimax, saya akan merekomendasikan pindah ke Alpha-Beta sesudahnya dan membangunnya di atas Minimax. Memulai dengan Alpha-Beta jika Anda belum mengerti Minimax tidak terlalu masuk akal.
Pencarian Pohon Monte-Carlo mungkin sedikit lebih maju dan lebih rumit untuk benar-benar, sangat memahami. Dalam dekade terakhir atau lebih, MCTS benar-benar telah tumbuh menjadi jauh lebih populer daripada dua lainnya, jadi dari sudut pandang itu memahami MCTS mungkin lebih "berguna".
Koneksi antara Minimax dan MCTS kurang langsung / jelas daripada koneksi antara Minimax dan Alpha-Beta, tetapi masih ada koneksi setidaknya pada tingkat konseptual. Saya berpendapat bahwa memiliki pemahaman yang baik tentang Minimax pertama masih bermanfaat sebelum menyelam ke MCTS ; khususnya, memahami Minimax dan kelemahannya / titik lemahnya dapat memberikan konteks yang bermanfaat / membantu Anda memahami mengapa MCTS menjadi "perlu" / populer.
Untuk menyimpulkan, menurut pendapat saya:
Alpha-Beta benar-benar lebih baik daripada Minimax, tetapi juga sangat terkait / dibangun di atas Minimax; jadi, mulailah dengan Minimax, pilih Alpha-Beta sesudahnya jika waktu mengizinkan
MCTS memiliki kekuatan / kelemahan yang berbeda, seringkali lebih baik daripada Alpha-Beta dalam masalah "modern" (tetapi tidak selalu), pemahaman yang baik tentang Minimax kemungkinan akan bermanfaat sebelum mulai terjun ke MCTS
Apakah ada algoritma lain yang menurut Anda juga bisa saya gunakan? Itu seperti tingkat pemangkasan alfa beta
Joey
@ Joey Hmm tidak, tidak juga. Minimax adalah titik awal yang sangat alami, saya akan sangat menyarankan jika Anda baru memulai. Itu pada dasarnya algoritma pertama yang dikembangkan untuk game seperti catur / catur / tic tac toe / apa pun. Setelah itu, ratusan atau bahkan ribuan perbaikan dikembangkan di atasnya, banyak di antaranya mungkin dapat Anda temukan di chessprogramming.wikispaces.com/Search . Alpha-Beta adalah perangkat tambahan paling alami untuk dilihat di atas Minimax.
Dennis Soemers
@ Joey Monte-Carlo Tree Search sedikit berbeda (tidak harus menggunakan Minimax), menarik, menyenangkan, populer, dan sangat relevan dalam AI "modern". Namun, fondasi itu penting, saya tidak akan merekomendasikan memulai dengan MCTS segera jika Anda belum memahami Minimax + Alpha-Beta, meskipun secara teknis dimungkinkan.
Dennis Soemers
Terima kasih untuk situs itu. Banyak sekali pengetahuan yang sekarang bisa saya baca. Cara tersulit dalam mempelajari hal-hal baru adalah menemukan bahan yang tepat untuk membantu Anda memahami. Jadi sekali lagi terima kasih untuk situsnya
Joey
@ Joey, saya tidak yakin 100% apakah pemrograman catur adalah situs termudah untuk dipelajari (dan tampaknya ada pemberitahuan menakutkan di bagian atas bahwa situs tersebut mungkin akan menghilang pada akhir Juli). Jika saya ingat dengan benar, banyak deskripsi agak pendek / mungkin tidak mudah dimengerti jika Anda seorang pemula di bidang ini. Setidaknya itu akan menjadi kumpulan nama yang bagus dan komprehensif dari semua jenis algoritme / peningkatan, dan Anda dapat mencoba mencari sumber asli atau google semua nama itu untuk info lebih rinci di tempat lain.
Dennis Soemers
1
Jika Anda harus memilih antara pemangkasan Minimax dan Alpha-Beta, Anda harus memilih Alpha-beta. Ini lebih efisien dan cepat karena dapat memangkas sebagian besar pohon eksplorasi Anda. Tetapi Anda perlu memesan tindakan dari yang terbaik ke yang terburuk tergantung pada sudut pandang maksimal atau minimum, sehingga algoritme dapat dengan cepat disadari jika diperlukan eksplorasi.
Dengan konteks ini, saya akan merekomendasikan memulai dengan Minimax . Dari ketiga algoritma, Minimax adalah yang paling mudah dipahami.
Alpha-Beta , seperti yang disebutkan orang lain dalam jawaban lain, adalah peningkatan ketat di atas Minimax. Minimax pada dasarnya adalah bagian dari implementasi Alpha-Beta, dan pemahaman yang baik tentang Alpha-Beta memerlukan dimulai dengan pemahaman yang baik tentang Minimax pula. Jika Anda memiliki waktu yang tersisa setelah memahami dan mengimplementasikan Minimax, saya akan merekomendasikan pindah ke Alpha-Beta sesudahnya dan membangunnya di atas Minimax. Memulai dengan Alpha-Beta jika Anda belum mengerti Minimax tidak terlalu masuk akal.
Pencarian Pohon Monte-Carlo mungkin sedikit lebih maju dan lebih rumit untuk benar-benar, sangat memahami. Dalam dekade terakhir atau lebih, MCTS benar-benar telah tumbuh menjadi jauh lebih populer daripada dua lainnya, jadi dari sudut pandang itu memahami MCTS mungkin lebih "berguna".
Koneksi antara Minimax dan MCTS kurang langsung / jelas daripada koneksi antara Minimax dan Alpha-Beta, tetapi masih ada koneksi setidaknya pada tingkat konseptual. Saya berpendapat bahwa memiliki pemahaman yang baik tentang Minimax pertama masih bermanfaat sebelum menyelam ke MCTS ; khususnya, memahami Minimax dan kelemahannya / titik lemahnya dapat memberikan konteks yang bermanfaat / membantu Anda memahami mengapa MCTS menjadi "perlu" / populer.
Untuk menyimpulkan, menurut pendapat saya:
sumber
Jika Anda harus memilih antara pemangkasan Minimax dan Alpha-Beta, Anda harus memilih Alpha-beta. Ini lebih efisien dan cepat karena dapat memangkas sebagian besar pohon eksplorasi Anda. Tetapi Anda perlu memesan tindakan dari yang terbaik ke yang terburuk tergantung pada sudut pandang maksimal atau minimum, sehingga algoritme dapat dengan cepat disadari jika diperlukan eksplorasi.
sumber