graph LR
subgraph Шкала [Кумулятивная шкала вероятностей: 0.0 - 1.0]
I1["p_inventory<br>(0.0 - 0.30)"]
I2["p_preparing<br>(0.30 - 0.65)"]
I3["p_consume<br>(0.65 - 0.85)"]
I4["p_waste<br>(0.85 - 1.00)"]
I1 --> I2 --> I3 --> I4
end
Seed((Seed: ξ = 0.42)) -.->|Попадание в интервал| I2
style I2 fill:#ffcccc,stroke:#ff0000,stroke-width:2px
style Seed fill:#ffffcc,stroke:#bbbb00,stroke-width:2px
Stochastic & Risk Generator (Стохастический процессор)
Инвариант ядра: Математический аппарат расчета интентов и проекции случайных чисел
1. Назначение сервиса
Stochastic & Risk Generator является математическим сердцем симулятора. На каждом такте времени он рассчитывает плотность распределения вероятностей для базовых интентов и определяет, какое именно действие (или критический инцидент) выполнит цифровой двойник. Сервис работает в RAM и обеспечивает стохастическую нелинейность поведения агентов.
2. Математическая модель расчета вероятностей
Движок рассчитывает динамическую функцию плотности распределения вероятностей для вектора четырех базовых интентов:
\[\mathbf{I} = \{ I_{\text{inventory}}, I_{\text{preparing}}, I_{\text{consume}}, I_{\text{waste}} \}\]
Базовая вероятность выполнения операции приготовления (\(p_{\text{preparing}}\)) для конкретного цифрового двойника на такте \(t\) описывается следующей стохастической функцией, в которую заложен инвариант ядра (циркадный ритм и интенсивность голода):
\[p_{\text{preparing}}(t) = f( M_{\text{hunger}}(t) \cdot (1 + F_{\text{night\_owl}} \cdot \sin(\omega t)) \cdot \mathbf{A}_{\text{matrix}, i} )\]
Где:
- \(f\) — нормирующая логистическая функция, переводящая аргумент к пространству вероятностей от 0.0 до 1.0.
- \(\mathbf{A}_{\text{matrix}, i}\) — вектор весовых коэффициентов аффинити текущего агента для целевой группы номенклатур (SKU).
- \(\omega\) — угловая частота моделируемых суток (\(\omega \approx 0.2617\)).
3. Алгоритм кумулятивной проекции (Дискретная рулетка)
После формирования вектора вероятностей \(\mathbf{P}(t) = \{p_1, p_2, p_3, p_4\}\), где сумма всех элементов равна 1, процессор извлекает псевдослучайное число (случайную величину) \(\xi\) в диапазоне от 0.0 до 1.0. Путем проецирования \(\xi\) на кумулятивную шкалу распределения принимается решение о целевом интенте.
4. Спецификация системных методов
4.1. evaluate_next_step
- Тип вызова: Синхронный, высокочастотный.
- Назнажение: Главный метод расчета шага для конкретного двойника. Собирает параметры вектора, вызывает расчеты вероятностей и проецирует случайное число.
4.2. logistic_normalization
- Тип вызова: Внутренняя функция.
- Назнажение: Реализация сигмоиды для нормирования аргументов функции вероятности к диапазону от 0.0 до 1.0.
4.3. project_stochastic_seed
- Тип вызова: Внутренний метод.
- Назнажение: Вычисление кумулятивной суммы вектора вероятностей и определение финального интента. Если глобальный коэффициент рисков превышен — метод принудительно выбрасывает интент
ERR-NEGATIVE-ANOMALY.
5. Программный прототип реализации (Python)
import numpy as np
from uuid import UUID
class StochasticRiskGenerator:
def __init__(self):
self.intents = ["INVENTORY", "PREPARING", "CONSUME", "WASTE"]
def logistic_normalization(self, x: float) -> float:
return 1 / (1 + np.exp(-x))
def project_stochastic_seed(self, p_vector: list) -> str:
xi = np.random.uniform(0.0, 1.0)
cumulative_probabilities = np.cumsum(p_vector)
chosen_index = np.searchsorted(cumulative_probabilities, xi)
return self.intents[chosen_index]