Repositori ini berisi implementasi mesin catur menggunakan Minimax , pemangkasan Alpha-Beta dan algoritma pencarian Quiescence . Notebook Jupyter di dalam Docker Container digunakan untuk pengkodean. Semua Notebook Jupyter juga tersedia dalam bentuk docker image.
Lihat makalah proyek untuk melihat analisis terperinci.
docker pull codewithnk/chess-engine-using-python:latest
docker run -p 8888:8888 -v $( pwd ) codewithnk/chess-engine-using-python:latest
Inti dari Catur bermain Catur di minmax. Minmax biasanya mengasosiasikan bidak Hitam dengan MAX, dan bidak putih dengan MIN, dan selalu mengevaluasi dari sudut pandang putih.
Algoritma Minmax merupakan algoritma Adversarial Search dalam teori Game. Ini menggunakan pohon permainan dan mencakup dua pemain MIN dan MAX. Kedua pemain mencoba membatalkan tindakan pemain lain. Max mencoba memaksimalkan hasil sedangkan MIN mencoba meminimalkan hasil. Kedua pemain bermain bergantian dengan asumsi keduanya bermain maksimal. Permainan optimal berarti kedua pemain bermain sesuai aturan, yaitu MIN meminimalkan hasil dan MAX memaksimalkan hasil.
Algoritma minmax menggunakan pendekatan Depth First Search untuk mencari hasilnya. Selain itu, ini juga menggunakan penelusuran mundur dan rekursi. Algoritma akan melintasi hingga simpul terminal dan kemudian akan mundur sambil membandingkan semua nilai anak. Ini akan memilih nilai minimum atau maksimum, berdasarkan giliran siapa. Ini kemudian akan menyebarkan nilainya kembali ke induknya. Ia menggunakan fungsi evaluasi statis untuk menentukan nilai di setiap node daun. Ini memanfaatkan Zero-Sum Game.
Mesin Catur menggunakan Minmax
Minmax menggunakan Depth First Search (DFS) pada Game Tree, maka kompleksitas waktu dari algoritma minmax adalah O(b**m) , dimana b adalah faktor percabangan dari game-tree, dan m adalah kedalaman maksimum dari pohon tersebut.
Kompleksitas ruang pada algoritma minmax juga mirip dengan DFS yaitu O(bm) , dimana b adalah faktor percabangan pohon permainan, dan m adalah kedalaman maksimum pohon.
Algoritma Minmax Selesai. Ia pasti akan menemukan solusi, jika ada, di pohon pencarian terbatas.
Algoritma minmax optimal jika kedua lawan bermain maksimal.
Algoritma minmax dapat dioptimalkan dengan memangkas beberapa cabang. Cabang yang dipangkas adalah cabang yang tidak mempengaruhi hasil. Ini akan meningkatkan kompleksitas waktu. Versi minmax ini dikenal sebagai minmax dengan pemangkasan alfa-beta. Ini juga disebut sebagai algoritma alfa-beta.
Pada Alpha-Beta Pruning terdapat dua nilai yaitu Alpha dan Beta. Berikut adalah beberapa hal yang perlu dipertimbangkan tentang alfa dan beta:
Saat melakukan backtracking, hanya nilai simpul yang diteruskan ke induk, bukan nilai alfa dan beta.
Syarat pemangkasan alfa-beta:
α >= β
Efektivitas algoritma alfa-beta sangat bergantung pada urutan traversal. Ini memainkan peran penting dalam Kompleksitas Ruang dan Waktu.
Dalam beberapa kasus, tidak ada node atau subpohon yang dipangkas dari Game Tree. Dalam hal ini, langkah terbaik terjadi di subpohon kanan Game Tree. Hal ini akan mengakibatkan peningkatan Kompleksitas Waktu.
Dalam hal ini, jumlah maksimum node dan subpohon dipangkas. Pergerakan terbaik terjadi di subpohon kiri. Ini akan mengurangi Kompleksitas Ruang dan Waktu.
Mesin Catur menggunakan Pemangkasan Alfa-Beta
Algoritma Alpha Beta, juga menggunakan Depth First Search (DFS) pada Game Tree.
Algoritma Alpha-Beta Selesai. Ia pasti akan menemukan solusi, jika ada, di pohon pencarian terbatas.
Algoritma Alpha-Beta optimal jika kedua lawan bermain maksimal.
Pencarian Tenang adalah modifikasi selain pemangkasan alfa-beta dengan min-maks. Quietness artinya tenang. Pencarian ini hanya mengevaluasi gerakan diam saja. Dengan kata lain, setelah kedalaman tertentu, ia hanya menggunakan gerakan penangkapan untuk menghitung gerakan selanjutnya. Pencarian diam dapat menghindari efek cakrawala.
Efek cakrawala terjadi ketika kita hanya mencari pada kedalaman tertentu, namun bisa saja terjadi jika kita melihat satu tingkat lebih dalam, maka pergerakannya mungkin mendapat poin lebih sedikit. Pencarian diam hanya menggunakan gerakan menangkap untuk mencegah hal ini. Pencarian diam juga mengurangi faktor percabangan pada tingkat yang berbeda, sehingga menghasilkan algoritma yang cepat.
Algoritma Quiescence Search, juga menggunakan Depth First Search (DFS) pada Game Tree.
Algoritma Pencarian Diam Selesai. Ia pasti akan menemukan solusi, jika ada, di pohon pencarian terbatas.
Algoritma Quiescence Search optimal jika kedua lawan bermain maksimal.