こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

人工知能と将棋

 とあるプログラミングの課題で、将棋のプログラムを作りました。
 そこで、将棋に人工知能をつけてみようと思い立ち、先輩に相談したところ、「遺伝的アルゴリズムを使うと人間に勝つのは無理だけど結構マシなのができるんじゃないのか」といわれました。
 僕は今まで遺伝的アルゴリズムについてまったく無知だったので、基礎の本を買って勉強しました。
 しかし、将棋の人工知能ってどうやったら作れるんだろう?とそこで考え込んでしまい、いろいろと思考をめぐらしています。
 僕が考えているのは決して強いプロうグラムじゃなく、学習していくようにしたいのですが、
 1.どの駒をどこに動かすという遺伝子カードを何十万枚と作る(乱数か何かを使って)
 2.カードの適合度にしたがって、ある1枚を引き、今の盤面で有効ならば実際に駒を動かす
 3.その2手目か3手目に盤面を評価し、以前よりも状況が悪化していれば、そのカードの適合度を落としていく、有利になればカードの適合度を上げる
 (4.交叉や、突然変異を用いてカードを変化させる?)
 こんな感じにすればまあまあかなと考えていました。
 しかし、ここでよく考えると、
 たとえあるカードによって状況が不利になって適合度が落ちても、それは別の状態において有利になれるカードなのかもしれない。それなのに適合度を落としてもよいのか?
 むちゃくちゃなことを書いているかもしれません。遺伝的アルゴリズムではないことを書いているかもしれません(爆)。が、皆さんはこの疑問についてどう思われますか?
 何かご意見、アドバイスをお願いします。

投稿日時 - 2003-08-06 08:13:42

QNo.620913

暇なときに回答ください

質問者が選んだベストアンサー

私も、GAよりもMiniMax法などを利用した先読みの方が強いと思います。
純粋にGAだけでやるとすると、盤面の「雰囲気」から適当に駒を動かすってことになっちゃうので(^^;
将棋ってのは似た駒配置であっても、1箇所違えば全く別の局面になるんで、GAには分が悪いような…

GAを生かすとすれば、相手プレイヤ(人間)のクセを見抜く部分に使えば、効果的なんじゃないでしょうか。
攻め/守りのバランスを決めたり、相手プレイヤが「好きな」駒を重点的に防御したり(笑)。

ちなみに、先読みをするには盤面の「数値化」を行います。まず、自分に有利な盤面だと高得点、不利な盤面だと低得点になるような判断アルゴリズムをつくります。
んで、CPUの手番では仮想的に駒を色々動かしてみて、そのときの得点の動きで手の良し悪しを判別します。
強いプログラムになると、内部に定石を大量にストックしているみたいですね。

投稿日時 - 2003-08-06 19:54:41

ANo.2

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

むかし遺伝的アルゴリズムでリバーシを作ったことがあります。
そのときの結論は「遺伝的アルゴリズムを使うより、
先読みをいくらかした方が強い」というものでしたが
それはともかくとして…

>別の状態において有利になれるカードなのかもしれない。それなのに適合度を落としてもよいのか?

これは「そういうもの」と考えるべきでしょう。
かりに特定の状況で適合度が低くても、
他の多くの状況で適合度が高ければ、最終的な成績は高くなります。
もしも、偶然が重なって、真の適合度が高いのにハネられることになっても、
偶然を前提にしたアルゴリズムなので、それも仕方ないと思います。

投稿日時 - 2003-08-06 08:44:25

あなたにオススメの質問