1

基本的なチェスのアルゴリズムを理解しようとしています。私はまだ文献を深く読んでいませんが、ここでいくつかのことを考えた後、私の試みは次のとおりです。

1) ピースに重量値を割り当てます (つまり、ビショップはポーンよりも価値があります)。

2) 特定の動きに値を付加するヒューリスティック関数を定義する

3) ミニマックス ツリーを構築して、考えられるすべての動きを格納します。アルファ/ベータ剪定によってツリーを剪定します。

4) ツリーをたどって、各プレイヤーに最適な動きを見つけます

これは、チェス アルゴリズムの核となる「全体像」の考え方ですか? チェスのアルゴリズムについて詳しく説明しているリソースを誰か教えてもらえますか?

4

1 に答える 1

5

以下は、チェスエンジン開発の概要です。

1. ボード表現を作成します。

オブジェクト指向言語では、これはメモリ内のチェス盤を表すオブジェクトになります。この段階でのオプションは次のとおりです。

  1. ビットボード
  2. 0x88
  3. 8x8

Bitboards は、多くの理由で推奨される方法です。

2. 評価関数を作成します。

これは単純にボードを受け取り、引数として評価してスコアを返します。メソッドのシグネチャは次のようになります。

int Evaluate(Board boardPosition, int sideToEvaluateFor);

ここで、各ピースに割り当てられたウェイトを使用します。これは、必要に応じてヒューリスティックを使用する場所でもあります。単純な評価関数は、sideToEvaluateFor のピースの重みを追加し、反対側のピースの重みを減算します。もちろん、このような評価関数は、実際のチェス エンジンには単純すぎます。

3. 検索機能を作成します。

これは、あなたが言ったように、Alpha-Beta プルーニングを使用した MiniMax 検索の行にあるものになります。一般的な検索アルゴリズムのいくつかは次のとおりです。

  1. ネガマックス
  2. ネガスカウト
  3. MTD(f)

基本的な考え方は、特定の最大深度までさまざまなバリエーションをすべて試し、バリエーションによって推奨される動きを選択して、最高のスコアを出すことです。各バリエーションのスコアは、最大深度でのボード位置の評価メソッドによって返されるスコアです。

C# でのチェス エンジンの例については、最近まとめたhttps://github.com/bytefire/shutranjをご覧ください。より優れたオープン ソース エンジンは、C++ で記述されたStockFish ( https://github.com/mcostalba/Stockfish ) です。

于 2013-08-27T15:19:37.227 に答える