定跡自動生成は、エンジンの探索結果や自己対局結果を用いて、定跡ファイルを半自動または全自動で構築する考え方である。 近年の将棋AIでは、学習済み評価関数や大量の計算資源を背景に、大規模な定跡生成が実戦的なテーマになっている。
将棋ソフトの定跡は、かつては人手で編集する比重が大きかった。 しかし近年は、
という流れを自動化する試みが進んでいる。
やねうら王公式サイトでも、2024年1月14日の記事で「大規模定跡時代」に入ったと説明されており、 完全自動生成か、人手の確認を挟む半自動生成かは違っても、 各チームが独自に大規模定跡を持つ方向へ移っていると整理されている。
定跡自動生成では、主に次の工程を機械化する。
このため、単なる探索高速化だけでなく、 時間管理、局面管理、ハッシュ、定跡フォーマット設計も関わる。
人手編集の定跡は、分かりやすさや思想を反映しやすい。 一方、自動生成は
という利点がある。
ただし、誤った評価や偏った初期局面から生成すると、 定跡全体に癖や偏りが残ることがある。
概念的には次のようなループになる。
for (const Position& seed : seedPositions) {
std::queue<Position> queue;
queue.push(seed);
while (!queue.empty()) {
Position pos = queue.front();
queue.pop();
auto candidates = searchBookMoves(pos, depthLimit);
auto selected = selectPromisingMoves(candidates);
book.store(pos, selected);
for (const auto& move : selected) {
queue.push(doMove(pos, move.move));
}
}
}
実際には、
などを追加することが多い。