🏁 Результаты усиления модели и ростер oracle-ботов
О чём это
Итоги арки усиления value-модели (material → rich → KCP) с финальными числами win-rate и ценой каждого варианта, плюс полное описание задеплоенных oracle-ботов. Дом плана — План усиления value-модели; объяснялки — 🎓 2-ply Expectimax поверх value-модели и 🎓 KCP-фича — тактика против глубины поиска.
Результаты: сила эвалуаторов
Все замеры — арена 400 партий (200/цвет) против aggressive, seeded (воспроизводимо). Метка = «взятие короля», модель dice-free (оценивает позицию без знания следующего броска — так её зовёт поиск на листе).
| Эвалуатор | Фичи | Плай | Win-rate | Скорость (400 партий) |
|---|---|---|---|---|
| material | 7 (материал) | 1 | 41.5% | быстро |
| rich | 9 (+mobility, king-safety) | 1 | 48.0% | быстро (~15 с) |
| material | 7 | 2 | ~55% | быстро |
| rich (🏆 задеплоен = oracle-3) | 9 | 2 | 57.8% | ~18 мин |
| KCP | 13 (+king/queen capture-prob) | 1 | 60.8% | ~5 ч 29 мин |
По силе: KCP выигрывает
1-ply + KCP = 60.8% — обходит 2-ply rich (57.8%) и 1-ply rich (48%). Прямой сигнал «могу взять короля» на одном плае сильнее двухплайной глубины по позиционным фичам. Offline это подтверждает: AUC 0.702→0.711,
king_capture_attack= фича №3 по важности (выше total_material).
Но цена оказалась обратной ожиданиям
Предпосылка «KCP дёшев, т.к. считается только на корне (1-ply)» — неверна. Каждый eval = 4× DFS по 216 исходам кубиков (~40–60 мс) × десятки-сотни корневых ходов ⟹ 1-ply KCP тяжелее по времени, чем 360k дешёвых листьев 2-ply rich. Итог: ~6.6 с/ход на M3 Pro (~6 ядер), ≈18× медленнее 2-ply rich.
Следствие для live: 6.6 с/ход — много для партий 1–2 мин, впритык для 3 мин. А на rpi4 (где живут house-боты, 4 слабых ARM-ядра) будет ещё в разы медленнее. Значит KCP для живого бота нужен либо на более мощном хосте, либо после удешевления (см. KingCaptureProbability оптимизация, epic #385 / top-K / deadline-1-ply).
Ростер oracle-ботов
Живут в приватном репо dicechess-house-bots, крутятся на rpi4 (auto-accept челленджей на play-сайте). Различаются моделью, набором фич и глубиной поиска. Общий образ ghcr.io/rabestro/dicechess-house-bots, поведение задаётся env (MODEL_PATH, ORACLE_FEATURES, алгоритм).
| Бот | Модель | Фичи | Поиск | Win-rate | Статус |
|---|---|---|---|---|---|
| oracle-1 | oracle-1.onnx | material | 1-ply | 41.5% | задеплоен |
| oracle-2 | oracle-1.onnx (та же) | material | 2-ply expectimax | ~55% | задеплоен |
| oracle-3 | oracle-3.onnx | rich | 2-ply expectimax | 57.8% | задеплоен (текущий чемпион) |
| oracle-4 | oracle-4.onnx (=kcp_nodice) | kcp | 1-ply | 60.8% | 🚧 планируется, скорость-гейт |
oracle-1 и oracle-2 делят одну модель и отличаются только глубиной (1 vs 2 плая). oracle-3 — первая с богатыми фичами. oracle-4 (KCP) — сильнейший по игре, но требует решения по хосту из-за цены хода.
Где лежат модели
| Где | Что | В git? |
|---|---|---|
dicechess-ev/models/ | тренировочные/эксперимент (LightGBM .txt + ONNX) | ❌ gitignored — только локально |
dicechess-house-bots/models/ | задеплоенные (oracle-*.onnx) | ✅ закоммичены + впекаются в GHCR-образ |
⚠️ Экспериментальные модели эфемерны (только на рабочем маке); воспроизводимы из training_data_*.csv.gz + dicechess-ev/train.py, но CSV тоже локальные. Долговременный дом модели = попадание в house-bots/models/ при деплое бота.
Как обучается/экспортируется (кратко)
dicechess-ev (Python, uv+mise): mise run train <csv> --no-dice [--kcp] → LightGBM (objective=regression для ONNX) → export_onnx.py (авто-детект числа фич + round-trip проверка). Порядок фич движок↔ONNX↔python общий: заголовок обогащённого CSV = KcpFeatures.columnNames (материал → mobility/king-safety → 4 KCP), движок извлекает тем же порядком (train==serve). Обогащение фич считается в движке (EnrichTrainingDataApp в analytics, featureSet=rich|kcp), т.к. в Python нет генератора ходов.
Связанные заметки
- План усиления value-модели — исходный план арки.
- 🎓 KCP-фича — тактика против глубины поиска — что такое KingCaptureProbability и почему дорогая.
- 🎓 2-ply Expectimax поверх value-модели — как работает 2-ply чемпион.
- Что такое LightGBM — модель.