昨日の記事でZobrist Hashのことについて書いたのですが、競技プログラミング界隈の人の間で話題になっている(?)ようです。
そこまで含めてZobrist Hashだと思っているけれども。。。Zobrist Hash理解してない人にはとても良い記事だと思います。>RT
— コルン (@colun) December 16, 2015
全部addにすれば後者ができることは自明ですが、基本的にxorにこだわっていて、前者を多用してきてはいますが、それはやねさんも書いてる通りハッシュの偏りが心配だったのですが、すでに将棋AIで大々的に使われてて問題ないことが分かっているのだったら、僕も今後は後者も使っていくかも。
— コルン (@colun) December 16, 2015
ああ、まあ、でも、xorとaddは混在できなくて、混在したい時は、(HashSeed * 前の個数)と(HashSeed * 後の個数)をxorしていたので、全部addにするというのは僕は知らなかったと言えば確かに知らなかった。うん、知らなかったよ、ごめんなさい。
— コルン (@colun) December 16, 2015
将棋AIの記事、正直自分くらいのゆるふわアルゴリズマーだと「どっちでもええやん」という細かい話が多いのだけれども、そういう細かい部分で競ってるんだなぁ、というのを本当に感じる。
— chokudai(高橋 直大) (@chokudai) December 16, 2015
まず、Zobrist Hashをxorからaddに変更したときに偏りが出るか等については大変長くなるのでまた別の機会に詳しく書きます。
それでコンピューター将棋開発で本当にそんな細かい速度を競っているのかについては、平岡さんはmerom686さんは次のツイートを挙げておきます。
コンピュータ将棋、そういう細かい所でほとんど性能差が出ないからどっちでも良いけど、1万行程度のプログラムを何年もいじってるとそういう細かい所に気付いて直してる内にああなってしまうという感じがする(´・_・`)
— 平岡 拓也 (@HiraokaTakuya) December 16, 2015
細かくない部分が全然できてない勢としては、(強さという意味では)細かい部分はほんっっっとうにどうでもいいのである。
— merom686 (@merom686) December 16, 2015
強い将棋ソフトを作ろうと思ったときに、まず第一に評価関数です。評価関数の学習方法の改良や、評価因子の追加等の少しの改良でR50や100上がるというのは決して珍しくありません。そののちに探索です。探索部のパラメーターの調整にはすごく長い開発期間がかかりますが、調整するのとしないのとではR100ぐらい変わってきます。
一方、速度的なチューニングというのは、丸一年ぐらいかけてSSEとかAVXを使ってチューニングしまくってもいまのAperyからは30%も速くならないでしょうし、レーティングで言うとR50も上がればいいほうです。まして、Zobrist Hashをaddにしたところで0.01%の速度向上も得られるか怪しく、レーティングで言うとR0.01とか、計測できないレベルの向上でしかないと思われます。
ゆえに、そんなところでは棋力の差はつかないというのが実際のところですが、平岡さんが言うように長年いじっているとそういう細かい部分は自然と洗練されてきて、無駄のない形に到達するというのが一つの真理だと思います。焼きなまし法にも似てますね。
また私は、評価関数や探索部のチューニング自体はそこはそこでベストを尽くすので、他の部分(指し手生成等)でもベストを尽くすという考えです。そうして初めて最強の将棋プログラムになるのだという確信と信念に基いて行動をしています。
残念ながら、まだやねうら王は最強と言える状態には至っていないので現段階ではこのような信念は宗教じみたものに過ぎませんが…。
.@yaneuraou なのは超えよりponanza超えを目指してくださいよ…
— かず@なのは (@kazu_nanoha) December 17, 2015
. @yaneuraou やねさんの天才性を示す為にも、Ponanzaに対局で勝って下さい!
— Yasuhiro Ike (@YasuhiroIke) December 17, 2015
まあ、このような信念こそが正しいのだということを来年の電王トーナメントで証明するしかありませんね。(その前に私は長手数の詰将棋が解ける詰将棋エンジン作りたいのだけど…)
無論、直接対局でもPonanzaに圧倒的に勝ちますよ!(宝くじで10万円が当たるぐらいの確率で) https://t.co/BeGK3Fapg4
— やねうら王 (@yaneuraou) December 17, 2015
まあ、これは何時もの勝手な外野の希望ではありますが、ここはひとつ、何としてもPonanza越えを達成していただきたいものです。
それも出来ますれば技術的なブレークスルーを伴いながら、、、。
ポナンザには常に一等星であってほしいですね。
そこを目指すからみんな強くなれる。
屋根さんはそれを超えて超新星に!
あれ?なんか違うような・・・。
冗談は置いといて、
ものづくりの極意に魂は細部に宿るというのがあるので、ぜい肉を落とす最終局面において細部をいじるときはなんであれいつかは来るもんなんでしょうね。
dfpnって玉(猫)の逃げ方が少ないかどうかの評価関数(猫逃げ評価関数)を自作して、玉(猫)の逃げ方が小さいものから優先して探索する(証明数/反証明数)。それとStockfish的に投機的探索をするみたいなイメージだが良くは知らない。
きっと猫好きの大御所が答えてくれるでしょう
考え方はそれですべてだと思うのですが、その通りに実装すると何故かうまくいかない。それがdf-pnという悪魔…。