Improving は、現在局面の静的評価が 2 手前や 4 手前に比べて改善しているかどうかを表すフラグ、またはその連続量である。 現代的な探索では、Late Move Reductionsや Reverse Futility Pruningなど多くのヒューリスティクの調整材料として使われる。
単純な発想としては、
なら、局面は前向きに進んでいる可能性が高い。 逆に悪化しているなら、守勢や不安定化が起きている可能性がある。
この情報を使うと、
といった調整ができる。
bool improving(const SearchStack* ss) {
if ((ss - 2)->staticEval != SCORE_NONE) {
return ss->staticEval > (ss - 2)->staticEval;
}
if ((ss - 4)->staticEval != SCORE_NONE) {
return ss->staticEval > (ss - 4)->staticEval;
}
return true;
}
最近は真偽値だけでなく、
差分をなめらかに積み上げる dynamic improving も使われる。
Chessprogramming Wiki でも示されているように、Improving は
などの調整に使われる。
直感的には、 局面が改善しているなら tactical な芽を見逃したくないので少し慎重にし、 改善していないなら選択性を強めてもよい、という考え方である。
将棋では王手や受け、成り、打つ手によって静的評価が急変しやすい。 そのため Improving は万能ではないが、 「今の局面の流れ」を見る軽量な指標として使いやすい。