チェスの位置を正確に評価する方法は何ですか?


12

私はしばらくの間、MinimaxのようなコンピューターチェスAIアルゴリズムに興味を持っていました(そして、ある時点で動作する機会を得ました)。これらのアルゴリズムのコアコンポーネントは、何であるかを決定するいわゆる評価関数であるためです。良いボード構成、そして悪いものは何ですか

言い換えると、チェス盤の構成を前提として、それが自分にとって有利であるとどのように判断し、どの程度の自信を持っていますか?

例えば:

  • あなたがセンターを所有しているなら、これはかなり有利です。
  • 対戦相手よりも多くの駒がある場合、これはかなり有利です。
  • あなたが女王を失ったなら、これはむしろ好ましくありません。
  • あなたが昇進に近いポーンを持っている場合、これは有利です。
  • ...

作成する方法についていくつかのアドバイスをお願いしたいと思い、私はとても良い一般的なチェスゲームに関するいくつかの専門知識に基づいて、評価関数を。そして、可能であれば、ある程度の好意度(1は非常に好ましくない、100は非常に好ましいなど)。

結局のところ、可能性のツリーを特定の深さまで調べ、次の移動に最も適した構成を(将来のいくつかの移動を考慮に入れて)何に基づいて評価するアルゴリズムを作成できるようにすることです。プレイヤーにとって有利であり、対戦相手にとっては有利ではありません。しかし、良い評価関数がなければ、アルゴリズムは何もありません。


この質問はStackOverflowでうまくいくと思います。Chess AIについてはすでに多くの質問があります
xaisoft

3
私は以前にそれをSOに投稿することを考えていましたが、建設的ではないか、実際の質問ではないので、それはクローズされるとほぼ確信しています。コード自体をもっと強調する必要があるかもしれませんが、評価関数については、コードやアルゴリズムについてではなく、チェスについての知識が必要だと思います。
Charles Menguy

正確さ。完全に正確な唯一の方法は、勝つか負けるか引き分けるかです。
エドウィナオリバー

回答:



5

@Eve Freemanの答えに加えて、私は世界で最高のコンピューターエンジンであるStockfishが特定のポジションをどのように評価するかを調べることをお勧めします。ソースコードはオープンで、あなたは自由のためにそれを行うことができます。私は、あなたが探している評価関数のファイルがあると考え、この1


5

私はこの答えに少し遅れているように感じますが、私はエンジンを製造している最中です。ソースコードはPythonで作成されており(知らなくてもかなり読みやすい)、読みたい場合はこちらから入手できます。現在アクティブな「ヒューリスティック」のリスト(投稿時):

  • より開発された(反対側に近い)ピースの方が良い
  • プロモーションに近いポーンは良いです
  • キングは、ゲームのフェーズ(オープニング、ミドルゲーム、エンドゲーム)に基づいて個別に採点されます
  • プレイヤーが両方の司教を持っている場合、それはボーナスを受け取ります
  • プレイヤーがキャッスルした場合、ボーナスを受け取ります
  • 孤立したポーン(周りに何もないポーン)は良くない
  • ポーンが2重になる(同じファイルに2つのポーンがあり、間にギャップがない)のは適切ではありません。
  • 8つのポーンすべてを持つことは必ずしも良いことではなく、罰せられます(ボードが乱雑になり、邪魔になります)。
  • 使用されるこの素晴らしい評価関数を見てください
  • ビショップと同じ色の正方形にポーンが多いビショップにはペナルティが課されます(混雑した状況ではそれほど良くありません)。
  • まだ実装されていませんが、計画されています:より混雑した状況で騎士はボーナスを受け取ります

これらの点の1つで、ゲームの「フェーズ」(たとえば、オープニング、ミドルゲーム、エンドゲーム)について説明しましたが、それをエンジンに含めたい場合は、おそらく私と同じ問題が発生します。それらを区切る明確な線。ゲームのフェーズを決定する私の関数は、いくつかのことを使用します。

  • ボード上の素材の量(いずれかのピースが殺されるとすぐに、それはゲームがオープニングではないとマークします)
  • 動きの数(6未満の完全な動きが開口部です)
  • クイーンの動き(両方のクイーンが動かされた場合、ゲームをミドルゲームとしてマークします)

