mkdir -p cmake-build-debug
cd cmake-build-debug
cmake ..
cmake --build .
ctest # или ./bin/cpp_tests- Реализовать конечное пространство исходов
OutcomeSpace. - Реализовать класс
Event(событие как подмножество Ω). - Реализовать
ProbabilityMeasure, задающую вероятности атомов и событий. - Реализовать дискретную случайную величину
DiscreteRandomVariableи вычисление ее математического ожидания. - Опционально: проверить, что набор событий образует σ-алгебру.
Ожидается, что можно:
- Создать Ω (например, исходы броска кубика).
- Задать события (чётные числа и т.п.).
- Посчитать их вероятности и E[X] для простой X.
-
Есть базовый интерфейс
Distributionс методами:Pdf(x)/Cdf(x)Sample(rng)- теоретические
Mean,Cariance
-
Реализовать/использовать распределения:
- Бернулли, биномиальное, геометрическое, Пуассон
- Нормальное, равномерное, экспоненциальное
- Коши, Лапласа (или другое «интересное» распределение)
-
Класс
DistributionExperiment:- сэмплирует N значений,
- считает выборочные среднее и дисперсию,
- сравнивает с теорией,
- может строить эмпирическую CDF и считать расстояние Колмогорова.
Ожидается, что можно:
- Для каждого распределения провести эксперимент.
- Убедиться, что выборочные характеристики приближаются к теоретическим.
-
Класс
LawOfLargeNumbersSimulator:- принимает
std::shared_ptr<Distribution>, - моделирует одну траекторию выборочного среднего
$\overline{X}_n = (X_1 + \dots + X_n)/n$ при$n = \text{step}, 2\text{step}, \dots$ , - возвращает вектор записей
(n, sample_mean, |sample_mean - theoretical_mean|).
- принимает
Ожидается, что можно:
- Для разных распределений (Ber, Uniform, Exp, Laplace) показать численно, что
$|\overline{X}_n - \mu|$ уменьшается при ростеn. - Обсудить поведение для распределения, у которого матожидание не определено (Коши).
-
Класс
MarkovChain:- состояния - строки (
std::string), - инкрементальное обучение по последовательностям состояний,
- хранение счётчиков переходов и оценка
P(next | current), - генерация цепочки заданной длины.
- состояния - строки (
-
Класс
MarkovTextModel:- два режима токенизации:
Character(символы) иWord(слова), trainFromText(text)- токенизировать и обучить цепь Маркова,generateText(num_tokens, rng, start_token)- сгенерировать текст.
- два режима токенизации:
-
Интеграционный тест:
- обучить word-level модель на «Войне и мире»,
- проверить размер словаря,
- убедиться, что типичные слова попали в модель,
- проверить, что генерация текста работает.
Ожидается, что можно:
- Обучить Markov-модель на большом корпусе.
- Генерировать текст в стиле корпуса.
- Сравнить word- и char-модели.
Краткое резюме:
- Задание 1: моделируем конечное Ω, события и вероятности.
- Задание 2: реализуем и исследуем разные распределения.
- Задание 3: показываем закон больших чисел на численных экспериментах.
- Задание 4: строим цепь Маркова и генерируем текст (в т.ч. по «Войне и миру»).