片側に強制ドローがあるかどうかを示すことができるチェスエンジンはありますか?


10

位置がどちらかの側の強制ドローかどうかを示すことができる分析モードを持つチェスエンジンはありますか?

エンジンがドローを検出すると、エンジンが0.0の評価を出力するのが一般的です。しかし、0.0の評価は多くのことを意味します。たとえば、移動するのが白だとすると、0.0の評価は次のことを意味します。

  • どちらのプレイヤーがプレイするかに関係なく、ゲームは確かにドローです(たとえば、不十分なマテリアル)。
  • どちらのプレイヤーもドローを強制できます。どちらのプレイヤーも、対戦相手が完璧にプレーした場合、勝つことを望みません。
  • 白がどのように動くかに関わらず、コンピューターは黒が彼が望むならドローを強制することができると100%確信しています。黒が完璧に演じれば、白は勝つことを期待できません。引き分けが最も可能性の高い結果ですが、より深く検索すると、黒が勝つ可能性があることがわかります。
  • コンピューターは、彼が望むなら、ホワイトがドローを強制できることを100%確信しています。白が完璧に演じれば、黒は勝つことを期待できません。引き分けが最も可能性の高い結果ですが、より深く検索すると、白が勝つ可能性があります。
  • コンピュータはどちらかの側の強制ドローを見つけていませんが、これまでの評価は正確にレベルです。引き分けが最も可能性の高い結果ですが、より深い検索は後で片方の利点を示すことがあります。

ホワイトが勝つ必要がなく、ドローをできる限り確実にしたい場合、これが役立つ場合の例を示すために、評価+0.0と既知の強制ドローで手をプレイすることを好むかもしれません。より高い評価の別の動きが利用可能ですが。

もう1つの例は、勝利が必要な場合(つまり、引き分けが損失と同じくらい悪い場合)、相手に引き分けを強制する機会を与えないように、わずかに否定的な評価で移動を行うことです。これにより、負ける可能性が高くなりますが、勝つ可能性も高くなります。

明らかに、強制ドローが利用可能かどうかを確認することが困難または不可能であるポジションがあります。しかし、エンジンが強制ドローを発表した場合、強制ドローが可能でなければなりません。誤検知は許容されますが、誤検知があってはなりません。

要約すると、私は、一方(または両方のプレーヤー)が強制ドローを利用できるかどうか、特定のポジションについて知りたいのです。位置の数値評価を計算する必要はありませんが、同時にこれも提供する場合、それはおまけです。


6ピースのエンドゲームテーブルのポイントのこの部分を知らないのですか?
Tony Ennis

2
テーブルのベースが役立ちます。0.0のスコアは、最適なプレーでの強制的なドローの特定であることがわかっているためです。しかし、エンジンが任意の開始位置からの強制ドローを見つけた場合、それが(特に)6個を超える場合も含めて、そのことを教えてほしいと思います。たとえば、白が永久チェックを強制できる位置に入った場合、評価関数によると白が必ずしも最善ではない場合でも、エンジンにそのことを知らせたいと思います。
マーク・バイアーズ

実際にこの種の計算を実際に利用できるとしたら、私は興味があります。これは素晴らしい機能です。ストックフィッシュでは、UCI分析の「複数のバリエーション」機能を使用して、評価スコアの順に動きをソートします。強制的なドローは、永続的なチェックまたは行き詰まりの場合、かなりはっきりとリストに表示されますが、時々それは不明確であり、あなたが言うように、深く行く場合、それはドローではないかもしれません。
イブフリーマン

1
しかし、どのように強制されていますか?いわゆる強制ドローの多くの場合、対戦相手はそれでも逸脱することができますが、明らかに悪いポジションを犠牲にすると思います。ホワイトがドローまたはフルルックアップのいずれかを強制できる位置は、強制ドローではなく、有用性を制限します。
RemcoGerlich 2013年

