CSA 日記 知識

コンピュータ将棋プログラム「みさき」の紹介

1 : コンピュータ将棋プログラム「みさき」の基本構成

2 : futility枝刈りマージンの学習に依る算出
指し手をAlpha更新する場合とAlpha更新しない場合の2種類に分類する確率を、
ロジスティック回帰によって求めています。
特徴としては、
現在の深さ、残り深さ、手の種類、オーダリング順位、敵王との距離、効きなどを用いています。

確率は事前に次の1手問題集などのサンプル棋譜を用いて自己対戦によって求めています。
ロジスティック回帰は自エンジンに内蔵しているため、
実践での探索時も「alphaカットできるのにalphaカットしなかった確率」の更新も控えめに行っています。


3 : コンピュータ将棋開発の名無しさん
  , ノ)
  ノ)ノ,(ノi
  (    (ノし
┐) ∧,∧  ノ  いまだ!2GETいける!
..|( ( ....:::::::) (
 ̄⊂/ ̄ ̄7 ) ヽ lヽ,,lヽ
 (/ 川口 /ノ   (    ) やめて!
   ̄TT ̄    と、  ゙i

4 : 実現確率探索
futility枝刈りマージンの学習と同様に、指し手がAlpha更新する場合とAlpha更新しない場合の確率を
ロジスティック回帰により求め、探索深さの制御を行っています。
低確率で深さ削減して探索した場合にalphaを更新した場合は通常の深さで再探索するなど、
LMRの手法と組み合わせた水平線効果対策を行っています。
futilityマージンと同様に、「alphaカットできるのにalphaカットしなかった確率」の更新を控えめに行っています。


5 : 効きの更新処理
本プログラムでは、bitboardを用いているため、通常であればroatedBitboardを用いるのが定跡と思われますが、
アセンブラにより90度回転、45度回転の効き情報を都度抽出する手法を用いています。
これにより、手を指す、戻すといった処理において、rotatedBitboardの更新処理を不要とします。
bitboardの効きの更新処理は、指し手生成時にしか呼ばないため、ハッシュ手やキラー手による探索を行う場合においては
呼ばれません。


6 : 3駒の関係による評価関数
Bonanza4系の3駒の評価関数より、必要なさそうな特徴を減らしたり、追加したりした評価関数を用いています。
例えば、リスト作成においては歩の数の多さにより「歩と歩もしくは他の駒との関係リスト」が
リスト作成時間の多くを占めていますが、
歩と他の駒との関係を無視することで、リスト作成を高速化しています。

序盤においては位取りに関してなど不利になると想像できますが、(歩と王の2駒の位置評価は行っています)
終盤においては高速化のメリットが上回るのではないかと考えております。
(ただ、終盤では多くの歩が持ち駒となるため、リスト製作時間はあまりかからない)
逆に、効きの情報や手番を考慮するなどの特徴の追加を試行錯誤しております(現在進行形)。
3駒による評価は進行度の計算を不要とすることができるため将棋の知識が乏しい作者に有望と考えます。
また、将来的には部分的に4駒の関係などを考慮することで、序盤においても終盤においてもより戦略的な評価が
可能になるのではないかと期待しております。


7 : 謝意
枝刈りマージンの学習では、棋理の佐藤さん、Blunderのakiさん、Ponanzaのissei_yさんの論文やブログなどがたいへん参考になりました。
全幅探索ベースであることや、ボナンザメソッドを用いた学習、3駒の関係を用いた評価関数など、
全体的に、多大にBonanzaの保木さんに影響を受けています。

その他、論文を発表されている研究室、アイデアや手法を紹介下さるブロガーの方々など、
参考にさせて頂いたすべての方々に感謝致します。


8 : 開発者情報

小宮日記 : http://d.hatena.ne.jp/mkomiya/
きらら : http://props.at.infoseek.co.jp/
コンピュータ将棋の知識 : http://misakirara.s296.xrea.com/misaki/words.html