# Model Card: Go AI (`net_light.bin.gz`, `net_strong.bin.gz`)

囲碁のAIは、KataGo 系の小型ニューラルネット（方策・勝率・目数・地の予測）と、ブラウザ上のモンテカルロ木探索（PUCT）を組み合わせています。
推論と探索は C で書いて WebAssembly（SIMD）にビルドした `engine.c` → `engine_simd.wasm`（SIMD 非対応環境は `engine.wasm`）で、Web Worker（`engine.js`）の中で動きます。

- **ゲーム**: https://core-calmdust.github.io/aicoding/go/
- **コードのライセンス**: リポジトリの `LICENSE`
- **ネットの重み**: CC BY 4.0（下記のクレジット参照）
- **バージョン**: v1（2026-10-22）

## ネット
| 項目 | 軽量（`net_light.bin.gz`） | 強い（`net_strong.bin.gz`） |
|---|---|---|
| 元のモデル | vibego `s4`（b7c106nbt-pat） | vibego `s9`（b10c128nbt-pat） |
| 構造 | KataGo の nested-bottleneck 残差ネット（7ブロック・106ch）＋ 3×3 パターン埋め込み | 同（10ブロック・128ch） |
| 出力 | 着手の確率（362＝361点＋パス）、勝率（勝ち／負け／持碁）、目数差、各点の地（所有）予測 | 同 |
| 重みの形式 | fp16（BN を畳み込みに畳み込んだ上で変換。gzip 後 約2.5MB） | fp16（gzip 後 約4.8MB） |
| 1局面の推論時間（目安） | PC の WebAssembly で約28ms | 約57ms |

- 元のモデル：Hugging Face の [sanderland/vibego](https://huggingface.co/sanderland) シリーズ（Sander Land 氏）。KataGo の公開ネット `kata1-b18c384nbt` を教師に、katagoarchive.org の局面で蒸留したもの。
- 変換：`tools/export_net.py`（PyTorch のチェックポイント → 独自形式 GONN v2）。C 実装の出力を PyTorch と比較し、方策ロジットの差は平均 約0.02。int8 量子化は精度の落ちが大きかったため fp16 を採用。
- 入力特徴量：KataGo の空間特徴量のうち石・呼吸点（1〜3）・コウ・直前5手・シチョウ関連と、大域特徴量（手番側から見たコミ／20、直前がパスか）。
- 盤の大きさ：ネットは常に19×19の入力で動かし、小さい盤は左上に置く（学習時と同じ扱い）。対称変換は N×N の盤の中で行う。5〜19路に対応。

## 探索と強さの段階
- PUCT（KataGo 式の cpuct・FPU・目数効用・LCB による最終手選択）、終局判定は Tromp-Taylor。コウは単純コウ＋同形反復（スーパーコウ）を禁止。
- 27段階（18級〜1級・初段〜八段・アマ最強）：1〜20は方策ネットの確率から温度・取りこぼし率を変えて選ぶ（探索なし）。21〜27は探索（軽量ネット 3〜32 playouts、強いネット 64〜160 playouts、端末に応じた時間上限つき）。
- **強さの目安（EGF換算）：最弱の18級 約300 〜 アマ最強 約2700（トップアマ相当）**。
- 段級は下の「人間の段級位での実測」に合わせて付けた（2026-10-28）。11級・8級・三段・六段は前後の設定の中間で、未計測。
- 死に石の判定（整地）：強いネットの地の予測を8通りの対称で平均し、グループごとに判定。日本ルール（地＋アゲハマ）と中国ルール（面積）で計算。

## 人間の段級位での実測（2026-10-28）
KataGo 公式の人間らしく打つモデル（`b18c384nbt-humanv0`、KataGo v1.15.3、`humanSLProfile=rank_…`、1手1評価）を相手に19路・中国ルール・コミ7.5で対局（`tools/vs-gnugo.mjs` に `GTP_CMD` を指定）。級は各10局（5級は8局）、段は各6局、大差の局面は軽量ネットの形勢判断で打ち切り。

| 測った設定（付け直し後の表示） | 相手（人間モデルの設定） | 本作の成績 | 推定の実力 | EGF換算（目安） |
|---|---|---|---|---|
| 方策のみ T1.7（13級） | 10級 | 1勝9敗 | 約13級 | 約800 ±150 |
| 方策のみ T1.3（6級） | 5級 | 3勝5敗 | 約6級 | 約1500 ±150 |
| 方策のみ T0.9（4級） | 1級 | 1勝9敗 | 約4級 | 約1700 ±150 |
| 方策のみ T0.6（1級） | 三段 | 1勝9敗 | 1級前後 | 約2000 ±150 |
| 方策のみ T0.3（二段） | 六段 ／ 初段 | 0勝10敗 ／ 4勝2敗 | 二段前後 | 約2200 ±200 |
| 軽量ネット6訪問（四段） | 三段 | 4勝2敗 | 四段前後 | 約2400 ±200 |
| 軽量ネット12訪問（五段） | 五段 | 3勝3敗 | 五段 | 約2500 ±200 |
| 軽量ネット32訪問（七段） | 九段 | 5勝3敗 | 人間モデル九段と同等以上 | 約2600 |
| 強いネット64訪問（八段） | 九段 | 6勝0敗 | それより上 | 約2650 |
| 強いネット160訪問（アマ最強） | KataGo 本体 b28c512（探索なし） | 0勝4敗 | 人間モデル九段より上、KataGo 本体の生の方策よりは下 | 約2700（トップアマ相当） |

- EGF換算は欧州囲碁連盟のレート（GoR）の目安：1級＝2000、初段＝2100、1段級ごとに100（五段2500まで）。アマ七段≒2700、プロは九段でも約2940までに収まるため、五段より上は50刻みで2700（アマ最強）までとした。ゲーム内のレーティング戦の数値も同じ換算。
- 付け直し前の表示は実力より2〜4段階高めで、探索なしの上位は表示ほど伸びていなかったため、2026-10-28 に上の結果に合わせて段級を付け直した（探索を少し入れる段階から有段）。
- 人間モデルは探索なしで打たせているため、相手の高段の設定は実際の同段より弱めの可能性がある（九段の設定は人間の高段者程度）。6〜10局ずつの結果で、誤差は±150〜200Elo程度。

## 想定する使い方と限界
- 対局相手・ヒント・形勢表示・1手ごとの振り返り・定石解説の評価値・詰碁の検証補助。
- 段級の表示は KataGo の人間らしく打つモデルとの対局から推定したもので、人間との対局で確かめたものではありません。小さなネットと少ない探索のため、シチョウや大きな攻め合い、まれな形で読み違えることがあります。
- 5路・6路などの極小盤は学習分布の端にあたり、コミの目安はネットの推定値から決めています。

## クレジット
- ネットの重み：vibego by Sander Land — CC BY 4.0（https://huggingface.co/sanderland）。変更：fp16 への変換と独自形式への書き出し。
- 教師モデル：KataGo（David J. Wu "lightvector" と KataGo 分散学習の参加者の皆さん）、https://katagotraining.org/ 。KataGo のネットは KataGo のライセンス（MIT 系）で公開されています。
