web-dev-qa-db-ja.com

チェスエンジンを実装するのはどれほど難しいですか?

チェスエンジンを実装するのはどれほど難しいかと思います。すでにオープンソースの実装はありますか?

与えられたボードコンステレーションのスコアリング関数と、いくつかの可能性のある将来のボードコンステレーションを探索する非常に高速な方法が必要なようです。すべての可能な将来の動きを探索することはもちろん不可能です。そのため、最も有望な動きに貪欲に従うか、または シミュレートされたアニーリング のような近似手法を使用して、可能性のある動きを確率論的に追跡できます。

機械学習 大学院生プロジェクトの範囲内だと思いますか-学生が使用できるオープンソースの実装があったとして、次の可能な動きを返すなどの基本的なことを行います与えられた数字?おそらく難しすぎますか?

チェスエンジンでさまざまなチームを作って、お互いに対戦させるのは楽しいプロジェクトです...

45
Frank

私は昨年C#で自分のチェスエンジンを構築しました。それほど難しいことではありませんでした。作業中にミスを犯しましたが、インターネット上の情報がはっきりと提示されておらず、その多くが他のサイトからコピーされただけであることがわかりました。

このプロセスを実行している他の人の生活を楽にするために、私はチェスエンジンの開発を文書化し、ソースコードの多くをブログに投稿しています。

http://www.chessbin.com

私は Chess Game Development Kit も作成しました。これにより、以下を含む独自のチェスエンジンの開発を開始できます。

  1. チェス盤とチェスの駒を表すために必要なすべてのコード
  2. チェスの駒の動きの検証に関連するコード
  3. チェスの位置を表示し、ボード上で駒を移動できるグラフィカルユーザーインターフェイス

私のサイトは基本的にあなたのような人たちのために作られています。自分のチェスエンジンの構築を始めたい人。

54
Adam Berent

はい、これは間違いなく学生のプロジェクトの範囲内です。ここにあなたが始めるための私のアーカイブからのいくつかのリンクがあります:

33
RoadWarrior

Crafty は、トップチェスエンジンの1つであり、完全にオープンソースです。ただし、Cで書かれた学生プロジェクトには使用しないでください。高度に最適化されているため、非常に複雑で理解が困難です。

教育目的のために、私は Adam Berentsサイト を参照することをお勧めします。ここでは、C#でチェスエンジンを実装したときに彼が実行したプロセスについて説明しています。もちろんソースコードも入手可能です。私の意見では、それは出発点として優れた点です。

8
CaptainProton

あなたの質問には答えられませんが、あなたの最後のコメントには答えることができます

「異なるチームがチェスエンジンで作業し、お互いに対戦させるのは楽しいプロジェクトです...」

