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\) на кумулятивную шкалу распределения принимается решение о целевом интенте.

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

Проекция стохастического Seed на кумулятивную шкалу распределения вероятностей

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]