Jika Anda akan menulis mesin permainan catur, paradigma pemrograman apa yang akan Anda gunakan (OOP, prosedural, dll) dan mengapa Anda memilihnya? Dengan mesin catur, maksud saya bagian dari program yang mengevaluasi papan saat ini dan memutuskan langkah selanjutnya komputer.
Saya bertanya karena saya pikir mungkin menyenangkan untuk menulis mesin catur. Kemudian saya sadar bahwa saya dapat menggunakannya sebagai proyek untuk belajar pemrograman fungsional. Kemudian saya sadar bahwa beberapa masalah tidak cocok dengan paradigma fungsional. Kemudian terlintas dalam benak saya bahwa ini mungkin makanan diskusi yang bagus.
Jawaban:
Evaluasi bukanlah masalah yang dapat diparalelkan sejauh yang saya tahu tetapi mengevaluasi rantai yang berbeda adalah, jadi saya pasti akan menulisnya untuk menggunakan banyak core dan multithreading.
Apakah Anda menjadi fungsional atau semi-fungsional adalah masalah selera. Secara pribadi saya akan pergi OOP dan menggunakan dukungan untuk pemrograman fungsional dan paralelisasi yang ada di misalnya C #
Pada sidenote, jika saya menulis mesin catur, saya akan mencoba membuatnya yang benar-benar bisa "berpikir" tentang catur. Menggunakan evaluasi papan untuk memaksa semua kombinasi yang mungkin telah dilakukan sampai mati dan sangat baik, tetapi belum ada banyak kemajuan afaik dalam melakukan mesin catur yang lebih berpikir / fuzzy. Itu akan jadi tantangan! :)
Temukan beberapa game dengan permainan posisi yang sangat rumit dan gerakan kuat (ditandai! Atau !!) dan gunakan untuk melatih dan menguji mesin Anda.
sumber
Saya kira itu tergantung pada tujuan Anda, yang saya ambil sangat didaktik. Jika Anda mencoba untuk menulis produk yang kompetitif, Anda ingin efisiensi maksimum di evaluator tingkat terendah. Banyak peluang untuk paralelisme tingkat bit di sini. Juga banyak peluang untuk tabel hash. Juga peluang untuk mengeksploitasi paralelisme. Kemudian pada level yang lebih tinggi, Anda mungkin menginginkan sistem yang bagus untuk AI, jadi itu mungkin berarti pemrograman fungsional. Jelas Anda tidak ingin melakukan semua hal ini, memilih satu atau dua dari mereka, dan puas dengan kenyataan bahwa proyek Anda tidak akan bersaing dengan program yang lebih baik.
sumber
Saya telah memilih paradigma OOP dalam mesin catur saya bernama The Turk . Versi pertama dari mesin catur saya ditulis lebih prosedural daripada OOP. Kemudian saya menemukan kesulitan untuk meningkatkan mesin catur saya karena blok kode yang panjang dan desain yang buruk.
Itu tergantung pada apa yang ingin Anda capai saat menulis mesin catur. Jika Anda ingin membuat mesin catur yang terlalu kuat sehingga bahkan tidak mungkin untuk melakukan ini dalam bahasa OOP karena ikatan lambat lambat. Jika Anda hanya ingin belajar pemrograman dan juga bersenang-senang dengan menulis mesin catur, maka bahasa yang dikelola dan OOP akan menjadi teman Anda. Saya dapat menyarankan Anda untuk memilih C # karena juga dimungkinkan untuk menulis mesin catur secara prosedural.
sumber
Saya porting program catur sederhana sebagai sarana belajar bahasa Forth. Ternyata sangat cocok untuk masalah yang sangat penting ini, dan saya belajar banyak. Tumpukan terbuka memungkinkan saya untuk menerapkan pencarian alfa-beta dengan cara yang unik yang memberi saya wawasan yang lebih besar ke dalam algoritma.
Orang akan berpikir bahwa pemrograman fungsional akan bagus untuk program catur, karena algoritma inti (alpha-beta depth-first search, evaluasi) bersifat rekursif dan fungsional ketat. Namun, sebuah program catur hidup dan mati karena efisiensi dan tidak ada tanaman bahasa fungsional saat ini yang memiliki tujuan itu. Seratus mesin canggih semua menggunakan bahasa imperatif (kebanyakan C / C ++, kemudian Delphi) untuk memiliki kontrol maksimum atas penggunaan memori, multi-threading, keadaan global, dan pembuatan kode. Semua bahasa fungsional menggunakan alokasi memori dinamis untuk struktur data inti, yang merupakan kematian bagi program catur.
Saya masih ingin melihat seseorang berusaha masuk ke 100 mesin catur teratas menggunakan bahasa fungsional.
sumber