graph TD
A[Вызов evaluate_next_step] --> B[calculate_intents_density: Расчет весов W]
B --> C[logistic_normalization: Приведение к пространству вероятностей P]
C --> D[project_stochastic_seed: Извлечение случайного числа xi]
D --> E{Проекция на кумулятивную шкалу}
E -->|Штатный интервал| F[Возврат валидного интента]
E -->|Превышен negative_event_rate| G[Возврат ERR-NEGATIVE-ANOMALY]
Метод evaluate_next_step()
Stochastic & Risk Generator: Главный рантайм-метод координации стохастического такта
1. Функциональное назначение
Метод evaluate_next_step является центральной точкой входа в математическое ядро симулятора на каждом внутрисуточном микро-такте t. Он предназначен для последовательной координации фаз стохастического расчета: метод принимает текущие float-метрики состояния из RAM-реестра, передает их на этап вычисления плотности распределения весов, запрашивает логистическое нормирование и запускает бросок случайного числа для определения финального интента.
2. Логика сквозного математического контура
Метод работает полностью как «чистая функция» (Pure Function) внутри оперативной памяти, не пачкаясь об сетевые HTTP-протоколы. Контур вычислений внутри метода разделен на три изолированных шага:
\[\text{Metrics (RAM)} \xrightarrow{\text{Шаг 1}} \mathbf{W}(t) \xrightarrow{\text{Шаг 2}} \mathbf{P}(t) \xrightarrow{\text{Шаг 3}} \text{IntentEnum}\]
- Шаг 1 (Расчет сырых весов): Вызывает метод
calculate_intents_density, передавая туда метаболический сдвиг \(M_{\text{hunger}}\), флаг циркадного сдвига \(F_{\text{night\_owl}}\) и вектор приверженности к продуктам \(\mathbf{A}_{\text{matrix}}\). На выходе формируется массив сырых весов \(\mathbf{W}(t)\). - Шаг 2 (Нормирование): Направляет массив \(\mathbf{W}(t)\) в функцию
logistic_normalizationдля получения валидного вектора вероятностей \(\mathbf{P}(t)\), сумма элементов которого строго равна 1. - Шаг 3 (Проекция случайного числа): Передает вектор \(\mathbf{P}(t)\) в метод
project_stochastic_seed, где через кумулятивную шкалу распределения принимается окончательное решение о генерации штатного интента или вбросе деструктивной аномалии.
3. Спецификация метода (ИТ-контракт)
- Тип вызова: Синхронный, высокочастотный, расчетный.
- Исполнитель:
Stochastic & Risk Generator.
3.1. Входные параметры (Аргументы вызова)
| Параметр | Тип данных | Обязательный | Описание |
|---|---|---|---|
user_id |
UUIDv4 | Да | Идентификатор пользователя бэкенда, для которого выполняется математический шаг. |
twin_metrics |
Object/Dict | Да | Текущий срез числовых коэффициентов вектора состояний, извлеченный из RAM. |
time_context |
Dict | Да | Контекст текущего виртуального часа симуляции и угловой частоты суток ω. |
3.2. Выходные данные (Возвращаемое значение)
IntentEnum(String): Финальный сгенерированный интент шага (INVENTORY,PREPARING,CONSUME,WASTE) либо код критического сбоя поведения (ERR-NEGATIVE-ANOMALY).
4. Схема сквозного вычисления шага (Mermaid)
5. Программная реализация метода на Python
from uuid import UUID
class StochasticStepEvaluator:
def __init__(self, density_calculator, normalizer, seed_projector):
# Внедряем утилитарные математические методы через DI
self.calculate_density = density_calculator
self.normalize = normalizer
self.project_seed = seed_projector
def evaluate_next_step(self, user_id: UUID, twin_metrics: dict, time_context: dict) -> str:
"""
Координирует сквозной математический цикл расчета
интентов на текущем микро-такте времени.
"""
# Шаг 1: Рассчитываем плотность распределения сырых весов
raw_weights = self.calculate_density(twin_metrics, time_context)
# Шаг 2: Нормируем веса к строгому пространству вероятностей [0 ... 1]
probability_vector = self.normalize(raw_weights)
# Шаг 3: Проецируем псевдослучайное число на кумулятивную шкалу
final_intent = self.project_seed(probability_vector)
return final_intent