Hatena::ブログ(Diary)

Bonanzaソース完全解析ブログ

2014-10-24

Bonanzaのmake_listの38要素化

Bonanzaのmake_listの38要素化を含むブックマーク Bonanzaのmake_listの38要素化のブックマークコメント

(前の記事の続き)

次に、別のやり方として、先手が歩を3枚持っているときに「先手の1枚目の歩」「先手の2枚目の歩」「先手の3枚目の歩」のような駒があるとみなす三駒関係の設計の仕方があります。


このようにすると、盤上にない駒は手駒にあるわけで、玉以外の38駒がどこかにはあります。例えば金は盤上の53にあったとして、それが取られて相手の手駒の3枚目の金になったら、この金は、「盤上の53金」という背番号から、「相手の手駒の3枚目の金」という背番号に変わります。


このように考えると、38駒がどこに行ったのか必ず追跡することが出来ます。このため、駒をmake_listで直列化したときに必ず38要素の配列が出来ます。こうなっているほうがmake_listの差分計算化がしやすいので、こちらのほうが優れている意味があります。この方法は、去年のPonanzaが採用していました。(いまも採用しているかは知りません。)


このmake_listを38要素化したときもBonanzaのfv.binから等価に変換できることを私が発見し、そして(数学的に)証明しました。このときもKKに応じた定数が一つ出てきます。


つまり、Bonanza方式の評価関数 ≡ やね裏評価関数 ≡ 38要素化 となります。(ここでの“≡”は、相互変換可能という意味)


これをAperyの平岡さんに説明して、平岡さんがその内容が正しいことを確認しました。(今年の1月ぐらいの話)


それで、先日、平岡さんがファジー学会誌にコンピュータ将棋について寄稿するときに、「評価関数の38回ループの所、Bonanzaの実装から等価なままで変換出来る(& そのことを、やねうらおさんが発見した)」ことについて書いたそうです。


次回は、やね裏評価関数とこのmake_list38要素化と、どちらが優れているかについて説明します。