チェスの時間差を実装する


10

私は、アルファベータ剪定アルゴリズムと、次の機能を使用して位置を評価する評価関数を使用するチェスプログラムを開発しています。つまり、材料、王の安全、移動性、ポーン構造、トラップされた駒などです。私の評価関数はから派生

fp=w1素材+w2王の安全+w可動性+w4ポーン構造+w5閉じ込められた部分

ここで、は各フィーチャに割り当てられた重みです。この時点で、時間差を使用して評価関数の重みを調整します。エージェントはそれ自体に対してプレーし、その過程でその環境からトレーニングデータを収集します(強化学習の形式です)。これをJavaで実装する方法についての洞察を得るために、いくつかの本や記事を読みましたが、それらは実用的ではなく理論的なようです。以前のゲームに基づいて評価関数の重みを自動的に調整する方法の詳細な説明と疑似コードが必要です。w

回答:


4

このトピックに関心のある方は、TDLとディープラーニングを組み合わせた論文をご覧になることをお勧めします。

大まかに言えば、エンジンが互いにゲームをプレイするようにする必要があります。各ポジションのミニマックス評価を記録します。ゲームの最後に、チェスの場合は{0,1、-1}の報酬を受け取ります。次に、パラメータを次のように調整する必要があります。

ここに画像の説明を入力してください

この方程式は、時間差によって重みを調整する必要があることを示しています。完璧な評価があれば、時間差は常にゼロになるため、調整を行う必要はありません。

次に、新しいパラメーターを使用して新しいゲームをプレイする必要があります。できるだけ多くのゲームができるまで、または収束したと思うまで繰り返します。

いくつかの発言:

  1. 私が引用する論文は割引係数を適用しています。ニューラルネットワークの逆比例アルゴリズムのために行われます。あなたはそれを必要としません。
  2. 最適な学習率(方程式のアルファ)を​​試す必要があります。大きすぎると学習が不安定になり、少なすぎると収束に時間がかかります。0.70を使用している人を見てきました。私が引用した論文は1.0を使用した。

こんにちは、私はあなたの答えが大好きですが、紙へのリンクを修正していただけませんか?
padura

@padura修正されました。読んでください。これはデータサイエンスにとっては良い読み物でした。
HelloWorld 2016

(+1)すばらしい答え。紙も
気に入り

それは素晴らしい記事です。自分のチェスエンジンで作業していたときにこれを知らなかったのは残念です;)このテクニックと組み合わせて改善できるかどうか疑問に思います:bjmc.lu.lv/fileadmin/user_upload/lu_portal/ projekti / bjmc /…
padura 2016

2

最初の発言、あなたは自分が何に興味を持っているのかを知るために「ウォーゲーム」を見る必要があります。

必要なのは、f(p)が位置の強度に可能な限り近いようなf(p)です。

遺伝的アルゴリズムを使用する非常に簡単な解決策は、異なる重みで10000人のプレーヤーをセットアップし、どちらが勝つかを確認することです。次に、勝者の上位1000の体重を維持し、10回コピーし、わずかに変更して体重空間を調査し、シミュレーションを再度実行します。これは標準的なGAであり、関数形式を考えると、それに最適な係数は何ですか。

別の解決策は、位置を抽出することです。そのため、「(材料、キングセーフティ、機動性、ポーン構造、トラップされたピース)->位置の良さ」というテーブルがあります。または既知の一致、利用可能なツリーの深さ、5つの要因の1つが改善するツリーの下の移動数次に、f(p)、回帰、svmのさまざまな関数形式を試すことができます。


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