この回答は長く、遅れてトピック外だったかもしれませんが、とにかくそれが役に立ったと思います。


4

驚いたことに、評価関数がランダムな場合、Minimaxエンジンはかなりうまく機能することがわかりました。これはビール効果として知られており、より多くのオプションを与え、相手にはより少ないオプションを与えるポジションが一般的に有利であるという原則に起因します。ランダム評価を一貫して効率的に生成する1つの合理的な方法は、(ゲームの開始時にランダムに選択された係数を使用して)位置のZobristハッシュを生成し、ハッシュから直接ランダム評価を導出することです。

スケールの反対側で、AlphaZeroとLeelaは、大規模なニューラルネットワークを使用して、検索された各位置の非常に高度な評価を行います。このネットワークが効果的に実装する機能を人間の言葉で説明することは実際的ではありませんが、ストックフィッシュの評価機能よりも紛れもなく効果的です。AlphaZeroの研究論文は、このアプローチがMinimaxではなくMonte-Carlo Tree Searchで最適に機能することを示しています。

一方、人間のプレーヤーやコメンテーターが位置のニュアンスを理解できるように分析エンジンを開発したい場合は、確立された材料値と位置理論を使用して従来の評価関数を実装することは価値があります。EdSchröderのInside Rebelが好例を示し、Mephistoのチェスコンピュータのいくつかで使用されている定評のあるエンジンの主要な設計機能を文書化しています。ある程度の機械学習を使用して、評価関数の各要素の相対的な重要性を判断し、これらの要素を個別に分割してGUIで表示することもできます。


3

チェスプログラマーは、評価関数を設計するときに強力なチェスプレーヤーの知識に依存する傾向はなく、代わりにさまざまな要素を試し、他のエンジンと比較してゲームでテストし、何を維持するかを決定します。ラリー・カウフマンは、人間の理解とは何かについての彼の見解についてかなり話しますが、ラジリッヒとデイリーはどちらも非常に結果指向であり、カウフマンのアイデアを大いに取り入れていなかったようです。

私が興味深いと思った記事の1つは、RybkaとFruitの評価関数を比較するZach Wegnerでした。Rybkaが一歩前進した可能性がある分野の1つは、ピースの特定の組み合わせに基づいた材料不均衡テーブルの組み込みでした。カウフマンもこれに関する記事を書いた。

http://www.top-5000.nl/ZW_Rybka_Fruit.pdf http://danheisman.home.comcast.net/~danheisman/Articles/evaluation_of_material_imbalance.htm


0

このリンクは、私にとって最良の出発点です。私はこれを自分のチェスプログラムの出発点として使用しています。理解しやすく、便利でもあります。

https://chessprogramming.wikispaces.com/Simplified+evaluation+function


2
リンクの内容を簡単に展開していただけませんか?
Pablo S. Ocal 2015年

Wikispacesサイトは現在廃止されています。新しい家への正しいリンク:chessprogramming.org/Simplified_Evaluation_Function
Chromatix

0

簡単に言えば、チェスエンジンのパラメーターを調整する標準的なアプローチは次のとおりです。

  1. パラメータを定義する
  2. パラメータに公称(開始)値を与える
  3. エンジンを実行してパフォーマンスを確認する
  4. パラメータ値を調整して、パフォーマンスを向上させます

次に、パフォーマンスの目標に達するまでステップ3と4を繰り返します。

これを行うための通常のアプローチは、エンジントーナメントでエンジンが向かい合う実験室を設置することです。エンジンが両方の色を再生する複数のゲームが使用されます。関心のある主なトーナメントには、パラメーター値セットBの同じエンジンに対して、パラメーター値セットAのエンジンを実行することが含まれます。

