History Heuristic は、過去に枝刈りへ貢献した quiet move に高い履歴スコアを与え、 次回以降の手の並べ替えで優先する手法である。
Killer Heuristic が「同じ深さ」の経験を使うのに対して、 History Heuristic はより広い範囲で
という履歴を蓄積する。
典型的には、
という形で使う。
チェスでは from-to や piece-to をキーにすることが多い。
将棋でも同様に、
を含めた形で拡張して持つことが考えられる。
int historyTable[PIECE_NB][SQ_NB];
void updateHistory(Piece pc, Square to, int depth) {
historyTable[pc][to] += depth * depth;
}
int historyScore(Piece pc, Square to) {
return historyTable[pc][to];
}
使いすぎるとスコアが偏るので、実戦的には aging や clamp を入れることが多い。
という違いがある。
そのため、
という見方ができる。
将棋では quiet move の候補数が多くなりやすいため、 captures や王手以外の手に順序を付ける材料が重要になる。 History Heuristic はその中核になることが多い。
また、近年は
のように発展した履歴系も使われる。