# Extension
Extension は、特定の条件を満たした手に対して探索深さを増やす手法である。
[地平線効果](/shogi/shogiwiki/search/horizon-effect/)を避けたり、強制的な変化を最後まで追うために使われる。
## 概要
通常の探索では、手を 1 つ進めるたびに深さを 1 ずつ減らす。
しかし、
- 王手
- 詰み筋に近い手
- 危険な駒取り
など、重要な手だけは少し深く読みたいことがある。
そこで extension では、
- 通常は `depth - 1`
- 特定条件なら `depth - 1 + ext`
という形で深さを増やす。
## 実装例
```cpp
int ext = 0;
if (givesCheck(move)) {
ext = 1;
}
int score = -search(next, depth - 1 + ext, -beta, -alpha);
```
実際には、
- 1 手分丸ごと伸ばす
- 1/2 ply などの fractional extension にする
- 1 ノード内で合計延長量を制限する
といった工夫が入る。
## 代表例
よく知られている extension には、
- check extension
- recapture extension
- singular extension
などがある。
ただし、古典的エンジンでは多用された extension も、
現代エンジンでは [reductions](/shogi/shogiwiki/search/reductions/) や pruning の発達により控えめになっている。
## 将棋AIでの位置づけ
将棋では、
- 王手
- 王手の受け
- 詰みが絡む局面
- 成りや取り返しが強制的に進む局面
で extension が有効なことがある。
一方で、分岐数が大きいので延長しすぎると探索爆発しやすい。
そのため、現在は控えめな設計が多い。
## 注意点
- extension の入れすぎは探索爆発につながる
- [reductions](/shogi/shogiwiki/search/reductions/)と逆向きの作用なので、バランスが重要
- tactical な局面を救う一方で、恣意的な条件になりやすい
## 関連項目
- [Reductions](/shogi/shogiwiki/search/reductions/)
- [静止探索](/shogi/shogiwiki/search/quiescence-search/)
- [地平線効果](/shogi/shogiwiki/search/horizon-effect/)
## 参考にしたホームページ
- [Chessprogramming Wiki: Extensions](https://www.chessprogramming.org/Extensions)
- [Chessprogramming Wiki: Check Extensions](https://www.chessprogramming.org/Check_Extensions)
- [Chessprogramming Wiki: Singular Extensions](https://www.chessprogramming.org/Singular_Extensions)