# Singular Extensions

Singular Extensions は、
ある手だけが他の候補手より著しく良いと判断されたとき、
その手を通常より深く読む extension 手法である。
強制的な一手や極端に有望な手を深掘りするために使われる。

## 概要

発想は、
「この局面では実質的にこの一手しかない」
という状況を検出し、その手だけ探索深さを増やすことである。

典型的には、

- 現在の最善手を求める
- その手を除外または制限した探索をする
- 他の候補手が十分悪いなら、その手を singular とみなす

という流れを取る。

## 実装イメージ

```cpp
if (depth >= 6 && ttMove != MOVE_NONE) {
    int singularBeta = ttScore - margin(depth);
    int excluded = searchExcluding(pos, ttMove, depth / 2, singularBeta - 1, singularBeta);

    if (excluded < singularBeta) {
        extension = 1;
    }
}
```

実戦的には、
[置換表](/shogi/shogiwiki/search/transposition-table/) の best move を起点に判定することが多い。

## 将棋AIでの位置づけ

将棋では、

- 王手に対する唯一の受け
- 詰めろを防ぐ一手
- 大駒取りを回避する急所手

のように、実質的に一手しかない場面が現れる。

そのため singular extensions は、
[Check Extensions](/shogi/shogiwiki/search/check-extensions/) より一般的な
「強制性の検出」として理解できる。

## 注意点

- 判定用の追加探索が重い
- 条件を緩めすぎると extension だらけになって遅くなる
- [探索不安定性](/shogi/shogiwiki/search/search-instability/) と結びつくことがある

## 関連項目

- [Extension](/shogi/shogiwiki/search/extensions/)
- [Check Extensions](/shogi/shogiwiki/search/check-extensions/)
- [置換表](/shogi/shogiwiki/search/transposition-table/)
- [探索不安定性](/shogi/shogiwiki/search/search-instability/)

## 参考にしたホームページ

- [www.sciencedirect.com: 0004370290900739](https://www.sciencedirect.com/science/article/pii/0004370290900739)
- [Chessprogramming Wiki: Singular Extensions](https://www.chessprogramming.org/Singular_Extensions)
- [Chessprogramming Wiki: Extensions](https://www.chessprogramming.org/Extensions)