Paradigma mana yang digunakan untuk menulis mesin catur?

9

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.

menyodok
sumber
1
Ini mirip dengan menulis kompiler C dari awal. Saya tidak akan menemukan kembali roda. Saya akan mempelajari yang sudah ada dulu.
Pekerjaan
10
@ Pekerjaan: Tujuan saya adalah proses daripada hasilnya. Bahkan jika saya berakhir dengan mesin yang sangat buruk, saya pikir mungkin ada nilai dalam proses menganalisis masalah dan mengembangkan cara untuk menyerangnya, terutama jika saya mempelajari beberapa metode pemrograman baru dalam proses itu.
colek
1
Semoga berhasil. Tidak ada pemberi kerja sejati yang akan meminta Anda untuk mengembangkannya dari awal, tetapi selama wawancara mereka mungkin bertanya bagaimana Anda akan menyerang masalah tersebut.
Pekerjaan
6
@ Job. Sebagian besar merangkul kehidupan pemrograman adalah pengkodean hal-hal bukan karena ada kebutuhan yang pasti untuk mereka, tetapi karena Anda bisa.
1
@Mark, bagaimana dengan merangkul kehidupan;) = perjalanan, bahasa, teater, puisi, di luar rumah, dll? Saya suka pemrograman, tetapi ketika saya tidak melakukannya sendiri, saya memiliki 1000 hal lain yang harus dilakukan.
Ayub

Jawaban:

7

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.

Homde
sumber
2

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.

Omega Centauri
sumber
2

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.

Darah segar
sumber
Bagaimana cara menilai ELO-bijaksana? Dibandingkan dengan Crafty?
@ Thorbjørn Ravn Andersen - Crafty salah satu mesin catur open source superior yang ditulis dalam bahasa C dan oleh Dr. Robert M. Hyatt yang telah menghabiskan hidupnya dalam pemrograman catur. Unfortunality saya belum menguji elo rating karena masih ada banyak hal yang harus dilakukan sebelum pengujian elo rating. Saat ini mengevaluasi hanya mengevaluasi nilai-nilai per potong sehingga memiliki evaluasi yang sangat lemah dan masih saya belum mengimplementasikan semua algoritma yang diperlukan. Unfortunality saya tidak punya waktu untuk dihabiskan untuk proyek ini saat ini. Saya berharap suatu hari akan memungkinkan untuk melanjutkannya.
Freshblood
ah maaf, saya pikir itu benar-benar bisa bermain. Salahku.
@ Thorbjørn Ravn Andersen - Saya telah menerbitkan beberapa rilis di sana dan perubahan repositori terbaru yang siap dibangun. Saya hanya ingin mengatakan itu cukup lemah saat ini.
Freshblood
2

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.

Ian Osgood
sumber