0

この種の質問が以前に尋ねられ、回答されたかどうかはわかりませんが、私の検索に関する限り、まだ回答がありません.

まず、私のシナリオを教えてください。

Flash AS3 でチェスゲームを開発したいと考えています。インターフェースを開発しました。駒の動きと駒の動きのルールをコード化しました。(注: まだ移動ルールのみで、キャプチャ ルールはありません。)

問題は、1 人用のチェスで AI を実装する必要があることです。チェスのルールは知っていても、AIを適用するのは簡単ではないので、どうしようもありません。

そして、私の最大の混乱は次のとおりです。私は検索してきましたが、すべての検索でチェス エンジンについて教えてくれました。しかし、私はいつも2種類のエンジンで混乱していました。1つはフロントエンド用で、2つ目は実際のエンジン用です。しかし、どれが何のためにあるのかを特定するものはありません(または私にはわからないかもしれません)。

適切なピースを検索して、難易度に応じて移動できる API タイプが必要です。そのようなものはありますか?

注: オープン ソースと Flash で使用される何かが必要です。

ありがとう。

4

2 に答える 2

1

まず、http://nanochess.110mb.com/archive/toledo_javascript_chess_3.htmlは、JavaScriptで比較的単純なAI(2ステップの深さだと思います)を実装する元のプロジェクトです。それは最小限のコードのコンテストプロジェクトだったので、ソースコードの手作りの削減によっていくらか「難読化」されています。誰かが同じコードを多かれ少なかれ読みやすいソースに復元しようとしていました:https ://github.com/bormand/nanochess 。

AIのバックグラウンドがないことを考えると、それを書くのは少し難しいかもしれないと思います...つまり、優れたエンジンは2ステップ以上先に計算する必要がありますが、いくつかの数値を与えるだけです。ボード上のすべてのピースが最大で約140であるとすると、ステップごとの可能な移動の数は、2番目のステップは、これらの移動と対戦相手のすべての可能な移動のすべての組み合わせであり、これも140 * 140*140です。つまり、悪い動きを識別し、良い動きだけを予測しようとするための非常に優れたテクニックが必要になるということです。

今日の時点では、チェスの決定論的な勝利戦略はありません(つまり、他のテーブルゲームのようにコンピューターで解決されませんでした)。つまり、かなり複雑なゲームですが、プレイできるAIです。趣味のレベルでは、思いつくのはそれほど難しいことではありません。

さらに読むことをお勧めします:http://aima.cs.berkeley.edu/

于 2012-12-10T16:06:27.780 に答える
1

最近のチェス プログラムは 2 つの部分で構成されています。

  • チェス盤を提供するユーザー インターフェイスは、ビュー、時計などを移動します。
  • チェスのゲームをプレイする機能を提供するチェス エンジン。

これら 2 つのプログラムは単純なテキスト プロトコル ( UCIまたはXBoard ) を使用して、チェス エンジンを子プロセスとして実行し、パイプを介して通信する UI プログラムと通信します。

これにはいくつかの重要な利点があります。

  • 任意の準拠チェス エンジンを使用できる 1 つの UI プログラムのみが必要です。
  • シンプルなインターフェースを提供するだけでよいため、チェスエンジンの開発にかかる時間が短縮されます。

これはまた、開発者が自分の得意なことを行うことができ、他の部分を完成させるために必ずしもチームの一員である必要がないことを意味します. 現在利用可能なチェス UI よりも多くのチェス エンジンがあることに注意してください。

いくつかの欠点がある問題に直面しています。

  1. Flash を使用しているため、この 2 つのプログラム アプローチを使用することはできません (AFAIK Flash はfork(). exec(),を使用できませんposix_spawn())。したがって、ユーザーが UI を操作しているときにエンジンが動作できるように、少なくともマルチスレッド化を試みる必要があるすべてのソリューションを提供する必要があります。
  2. エンジンが一般的に開発されている C++ と比較して非常に遅い言語を使用しています。
  3. 限られたシステム リソース、特にメモリにアクセスできます。これは、Flash ランタイムの設定によってオーバーライドできる場合があります。

プログラムで実際にチェスをプレイしたい場合は、次の問題を解決する必要があります。

  • ムーブ ジェネレーター: ポジション内のすべての正当なムーブを生成します。エンジンの実装の中には、「合法的な」部分を気にせず、しばらくしてから不正な動きを取り除くものがあります。ただし、ある時点でチェック、メイト、膠着状態を検出する必要があります。
  • ポジション評価: 特定のポジションのスコアを提供します。あるポジションが別のポジションよりも優れているかどうかを判断できない場合、勝利の動きを見つける方法はありません。
  • ムーブ ツリーと枝刈り: 評価するムーブ シーケンスと、興味のない枝を枝刈り (無視) する方法を保存する必要があります (通常は、枝が弱いと判断したためです)。チェスのムーブ ツリーは、考えられるすべてのムーブに対するすべてのリプライを考えると広大であり、ツリーの剪定はこれを管理する方法です。
  • 移調表: チェスには多くの移調があります (駒を異なる順序で移動することによって到達する位置)。評価済みの位置の再評価を回避する 1 つの方法は、位置スコアを転置テーブルに格納することです。そのためには、位置のハッシュ キーを考え出す必要があります。通常、これはZobrist hashを使用して実装されます。

より詳細な情報を得るのに最適なサイト (私はチェス エンジンの作成者ではありません) は次のとおりです。

頑張ってください。進捗状況をお知らせください。

于 2012-12-11T09:24:21.800 に答える