今回はStockfishのtypes.hの解説です。このファイルはBonanza6で言うとshogi.hに相当するもので、チェスで使う基本的な構造体の定義が一式書かれています。このファイルの内容を頭においてからソースコードを読み進めれば細部まで理解しやすいでしょう。
KPPでは左右の対称性を考慮すると弱くなる!?
KPPというのは玉と玉以外の2駒(合計3駒)の位置関係のことを言います。
将棋の初期局面は角と飛車がいるために左右非対称となっています。
このため、序盤では角側の桂はなるべく跳ねないほうがいいだとか、そういう暗黙のルール(?)があるわけですが、これを評価関数のパラメーターの調整として棋譜から学習させるときに左右対称性を考慮しているとうまく学習できないのではという議論があります。
続 将棋とチェスの違い
昨日の記事に対してこんな意見をいただきました。
持ち駒を盤上に投入するときの移動距離はワープに近いのでは。あと、将棋には「どの手を選んでも引き分け」という局面は少なく、狭い選択肢でも勝ちになる手を選ばないといけないのが難しいと思う。> 将棋はチェスに比べてどこが難しいのですか? http://t.co/1vyvTH6eft
— takodori (@takodori) December 21, 2014
「持ち駒を盤上に投入するときの移動距離はワープに近い」ので、持ち駒のある局面(終盤)は、位置評価が相対的に重要ではなくなってくるのでそういう局面はもともとコンピューターが得意とする局面です。昔からコンピューター将棋の終盤は強いですよね…。
このことをもう少し専門的な角度から書いてみます。
サーバー速くなりました
このやねうら王のサイトはWordPressで作っていたのですが、プラグインをいろいろ入れていたところ、1ページ表示されるまでに10秒程度かかるようになりました。記事を更新している自分もストレスが溜まる一方で、出資してくれているアフィリエイターさんにお願いして新しいサーバーを借りました。
その結果、1,2秒で表示されるようになったのでとても快適です。
サーバー代のぶんも、記事更新頑張りますよ!(`ω´)
→ さらにチューニングして0.5秒ぐらいで表示されるようにしました。
→ サーバー側のメモリがあふれたのでcache設定やめました。遅くなりました。ごめんなさいごめんなさい><
将棋はチェスに比べてどこが難しいのですか?
コンピューターチェスの世界ではIBMのDeep Blueがカスパロフ氏に勝利したのは1997年。コンピューター将棋の世界で名人の棋力に到達したと言われているのは2012年あたり。実に15年もの後れを取りました。
この原因として「将棋は捕獲した駒が再利用できるので指し手の組み合わせが膨大になるから」というのが通説ですが、Ponanzaの山本君は、それとは違った考えを持っています。
Stockfish DD – UCI制御部
今回はUCI制御部について解説します。
UCIというのは、Chess用のプロトコルでして、UCIのCがChessの頭文字です。将棋の場合、ご存知の通り、USIプロトコルであり、USIのSがShogiの頭文字です。
predictionと棋力との関係
棋譜からの学習のiterationを回しているとprediction(指し手一致率)が上がっていきます。このpredictionが上がっていくとそれが過学習でない限りは棋力が上がります。
Bonanza6のlearn.cの実装ではペナルティが結構きつめになっているので、過学習はあまり起こらないようです。
将棋の探索空間の広さについて
将棋の探索空間はどれくらいの広さなのでしょうか。
チェスの場合、1手から最終局面までの手順数(探索空間)は10の120乗程度と言われている。将棋の場合は、10の220乗。一度取った相手の駒を使うことができるため、とたんに増えてしまう。囲碁は盤面の広さもあって10の360乗である。
上の記事に見られるような「10の220乗」というのが定説になっています。
ところが、一定以上の棋力を持つプレイヤーに限定する場合、桁違いに狭いというのが私の考えです。10の220乗どころか、10の50乗すらいかないと私は思っています。
Stockfish DD – 置換表
今回紹介するのはStockfish DDの置換表の実装です。
最新のStockfishの実装では置換表の1エントリーがStockfish DDからさらに節約されていますが、ハッシュキーのbit数を減らしてあるのでハッシュ衝突の確率が上がるため一概に良いとは言えません。
おもてなし定跡はおもてなしすぎ?
事の発端は習甦の竹内さんが、「(2014年の電王戦のために貸し出した)習甦には、色んな定跡を入れておいたところ、それはプロ棋士の先生に非常に喜んでもらえた」と言い出したことである。
「それならワイもやったるで〜」と習甦と同じ手法で定跡を入れようと思った。