2012年2月25日土曜日

コンピュータ将棋プログラムで質問です、

コンピュータ将棋プログラムで質問です、

基礎知識が全く無い状態でコンピュータ将棋プログラムを作ろうと思った場合、最低限必要な知識はなんでしょうか?

(アマ初段ぐらいの実力をもつ将棋プログラムの場合)



よろしく御願いします。


|||



【将棋のルール】









かなり昔・・AI3とかいうプログラムで、



コンピュータ側の駒をすべて取り、王様を5五(逆?)で詰めるのを時間潰しでしていましたが・・・



レベル4でもたいした時間使わなかったし・・・かなり大変ですよ。



|||



かなり、いい本が2冊あります。職業的なプログラマーならこれを読めば案外すぐ作れるのではないでしょうか。

職業的プログラマーでなければ、将棋プログラムは一般にC+またはC++などの言語で作成されるため

その言語の習得、プログラミングの基礎から勉強しなければならないと思います。

質問するカテゴリを変更してプログラマーになるためにはなどで聞いた方がいいかもしれません。



なお、この著者の作成した将棋プログラムはインターネット将棋道場の将棋倶楽部24(http://www.shogidojo.com/)

で初段位の実力です。



コンピュータ将棋のアルゴリズム―最強アルゴリズムの探求とプログラミング (I・O BOOKS) (単行本) 池 泰弘 (著)

http://www.amazon.co.jp/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%...

レビュー:

--------------------------------------------------------------------------------

データ構造、合法的な手の生成、MinMax、アルファベータ、ハッシュによる探索結果の記憶、詰将棋ルーチンなど、

将棋プログラミングに必要な基本知識がこの1冊で全て解説されています。

チェス、オセロ、囲碁といった有限完全情報確定二人零話ゲームの思考の作成全般に応用が利くでしょう。

将棋プログラミングの入門書として十分な内容となっています。

これ以上の知識を得たいなら専門の論文に当たるしかない、と言ったレベルまできちんと解説されています。

---------------------------------------------------------------------------



Java将棋のアルゴリズム―アルゴリズムの強化手法を探る (I/O BOOKS) (単行本) 池 泰弘 (著)



http://www.amazon.co.jp/Java%E5%B0%86%E6%A3%8B%E3%81%AE%E3%82%A2%E3...



レビュー:

---------------------------------------------------------------------------------------

将棋のプログラムを作成する上で、手の探索方法といったような一部分はホームページなどでも公開されています。

しかしながら、UIまで含めて、将棋プログラム全体を完成させるような情報源には今までにあまりお目にかかった事がありません。

総じて情報量的には本書が一つ抜きん出ていると思われます。



具体的には、プログラム上での駒のあらわし方や手の作成はもちろんのこと、探索方法にも言及し、更には課題として高速化にも触れています。

ページ数の制約からか各々にはそれほど踏み込んでいませんが、ソースを読む楽しみがかなりあります(笑)



惜しむべくは、ソースコードを読んで理解してよね!的な部分があること。

ゆえに星一つ分だけ減らしました。

しかし、それでも初めて将棋プログラムを行う人にとって、本書が羅針盤になることに変わりはないでしょう。

そういった意味で、続編に期待です。

(もう少しでいいので詳しく書いてほしい)



なお、探索部分を理解するにはかなりの自己努力が必要です。

それを考えるのが楽しいのですけどね。

-------------------------------------------------------------------------------------



他には、コンピュータ将棋の進歩 1~5 共立出版 松原仁著

にも一部ソースコードの解説などがあります。私は1~4までは読みました。

私はプログラミングはするつもりはありませんが、読み物としても面白いです。

この辺の本を読んで勉強されてはいかがでしょう。


|||



コンピュータ対戦の将棋ゲームということでよろしいでしょうか?



まずは将棋のルールを完全に実施できるようにプログラムすることが必須です。

置けない場所に置けたり、移動できない場所に移動できたりしたらゲームとして成り立ちません。

まずは人対人で動く将棋プログラムを作るのが先決です。

敵のアルゴリズムはその後。



将棋も二人零和有限確定完全情報ゲームになります。

完全な先読みが理論的には可能で、双方のプレーヤーが最善手を打てば、必ず先手必勝か後手必勝か引き分けかが決まるという理論です。ただし、現実的には無限大に近い値なので不可能なためゲームが成立します。



さて考え方ですが、何手先を読んだとしても、それがよいのかどうか解りません。

そのため「盤面評価」という考え方を用います。盤面のどの位置に居るか、相対的な駒の場所、相手の駒の位置などから配置に重みをつける(評価1と評価2のマスだと2の方が有利など)という考え方です。

これがもっとも大事になります。

次に手の読み方です。2~3手先を読むだけで数百万回の計算が必要です。

盤面評価が出来たとして何手先の評価を基準とするか?が問題となります。

1手先は悲観的結果だが3手先は大逆転もあります。相手の出方にも関係します。

・ミニマックス(想定される最大の損害が最小になるように決断を行う)

・マキシマックス(想定される最小の利益が最大になるように決断を行う)

などの判断基準と、それを高速化するための手法は各種存在します。



難易度としては盤面評価の基準と、何手先を読めるかに関わると思います。

0 件のコメント:

コメントを投稿