読者です 読者をやめる 読者になる 読者になる

分かりやすい評価関数とコンピューター将棋:荒ぶる人間と計算機の戦い 電脳戦第4戦 塚田泰明九段 vs Puella α

技術ネタ

盛り上がって参りました
人間側はとうとう九段
対するソフトウェアはボンクラーズの後継ソフト 魔法少女まど。。。
Puella αですね。ちなみにボナンザから引き継いでいる所も多そうなので
ボナンザ関係の資料を読んで書きました。
(Puellaはラテン語で少女の意、Puella magi Madoka Magicaという作品が
 2年前の放映から流行りました)
第4戦で人間が勝てば2勝2敗で最も面白い状況で
A級棋士と戦えるのでまず人間に勝って頂きたいので
支援します。

将棋ソフトをもうちょっと分かりやすくする事と
ソフトの弱点を見つけてみようかという趣旨です
(あるのかな弱点)

前回のエントリー
でも言ってますがコンピューターは
1対1ゲームで戦う時こんな感じで
手を読みます


      ●     現局面
     / \
    ○   ○   1手後
   /|\  |\
  ● ● ● ● ● 2手後

   図1 ゲーム木


○×ゲームみたいな場合は
先手なら真ん中にうってー
あっちうったからこっちうってー
っていう思考を重ねて全部読み切るので
まともなコンピューター同士を戦わせると
100%先手が勝ちます。
○×ゲームの場合最初は9個打てるコマがあるので
枝は9個あります。で、一つ下に枝がいくにつれて枝の数はひとつずつ
減っていきます。

将棋の場合はこの樹形図の下方向に向かう木の枝の数が膨大になります
2つとか3つじゃなくてルール上指す事が可能な手の数だけ枝分かれしますので
計算機も底まで全部読めません。

さて問題は枝の先の頂点での状況判断をどうするかです
ここの形勢判断は数値化してやらないと計算機は判断を下す事が出来ません
彼らは直感とかぼやっとしたものはあまり好きではありません
少なくともプログラミング言語の中でぼやっとしてるならぼやっとしてるという
条件と数値をきっちりと与えてあげないと動きません


そこで形勢判断を下すのが評価関数です。
この関数は現状の駒の配置から自分がどれだけ
詰みに近いかを判断して数値で返してくれます

でbonanzanの評価関数定義している部分がこれです
http://d.hatena.ne.jp/Gasyou/20120508/1336489213

http://ja.wikipedia.org/wiki/Bonanza#.E6.80.9D.E8.80.83.E3.83.AB.E3.83.BC.E3.83.81.E3.83.B3
数式の説明はWikipediaに書いてありますが

開発者の論文はオープンになっているのでネットで検索すると読めます。※1
どうもボナンザはプロ棋士棋譜との誤差が小さくなるような形で
評価関数のパラメーターの値を学習させているようです。
化学反応の制御理論を持って来たり当時としては画期的な事やったそうな

この評価関数の求め方がやっぱり画期的だったんです
過去の棋譜からパラメーターを決めるとその人の棋力は
反映されませんから、機械が学習するままに任せちゃったんですね

そしたらこいつが米長会長を倒すくらいまで
成長してしまった・・・と

どうすんだろうなぁ
相手は過去のライバル達全てが全力で戦って残した(確か)6万局の棋譜から生まれる形勢判断能力+マシンの計算力を持った怪物だぜぇ

正直弱点という弱点はないんじゃなかろうか・・・・
勝てるとしたら過去の棋士棋譜から学習してないと思われる
戦略が有効かと思われますが
米長さんがそれやって負けてるっぽいしなぁ


ともかく時は来た
本日電王戦第四戦です
人間が負ければ勝ち星の数ではプロ棋士側の敗北が決定する一戦
楽しみましょうか

ボナンザは普通にオープンソースなので誰でもダウンロードして遊べます
http://www.geocities.jp/bonanza_shogi/



参考はこちらのページ
http://homepage2.nifty.com/kakinoki_y/kiso.htm

1局面評価の学習を目指した探索結果の最適制御 保木 邦仁