ご想像のとおり、このアプローチの結果は次のものに大きく依存しています。

  • 選択されたパラメーター
  • パラメータの指定方法
  • テスト中のパラメーター値の変化
  • エンジンの実行方法(限られた深さ、限られた時間、感度など)

このアプローチも多くの時間を消費ます。

2010年に、遺伝的アルゴリズム技術を使用してa)パラメーターを指定し、b)パラメーター値を調整することにより、より最近の(そして革新的なアプローチ)が開発されました。調査官は最初に、一連のグランドマスターゲームに対して初期の公称パラメーター値セットでエンジンを実行し、「ベストムーブ」を効果的に選択できるかどうかを確認しました。「ベストムーブ」とは、グランドマスターが行ったムーブ*と定義されています。失敗した場所はどこにでも記録されました。次に、別のパラメーター値セットが試され、前の実行に対する相対的なパフォーマンスが決定されました。

次に、「適格者」の生存の遺伝的アルゴリズムの原理を使用して、パラメーター値組み合わせるためのプログラムによるアプローチを試みました。ここで、「fittest」とは、理想に最も近い出力を生成するものを意味します。(それはまた、「最小二乗適合」回帰の統計的手法、つまり、近似の品質を判断するために使用される手法への駄洒落でもあります。)

GMをかなりよく模倣できるエンジンパラメータが見つかった後でのみ、実際のエンジントーナメントフェーズが始まります。このフェーズでは、さまざまなパラメーター値セットが、今度は直接、再び互いにピットインします。遺伝的アルゴリズムの改善手法を適用して、エンジンの世代を連続的に改善します。

この研究プロジェクトでは、36個のパラメーターが使用されました。これには、ピースのすべてのマテリアル値と、後方ポーン、弱い四角形、ビショップペアなど、より一般的な戦略的評価基準の多くが含まれます。しかし、研究者たちは、ピースの種類ごとに「キングプレッシャー」、「機動性」の値、キングに隣接するファイルをルーク、セミオープンファイルをルーク、aのキングを攻撃するルークなど、いくつかの新しいパラメーターを追加しました-/ b- / g- / h-file、渡されたポーンと防御キングとの分離など。

残念ながら、研究者達はどのようにしてこの一連のパラメーターを思いついたのか、そして彼らがどの代替パラメーターをテストして拒否したのかについては詳しく述べていません。はるかに大きなセットから開始し、(試行錯誤によって)パフォーマンスに最も大きな影響を与えたものと、重要ではないものまたは派生したもののどちらかが決定されたため、削除できると判断したと仮定するのが妥当でしょう。

これが役立つと思われる場合は、こちらで調査結果を確認できます。

*研究者が使用したアプローチのフェーズに関する注意事項が整理されています。ジョンナンは、「チェスの動き理解するための入門」で、「...強力なグランドマスター間の激しい戦いのゲーム...」を選択して、彼のテーマを説明しました。彼は次に追加します:

この本のゲームを飾る疑問符の数を見て、読者はかなり驚かれるかもしれません。確かに、30種類のゲームを選択するだけで、サウンドゲームを簡単に見つけることができたはずです。しかし、そうではなかったことは間違いありません。...ほぼすべての複雑で苦労したゲームの欠陥を見つけることは可能です...私のプレイがほぼ完全に正確であると感じたことは一度もないので、私は個人的にこれらの啓示を悩ませることはありません。しかし、人間が演じるチェスは、以前考えられていたよりも正確ではないことを認めるのが難しい人もいます。

ナン博士が指摘する点は、研究者がグランドマスターの動きを模倣するように要求することによってエンジンパラメータを設定する最初のアプローチには、人間の遊びに欠陥があるために欠陥がある可能性があることを示唆しています。実際、エンジンはすでに人間よりも優れていることが十分に確立されてます。

したがって、初期パラメータを設定するためのより良いアプローチは、新しいエンジンを既存の優れたエンジンと照合することです。


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