白がルークアップではなくドローを強制できる場合は、それを知りたいと思います。
Mark Byers 2013年

回答:


8

あなたの質問に対する短い答えは「いいえ」です。片側に強制ドローがあるかどうかを確実に示すことができるチェスエンジンはありません。たとえば、このロックされた位置は、明らかに人間の目を引くものです。

ロックされた位置、絶望的なドロー

ただし、評価は0.00ではなく0.17であることに注意してください。Houdiniは0.05も与えます。これはとても重要です。これは、0.00の評価が特定の理由でこれらのプログラムによって予約されていることを示唆しています。基本的に、「等しい」位置であっても、コンピューターはスコアが0.00であるとは決して言わず、代わりに、片側または反対側に微細なエッジを与えます。

だから、その背景で、詳細に行きましょう!第一に、ゲームが位置(つまり、行き詰まり、不十分な材料など)による単なる引き分けである場合、ほとんどのGUIは、「ゲームが引き分けられました」というメッセージ、またはその効果に対する何かをポップアップします。それはあなたがあなたの質問で述べたより複雑なケースを残します。それらのほとんどをカバーするために、別のポジションを紹介します。これは、Morphy-NN 1-0、New Orleans Blindfold Simulからの抜粋です。

モーフィ-NN 1-0、ニューオーリンズの目隠しSimul

現在、Morphyには6歳の仲間がい18.b4+!ます。しかし、もし何らかの形でこれが仲間であることを何とか見逃してしまった場合でも、彼は繰り返し強制ドローを持っていました。コンピューターが表示するバリエーションの数を増やすことで、白がのような動きをした後18.Qxc3+?、ルークと駒を下げていても、白がドローを強制できることを確認できます。ここでも0.00の評価は、コンピューターが永続的なチェックを計算できるという特別な立場であることを示しています。18.Qxc3+? Kxd5ボード上で動きがあった場合、評価は0.00になります。これは、ホワイトの最善の継続はドローを強制することであることを示します。これを怠ると、最高のプレーでゲームが失われます。


つまり、既存のエンジンでは、ポジションがドローであると正確に言うことはできません。ただし、0.00の評価は特別であり、それがメインスコアまたはバリエーションのスコアとして表示された場合、その特定のラインでドローが強制されている可能性があります。確認する最も簡単な方法は、遊び心のある「スペースバー分析」と呼ばれます。ユーザーがスペースバーを何度も何度も叩いて、コンピューターに推奨される最上位の動きを強制するときです。最終的には、人間だけでなく機械にとっても明らかな位置に到達します。


そして最後に、「軽蔑」についてのあなたのポイントに取り組むために

もう1つの例は、勝利が必要な場合(つまり、引き分けが損失と同じくらい悪い場合)、相手に引き分けを強制する機会を与えないように、わずかに否定的な評価で移動を行うことです。これにより、負ける可能性が高くなりますが、勝つ可能性も高くなります。

これは、チェスプログラマの間で軽蔑と呼ばれています。ほとんどのエンジンでは、設定で軽蔑のレベルを設定できます。肯定的な軽蔑の設定(100は通常、分析には妥当なレベルです)は、ドローを避けるためにエンジンをかなり頑張る(ポーンの価値がある)ように指示します。負の設定では、エンジンは強制的なドローを求めます(つまり、不十分な材料、行き詰まり、または永続的)。


これはWes Freemanの質問へのコメントとほぼ同じアイデアであり、彼が説明するのと同じように人間による入力が必要です-「強制ドローがかなり明らかに[時々]リストに表示されますが、時にはあまり明確ではありません」-あなたの答えは人間が貢献する「スペースバー分析」。これが、私の回答で評価関数を微調整することをお勧めする理由です。エンジン自体が実際に強制ドローを探し出し、それらが決定的に存在する場合にそれを通知できるようにするためです。それがアプローチ間の唯一の実質的な違いのようです。
ETD

