AG
Все проекты

cpp_bayesian: байесовы сети на C++20

Ядро объяснимого вероятностного вывода на C++20: байесовы сети, JunctionTree, транзакционный редакторский слой модели, визуализация Sankey.

C++20Bayesian NetworksTDDCMakeQt6SVG
cpp_bayesian: байесовы сети на C++20

Задача

Между логикой на правилах и тяжелым ML-стеком есть целый класс задач: эвристики уже не держат сложность, а полноценная инфраструктура машинного обучения избыточна и не даёт объяснимости. cpp_bayesian - ядро вероятностного вывода на C++20 для таких случаев: явная причинно-следственная модель, неполные наблюдения, повторяемый вывод. Встраивается прямо в C++-систему, без Python-рантайма и внешнего сервиса.

Типовые применения, под которые проект писался: оценка рисков (срыв сроков, отказ подсистемы, деградация SLA), диагностика по шумной телеметрии, вероятностные кэш-политики admission / eviction / prefetch вместо статических эвристик, экспертные системы, где решение нужно объяснить.

Архитектура

Два контура.

Контур управления - DynamicBayesianNetwork: редакторский слой, который допускает промежуточно невалидное состояние и умеет validate(), commit(), rollback(), с настраиваемыми RemovalPolicy. Модель меняется транзакционно, а не правится напрямую в рабочей структуре - это удобно для графических редакторов, импорта и версионирования моделей.

Контур выполнения - после commit() состояние материализуется в неизменяемую BayesianNetwork и компилируется в JunctionTree для дешевого повторного вывода на фиксированной структуре. Редакторская сложность не попадает в горячий путь.

Внутри: базовые структуры Graph, FactorScope, FactorTable, BayesianNode; exact inference как эталон корректности; конвейер moralization → triangulation → извлечение максимальных клик → дерево сепараторов → message passing.

Инструменты

  • Интерактивный CLI-визард для сборки и запроса сетей
  • Собственный формат модели .bn
  • Экспорт Sankey/SVG для визуализации вывода
  • Опциональный просмотрщик на Qt6
  • Контур измерения производительности: exact против junction tree

Результат

Библиотека доведена до состояния публичного проекта: TDD с собственным тестовым запускателем, CI на Linux (GCC, Clang) и Windows (MSVC), MIT-лицензия, CONTRIBUTING/SECURITY/CHANGELOG, документация в docs (architecture, usage, ADR), Dependabot.

Технический стек

  • Язык: C++20
  • Сборка: CMake
  • GUI: Qt6 (опционально)
  • Тестирование: self-hosted test runner, TDD-подход
  • Окружение: Docker, devcontainer