MTD(f) を実装する

http://people.csail.mit.edu/plaat/mtdf.html
http://ja.wikipedia.org/wiki/MTD-f
http://ja.wikipedia.org/wiki/Negascout

『MTD(f) は MTD(n, f) (Memory-enhanced Test Driver with node n and value f) の略で、アルファ・ベータ法やNegaScoutよりも効率の良いミニマックス法アルゴリズムの一種である。 MTD(f) は、ミニマックス値を見積もった値 f から、 Null Window Search を何度も繰り返す事で実際のミニマックス値に向けて近づいていく探索法である。 ミニマックス値が見つかると、再び Null Window Search を行っても同じ値が返るようになるので、これを探索の終了条件とする。』

...この検索法は「ハッシュ表にメモリーをふんだんに使える」ことが前提であったため敬遠されていたらしいのですが、現在はその制限・問題は特にありませんのでこれを使うことにしました。なんといってもコードが単純明快で、アルファ・ベータ検索関数があれば5分で完成です。

少々テストしてみましたが確かに(普通のハッシュ表付きアルファ・ベータより)かなり速いです。

(追記)

更なるメリットは... NegaScout に比べて並列化がえらく楽です。

投稿者: 紫外線 投稿日時: 金, 08/27/2010 - 07:44 categories [ ]

コメントの表示オプション

お好みの表示方法を選択し、「設定の保存」をクリックすると、表示方法を変更することができます。

評価関数の取り込み終了

...です。

これで理論上、「一手読み」ならBonaと同等となりました。(笑...詰め将棋関数が付いている分我のほうが有利か???)

これからガンガン我流にいじくり回すことになります。

fv.bin の読み込み 終了

...しましたので評価関数に組み込んでみます。

>読み込むデータの量を物凄く間違えていました。

これのお陰でデータがみょうちくりんに見えてえらく錯覚しました。

参考リンク

http://d.hatena.ne.jp/LS3600/20090928
http://d.hatena.ne.jp/LS3600/20091001

...楽勝アルネ。

fv.bin の読み込み 備忘録

fv.bin のデータは short なので、Java で読み込むには

   DataInputStream inputStream = new DataInputStream(new FileInputStream(filename));

でよさげですが(DataInputStream には readShort() があるので)、これだと律儀にデータを読み出すので20秒以上えらく時間が掛かります。(長すぎて途中で諦めました)

これにちょぴり書き足して、

DataInputStream inputStream = new DataInputStream(new BufferedInputStream(new FileInputStream(filename)));

...とすると、ファイルの中身をメモリーバッファーに落としてから引っ張れるので0.7秒 8秒0.6秒に短縮します。えっへん。(大した事じゃない)

(追記)読み込むデータの量を物凄く間違えていました。コピペの時に一桁落としてしもうた。

(追記2)もう一回考えたら速くなった。ふぅ~。

fv.bin の読み込み

ボナの評価関数のパラメターが詰まったファイルを読み込もうとしていますが、我はCが嫌いなのでおつむが禿げるおもいです。嗚呼...

なんとか今週末に決着をつけたいです。(あと仕事も少々残っているし...あぁぁぁぁぁ~)

コメントの表示オプション

お好みの表示方法を選択し、「設定の保存」をクリックすると、表示方法を変更することができます。