graph TD
A[Вход: Вектор вероятностей P] --> B["Бросок риска: xi_risk = U(0,1)"]
B --> C{xi_risk < negative_event_rate?}
C -->|Да| D[Принудительный вброс: ERR-NEGATIVE-ANOMALY]
C -->|Нет| E["Кумулятивная сумма: C = cumsum(P)"]
E --> F["Бросок интента: xi = U(0,1)"]
F --> G["Поиск отрезка: searchsorted(C, xi)"]
G --> H[Возврат штатного интента]
Метод project_stochastic_seed()
Stochastic & Risk Generator: Алгоритм дискретной рулетки и вброса критических инцидентов
1. Функциональное назначение
Метод project_stochastic_seed является финальным исполнительным звеном математического ядра симулятора (Фаза 1). Он предназначен для проецирования сгенерированного псевдослучайного числа (случайной величины) \(\xi\) на кумулятивную шкалу распределения вероятностей для принятия окончательного решения о выборе целевого интента. Также метод отвечает за оценку глобального коэффициента рисков (negative_event_rate) и принудительный вброс аномального деструктивного поведения.
2. Математический базис кумулятивной проекции
Метод преобразует нормированный вектор вероятностей \(\mathbf{P}(t) = \{p_1, p_2, p_3, p_4\}\) в кумулятивную шкалу (массив накопленных сумм) \(\mathbf{C}(t) = \{c_1, c_2, c_3, c_4\}\), где каждый элемент рассчитывается как:
\[c_k = \sum_{j=1}^{k} p_j\]
После фиксации шкалы извлекается случайное число \(\xi \in [0.0 \dots 1.0]\). Финальный интент выбирается по правилу:
\[\text{Индекс интента} = \min \{ k \mid c_k \ge \xi \}\]
Контур генерации аномалий (Stochastic Risk Loop)
Перед проекцией базового интента метод производит независимый бросок случайного числа для проверки пересечения системного порога рисков negative_event_rate. Если бросок подтверждает наступление инцидента, метод игнорирует штатную кумулятивную шкалу и принудительно возвращает код деструктивной аномалии ERR-NEGATIVE-ANOMALY.
3. Спецификация метода (ИТ-контракт)
- Тип вызова: Синхронный, высокочастотный, расчетный.
- Исполнитель:
Stochastic & Risk Generator.
3.1. Входные параметры (Аргументы вызова)
| Параметр | Тип данных | Обязательный | Описание |
|---|---|---|---|
p_vector |
np.ndarray | Да | Нормированный вектор вероятностей \(\mathbf{P}(t) = \{p_1, p_2, p_3, p_4\}\) [3.2]. |
negative_event_rate |
Float | Нет | Текущий порог вероятности вброса аномалий (по умолчанию = 0.05). |
3.2. Выходные данные (Возвращаемое значение)
IntentEnum(String) — выбранный валидный интент (INVENTORY,PREPARING,CONSUME,WASTE) либо код ошибкиERR-NEGATIVE-ANOMALY.
4. Схема кумулятивной рулетки и риска (Mermaid)
5. Программная реализация метода на Python
import numpy as np
class StochasticSeedProjector:
def __init__(self):
self.intents = ["INVENTORY", "PREPARING", "CONSUME", "WASTE"]
def project_stochastic_seed(self, p_vector: np.ndarray, negative_event_rate: float = 0.05) -> str:
"""
Проецирует случайный Seed на кумулятивную шкалу с
подмешиванием стохастического контура аномалий.
"""
# 1. Проверка контура генерации инцидентов негативного характера
xi_risk = np.random.uniform(0.0, 1.0)
if xi_risk < negative_event_rate:
return "ERR-NEGATIVE-ANOMALY"
# 2. Формирование кумулятивной шкалы распределения
# На выходе получаем отрезки, суммарно составляющие 1.0
cumulative_scale = np.cumsum(p_vector)
# 3. Извлечение псевдорандомного числа xi для выбора интента
xi = np.random.uniform(0.0, 1.0)
# 4. Высокоскоростной бинарный поиск отрезка кумулятивной шкалы
chosen_index = np.searchsorted(cumulative_scale, xi)
return self.intents[chosen_index]