チェスエンジンの記述に使用するパラダイムはどれですか。


9

チェスゲームエンジンを作成する場合、どのプログラミングパラダイム(OOP、手続き型など)を使用し、なぜそれを選択するのでしょうか。チェスエンジンとは、現在のボードを評価し、コンピューターの次の動きを決定するプログラムの部分を意味します。

チェスエンジンを書くのは楽しいかもしれないと思ったので、質問します。それから、関数型プログラミングを学ぶためのプロジェクトとしてそれを使うことができると思いました。次に、いくつかの問題が機能的パラダイムにあまり適していないことに気付きました。それから、これは良い議論の餌になるかもしれないと私は思いました。


1
これは、Cコンパイラを最初から作成するのと同じです。私は車輪を再発明しません。最初に既存のものを研究します。
仕事

10
@仕事:私の目標は結果ではなくプロセスです。エンジンが非常に悪くなったとしても、問題を分析し、それを攻撃する方法を開発するプロセスには価値があると思います。特に、そのプロセスでいくつかの新しいプログラミング手法を学んだ場合はそうです。
2011年

1
幸運を。本当の雇用主はゼロから開発するようにあなたに要求することは決してありませんが、面接中に彼らはあなたが問題をどのように攻撃するかを尋ねるかもしれません。
ジョブ

6
@Jobプログラミング生活を受け入れることの大部分は、物事をコーディングすることです。なぜなら、それらに対する明確な必要性があるからではなく、それができるからです。

1
@マーク、人生を抱いてはいかがですか;)=旅行、言語、演劇、詩、屋外など 私はプログラミングが好きですが、それ自体をやっていないときは、他に1000のことをやる必要があります。
ジョブ

回答:


7

評価は私が知る限り並列化可能な問題ではありませんが、異なるチェーンの評価はそうなので、複数のコアとマルチスレッドを利用するように決定的に書くでしょう。

機能的にするか半機能的にするかは好みの問題です。個人的に私はOOPに行き、例えばC#に存在する関数型プログラミングと並列化のサポートを使用します

余談ですが、チェスエンジンを作成する場合、チェスについて本当に「考える」ことができるエンジンを作成しようとします。ボードの評価を使用してすべての可能な組み合わせをブルートフォースで強制終了することは非常によくできていますが、より思考/ファジーなチェスエンジンを実行することについては、あまり進んでいません。それは挑戦になるでしょう!:)

本当にトリッキーなポジションプレイと強い動き(それらは!または!!とマークされています)を備えたいくつかのゲームを見つけ、それらを使用してエンジンのトレーニングとテストを行います。


2

それはあなたの目標次第だと思います。競争力のある製品を作成しようとしている場合は、最低レベルの評価者で最大の効率を求めます。ここにはビットレベルの並列処理の機会がたくさんあります。ハッシュテーブルの機会もたくさんあります。また、並列処理を利用する機会もあります。次に、より高いレベルでは、おそらくAIに適したシステムが必要なので、それはおそらく関数型プログラミング言語を意味します。明らかに、これらのすべてを実行するのではなく、それらの1つまたは2つを選択し、プロジェクトがより優れたプログラムと競合しないという事実に満足する必要があります。


2

The TurkというチェスエンジンでOOPパラダイムを選択しました。私のチェスエンジンの最初のバージョンは、OOPではなく手続き型で書かれていました。コードブロックが長く、デザインが悪いため、チェスエンジンを改善するのは非常に困難でした。

それは、チェスエンジンの作成中に達成したいことによって異なります。遅延バインディングが遅いため、OOP言語でこれを行うことができないほど強力なチェスエンジンを作成したい場合。プログラミングを学びたいだけでなく、チェスエンジンを書いて楽しみたい場合は、管理された言語とOOPがあなたの友達になります。C#を選択することをお勧めします。これにより、より手続き的な方法でチェスエンジンを作成することもできます。


ELOをどのように評価しますか?Craftyと比較して?

@ThorbjørnRavn Andersen-Cで作成された優れたオープンソースチェスエンジンの1つで、チェスプログラミングに生涯を費やしたRobert M. Hyatt博士が作成しました。残念ながら、elo評価をテストしていません.elo評価をテストする前にすべきことはまだたくさんあるためです。残念ながら、現時点ではこのプロジェクトに費やす時間はありません。いつか続けられることを願っています。
フレッシュブラッド2011年

申し訳ありませんが、実際に再生できると思いました。私の悪い。

@ThorbjørnRavn Andersen-私はそこにいくつかのリリースとビルドする準備ができている最新のリポジトリ変更セットを公開しました。今のところかなり弱いと言いたかっただけです。
Freshblood

2

私は、Forth言語を学ぶ手段として、簡単なチェスプログラムを移植しました。それはこの非常に緊急の問題にぴったりであることがわかり、私は多くを学びました。オープンスタックにより、独自の方法でアルファベータ検索を実装できるようになり、アルゴリズムへの洞察が深まりました。

コアアルゴリズム(アルファベータ深度優先探索、評価)は再帰的で機能的に厳密であるため、関数型プログラミングはチェスプログラムに最適だと考える人もいます。しかし、チェスプログラムは効率性の点で生きて死んでおり、現在の関数型言語のどれもその目的を持っていません。メモリ使用量、マルチスレッド、グローバル状態、およびコード生成を最大限に制御するために、上位100の最先端エンジンはすべて命令型言語(主にC / C ++、次にDelphi)を使用しています。すべての関数型言語は、コアデータ構造に動的メモリ割り当てを使用します。これは、チェスプログラムにとっては死です。

私はまだ誰かが関数型言語を使用してトップ100のチェスエンジンに侵入しようとするのを見たいです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.