これはすでに [〜#〜] fics [〜#〜] チェスサーバーで行われています。そこでログインし(telnetが必要)、ドキュメントも確認することをお勧めします。おそらく、チェスボットに関する特定のヒントを提供できる人と連絡を取ることができるでしょう。

7
Stefano Borini

最近のPCの妥当なチェスエンジンは確かに実行可能です。特に、1メガヘルツと2メガヘルツの8ビットマシンでわずか数Kのメモリを使用するかなり多くのチェスプログラムがあり、かなり上手くプレイできることを覚えている場合はなおさらです。今日では、インタープリター型言語でチェスエンジンを作り出し、彼の最もタイトなものをコーディングしているトップの6502またはZ80プログラマーのパンツを打ち負かすことができます。

1978年に妻のキャスリーンと元の Sargon を作成したDan Spracklenと一緒に仕事をしました。キャスリーンの兄弟はApple IIへの移植を行いました。私は彼と彼の息子と一緒に働きました(私がこれらの人たちと一緒に働いていたときに、消費者のためのチェスの営利事業が行われました)。 Atari STとAmiga Chessのゲームを発表した1人の男を覚えています。

" Computer Gamesmanship "は、1983年に愛好家がチェスプログラミングを行ったときのすばらしい導入です。それでも、読むのは楽しいものです。良いものをカバーしています:alpha-beta、minimaxなど.

それはあなたがそこから始めて、それからなされた進歩について学ぶことができる十分に良い本です。

alt text

6
Nosredna

良いものを作るのは難しいですが、おそらく大学院のプロジェクトにほぼ適切なレベルです(私がコンピュータサイエンスでバチェラーを取得したとき、私の友人が彼の最後の年の論文のためにチェスエンジンを書きました)。

そして、はい、オープンソースのものがあります。主要な候補は GNU Chess で、非常に尊敬されています。

4
RichieHindle

私の大学では毎年、AI入門コース(3年コース)で、チェスプログラムをゼロから紙に沿って作成する必要があります。また、講義での敵対探索についての章を取り上げ、生徒がそれを行うのに十分な知識を得られるようにしました。私たちにとって、プロジェクトは私たち自身で、または別のプロジェクトで行うことができます(明らかに、より深い層などのパートナーと一緒に行われた場合、より良いプログラムを期待しています)。コンピュータグラフィックスコースは3年目のコースでもあるため、学生はその最終プロジェクトをAIコースの最終プロジェクトと組み合わせることができます。

私はたまたま3年目になって両方のコース(現在は1学期で終了しました)を受講しているので、私は両方のコースにいる友人とチームを組んで、私たちは私たちの終わりからプログラムに取り組んできました試験(12月21日頃)と1月11日の予定です。

1か月以内に完全に実行可能です(特に大学院プロジェクトとして)。私たちは3Dチェスプログラムを作成しているため、もちろんチェスエンジンだけでなく、より多くの作業が必要です。最も難しい部分は、ボード表現の決定、すべてのルールの実装(エンパッサン、キャスティング、プロモーションなど)、ヒューリスティック関数の作成、およびゲームツリー(通常はアルファベータ剪定で行われます)です。

これが進行状況を文書化するために使用しているサイトです。完了したら、コードとペーパーを後でホストします(現在は少し空です)。 http://sites.google.com/site/chessatbrock/

2
Dennis

これは、ターゲットとする強さのレベルとプログラミングスキルによって異なります。あなたがエリア経験豊富なプログラマであると仮定すると、ここに私の意見があります(私は多くのエンジンを知っていますが、コード化したことはありません):

*初心者/素人(ELO 1200-1600)に勝る非常にシンプルなエンジン:たくさんのコードですが、簡単です。

*「クラブプレーヤー」(ELO 1800-2000)に勝てるエンジン:難しくなり始めます。本を開く、最適化、そして堅実なAIが必要になります

*マスターを倒すことができるエンジン:難しい、あなたは数年前の経験が必要です

*地球上のあらゆる人間を99%の時間で倒せるトップエンジン(Rybka、Houdini、Stockfish、Hiarcsなど):これは途方もない努力であり、多くの忍耐と長年の経験が必要になります。

それは私がそれを見る方法です!

2
Fernando

すべては、ゲームのAIについて修正する目標に依存します。 2人用ゲームなら簡単です。しかし、AIはかなり難しい...そうです、よく知られているオープンソースはGNU Chess!

一部のアルゴリズム: http://www.vclcomponents.com/s/0__/source_code_genetic_algorithm_chess
これが チェスプログラミングwiki です!

0
Matthieu

特定の状態のすべてのベイルドムーブを生成する必要があります。次に、あらゆる可能性について、対戦相手の可能な動きを確認する必要があります。あなたの立場を悪化させるそれらの少なくとも1つがある場合は、その分岐を追跡するべきではありません。これを行うには、あなたがどれだけうまくやっているかを判断するためのある種のスコアリングが必要です。チェスには、どのユニットにどのくらいの価値があるかについて、いくつかのルールがあります。このようないくつかのステップだけを先読みするだけで十分です。プログラムを打ち負かすことはまだ難しいでしょう。

これはもちろん完璧とはほど遠いです。実際のプレイヤーは長期目標を達成するために一部のユニットを犠牲にすることができます。このアルゴリズムはそれを行いません。

0
stribika

アルゴリズムとデータ構造(2年生CS)でマンカラAIに続いてチェスAIを行いました。

しかし、教授はチェスエンジンの大きなチャンクを提供していたので、決定機能の改善、チェックメイトの実装などを行う必要がありました。

0
Andrew Johnson

私の学部生のAIコースでは、半学期を費やしてさまざまなチェスエンジンを作成し、XBoardまたはWinBoardを使用してそれらをテストしました。その後、学期の終わりに、学生のチェスエンジンがXBoardで互いに競うトーナメントがありました。全体的にはかなりうまくいきました。

私が正しく思い出せば、XBoardへのインターフェースはかなり簡単です。ここにいくつかのリンクがあります。

http://www.gnu.org/software/xboard/

xBoardのインターフェース

http://www.tim-mann.org/xboard/engine-intf.html

これであなたが望むすべてが得られるかどうかはわかりませんが、チェスエンジンは独自のボード表現を作成し、独自に動きを考え出す必要があったと思いますが、少なくとも、ルールを知っていて、 GUI。

0
ryan_s

これはおそらく単純すぎるが、それでも、学ぶべき興味深い教訓:私はあなたに ZX81チェスゲーム

0
Dervin Thunk