2011/01/16
■ ブログ旧ymss部分は削除
MiyakoShogiSystem以降の部分だけにした。さすがに古い棋譜やら、メモは恥ずかしい。
■ 現時点での手の構造(int型)
ofs width 役割 0 8 from 8 8 to 16 4 piece 20 4 capture 24 1 promote 25 1 killer move 26 1 1/2手延長 27 1 1手延長
killer moveビットは手のオーダリング時に付ける。枝刈判定で使う。ハッシュの手は1番目にオーダリングするので、特に印は付けない。王手判定は局面更新時に判断する。(ハッシュの手、キラー手は局面更新せずに判断するため王手判定とならない→1手延長できない)
■ 現時点での評価関数の項目
OffensePos1[81][8][81]; // 歩桂銀金/成金角飛馬竜の位置表(対相手玉) OffensePos2[9][3][81]; // 歩桂銀の位置表(対自飛車筋) DefensePos1[81][4][81]; // 歩銀金馬の位置表(対自玉) DefensePos2[9][2][81]; // 銀金の位置表(対相手飛車筋) KingPos1[9][81]; // 玉の位置表(対自飛車筋) KingPos2[9][81]; // 玉の位置表(対相手飛車筋) KingRank[9]; // 終盤の玉の段 Mobility[6][9]; // 攻め駒の動ける量(飛車の前/後/横,角,桂馬,銀のバック) AttackPieceValue[2][16]; // 飛車の先に有る駒 PinPieceValue[16][7]; // ピン駒と王との距離 PinAttacks[4][3]; // ピン駒の利きの差 KingAttacks[13][9]; // 玉の周囲の利き KingGuardM[9]; // 玉の周囲の金銀 KingGuardK[9]; // 玉の周囲の小駒 KingSpace[9]; // 玉の自由度 KingSpaceInChk[9]; // 王手を受けたときの玉の自由度 ZoneAttacks[3][5]; // 相手陣への利き(段筋別) AttackKei; // 桂頭の利きがある加点 AttackKaku; // 角頭の利きがある加点 NoAttackPos[12]; // 自陣に利きが無いマス目数 HandValue[8][8]; // 序中盤持ち駒の価値 HandValueE[8][8]; // 終盤持ち駒の価値
■ 現時点でのハッシュ局面表
// 1エントリ16byte DWORD64 key; // ハッシュキー int move; // ハッシュ手 short score; // 探索で得た局面の評価値 BYTE depth; // 探索を行った際の残り深さ BYTE type_age; // 探索で得た値が局面の評価値そのものか上限値か下限値か (4bit) // 探索のカウンタ (4bit)