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