・Miyako Shogi System                            2012/03/20 04/28修正                                   前田大和 Bitboardを使わない利きデータを更新するタイプのクラシカルなプログラム。 チェスのGlaurungとその改良版Stockfishを参考にしている。 1.局面データ  (1次元配列による)  駒位置データ  利きデータ  pin駒データ  持ち駒データ  王の座標データ  盤面ハッシュ、持ち駒ハッシュ、両方の和のハッシュ、 2.手の生成  歩飛角、2段目の香の不成、これら以外の全合法手を生成 3.手のオーダリング  通常手は次の順番で手を並び替える   トランスポジションテーブルに登録された手   詰みのキラー手   駒得駒取/成り   キラー手(2つ)   成らない/取らない手はRelative History Heuristicによる並べ替え   駒損駒取/成り  駒得の判断はSEE(マス目での取り合い計算)で行っている  王手を受ける手が3手以上なら次の順番で手を並び替える   トランスポジションテーブルに登録された手   駒得の手   成らない/取らない手はRelative History Heuristicによる並べ替え   駒損の手 4.探索  Iterative Deepening  Aspiration Windows (歩1.5枚の値、桂1枚の値、∞)  Razoring Prune  Null Move Pruning  Internal Iterative Deepening  Principal Variation Search  Late Move Reductions(Relative History Heuristic)  Futility Pruning (frontier node、pre frontier node)  One Reply、Recapture 0.5手延長、王手1手延長  末端での静止探索(最大12段、6段目以上で歩以外で歩を取る成らない手はパス、   1段目では駒を取らない王手も生成、8段目以上は同〜の手だけを生成、駒損でSEEが負の手はパス、   Futility Pruning、ただし王手を受ける手は刈らない) 5.評価関数  以下の項目で局面を評価   駒割   歩香桂銀金角飛馬竜の位置表(相手玉)   歩香桂銀金角飛馬竜の位置表(自玉)   攻め駒の動ける量(飛車の前/後/横,角,桂馬,銀のバック)   玉の周囲の金銀の数   ピン駒と王との距離   ピン駒の利きの差   玉の周囲の利き(八方,2段2列,勝ち負け同じ/駒の有無)   桂頭の利きがある加点   角頭の利きがある加点   持ち駒の枚数による価値  終盤では次の項目を付加   玉の自由度(八方,2段2列)   王への利き  評価関数のみのハッシュテーブルを使っている。局面一致ならハッシュテーブルに有る評価値を用い、評価関数の再計算をしない 6.評価関数の学習  まず、最近10年間のプロの対局から無作為に1000対局で保木の方法(1)にて駒割の学習を行った。  この駒割データでBonanza対GPS、Bonanza対Bonanza、GPS対GPS の自動対戦の計11437局の棋譜を用い保木の方法で評価関数の学習を行った。  学習は2手読み+静止探索、負けた方の特徴の学習量は1/2とした。  重みのペナルティのかけ方に工夫をした。   序盤は手数によりペナルティを強くする   中盤はペナルティを少し弱くする   終盤はペナルティを弱くする  としている。 7.進行度  探索の前だけで進行度を求める(探索中には進行度を求めなおさない)  15手以内は序盤  以下中盤判定   王周囲24マスの利きが2つ以上ある   敵陣に自分の駒がある  以下終盤判定   玉八方の利きの数 2段の利きの数 玉の自由度 相手の持駒香 持駒桂 持駒銀 持駒金 持駒角 持駒飛   14.43      6.56     -2.11   4.19    6.88  9.76 15.33 5.23 5.08  で70以上になったとき 8.その他  詰め将棋は持っていない。  トランスポジションテーブルはZobrist hash。64bitの局面ハッシュ値を用い読みの残り深さが小さければ上書き、  リハッシュ最大4回。  不利なときは千日手を選ぶこともある。 (1)保木邦仁:局面評価の学習を目指した探索結果の最適制御