@EdDean同意する。見つけるのが最も難しいドローは、エンドゲームに勝つことができないものですが、一方の側が永遠に勝つために押すことができます。それとは別に、エンジンの評価関数を変更することも1つの方法ですが、妥当なタイムスケールで実行できるものではない可能性が高いです。現在、軽蔑の設定をいじってみることは可能ですが、あなたが提案するようにエンジンを再プログラミングすることと同じことはしません。人間が編集できる設定は、現在のエンジンではかなり制限されています。
アンドリュー

その軽蔑の設定はきちんとしている-それに気づかなかった。
イブフリーマン

2
ちなみに、0.00が常に強制ドローを示しているとは思いません。序盤の早い段階でも時折それが見られます。それは単に、現在の位置と資料が与えられれば、それはおそらく偶然であり、評価はたまたま0.00であることを意味していると思います。
イブフリーマン

3
面白い。干し魚では絶対にありません。開始位置を数秒間分析するだけで、たくさんの0.00スコアが返されます。
イブフリーマン

4

エンジンが特定のポイントで、強制的なメイトがいくらか離れたところに移動できるのと同じように、エンジンがメイトまでの残りの深さですべてを完全に見ることができる十分なラインがあるため、チェスのゲームにはジャンクがあり、エンジンは、プレーの限られた可能性を完全に調査できるのと同じ理由で強制ドローを確認します。

さらに、エンジンの評価関数を微調整して、そのような強制的な引き分けにつながる動きを探して優先させることは簡単です。たとえば、メイトの達成には、通常、エンジンの評価アルゴリズムの他のすべての数値要素に比べて大きな値が与えられるのと同じです。エンジンのプレーを最終的な目的に導くために、私が考えている種類のドローの1つを達成するために、そのような巨大な数値を代わりに与えることができると考えます。

たとえば、対戦相手が+1000000として交尾するための材料が不十分な位置を自動的に評価します。次に、エンジンが対戦相手の素材を強制的にオフにするオプションを見つけた場合、それを通知します。また、評価アルゴリズムを微調整して、3回の繰り返しを通常の0ではなく+1000000として評価します。次に、(永続的なチェックシナリオのように)強制的な繰り返しがある場合、エンジンはそれを気にかけてそれを通知します。同様に、テーブルベースのドローに強制的に到達できる場合は、+ 1000000を与えます。

また、エンジンがメイトを通知しない場合と同様に、ドローが実際に強制されていることが完全に確実である場合にのみ、エンジンがこれらの評価を与えるようにすることもできます(こことそこの間のツリーを完全にチェックできたため)。確かです。したがって、誤検知は発生しませんが、当然のことながら、多くの誤検知はありますが、これは慎重に/必要に応じて質問で許可します。


私は、軽蔑の要因とそれらが剪定する方法のために、どのようなエンジンもこの「箱から出して」そのままで機能するとは思いません。基本的に、ドローが見つかった場合、マテリアルを獲得したラインはすべて除外されます。したがって、たとえば、キングをチェックすることは、フリールークをキャプチャするよりも望ましいでしょう。そこので、私は長い答えを投稿し検討しているしている、これを行うために、現在のエンジンを使用する方法は、私はあまりにも多くの準備の秘密をばらしたくありません。;)
アンドリュー

「箱から出して」私が説明した方法でエンジンが機能することはありません。それは、勝利を求めるように設計されているためです。同じ理由で、自殺チェスなどの通常のエンジンプレイを行うには、微調整を行う必要があります。評価関数を変更しました。軽蔑の要素は、必要に応じて私が提案したものと一緒に微調整/無効化できますか?私の主なポイントは、Markが望むように機能するように、既存のエンジンを(かなり簡単な方法で)再利用できると思います。したがって、少なくとも現時点では、これを「現在のエンジンを使用する」方法と見なしています。私の心はいつでも変えることができます。:)
ETD
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.