graph TD
A[Входные метрики: Hunger, Anxiety, Time] --> B{Проверка флага F_night_owl}
B -->|F = 1| C["Гармоника: 1 + sin(omega * t)"]
B -->|F = 0| D["Гармоника: 1 (Ночная фаза подавлена)"]
C --> E["w_preparing = Hunger * Гармоника * A_matrix"]
D --> E
E --> F[Сборка вектора сырых весов W]
Метод calculate_intents_density()
Stochastic & Risk Generator: Расчет плотности сырых весов интентов с учетом циркадных ритмов
1. Функциональное назначение
Метод calculate_intents_density является математическим базисом расчета поведения цифрового двойника. Он предназначен для вычисления сырых некоррелированных весов для каждого из базовых интентов вектора \(\mathbf{I}\) на текущем такте симуляции t. Метод преобразует физиологическое состояние агента (метаболическое истощение), его психологический профиль (коэффициент тревожности) и циркадные ритмы в многомерный массив числовых весов \(\mathbf{W}(t)\).
2. Математический базис и суточные синусоиды
В основе метода лежит нелинейная стохастическая функция, увязывающая внутренние драйверы двойника с астрономическим временем симуляции. Базовый вес для операции приготовления пищи (\(w_{\text{preparing}}\)) рассчитывается по формуле [3.3]:
\[w_{\text{preparing}}(t) = M_{\text{hunger}}(t) \cdot (1 + F_{\text{night\_owl}} \cdot \sin(\omega t)) \cdot \mathbf{A}_{\text{matrix}, i}\]
Где:
- \(M_{\text{hunger}}(t) \in [0.0 \dots 1.0]\) — динамический уровень голода агента на такте t [3.3].
- \(F_{\text{night\_owl}} \in \{0, 1\}\) — бинарный флаг циркадного сдвига («полуночник») [3.3].
- \(\omega = \frac{2\pi}{24} \approx 0.2617\) — угловая частота моделируемых суток, привязанная к часу
sim_hour[3.3]. - \(\mathbf{A}_{\text{matrix}, i}\) — вектор весовых коэффициентов аффинити текущего агента для целевой группы номенклатур (SKU) [3.3].
Аналогичным образом вычисляются сырые веса для остальных интентов:
- \(w_{\text{inventory}}\) масштабируется через коэффициент системной тревожности \(H_{\text{anxiety}}\) [3.3].
- \(w_{\text{consume}}\) напрямую зависит от текущего пика голода и доступности любимых SKU.
3. Спецификация метода (ИТ-контракт)
- Тип вызова: Синхронный, внутренний, расчетный.
- Исполнитель:
Stochastic & Risk Generator.
3.1. Входные параметры (Аргументы вызова)
| Параметр | Тип данных | Обязательный | Описание |
|---|---|---|---|
twin_metrics |
Dict | Да | Текущий снапшот вектора состояний двойника из RAM (\(M_{\text{hunger}}\), \(H_{\text{anxiety}}\), \(\mathbf{A}_{\text{matrix}}\)) [3.2, 3.3]. |
time_context |
Dict | Да | Данные виртуального времени: sim_hour (текущий час) и omega (угловая частота) [3.2, 3.3]. |
3.2. Выходные данные (Возвращаемое значение)
np.ndarray(Float) — плоский вектор сырых числовых весов \(\mathbf{W}(t) = \{w_1, w_2, w_3, w_4\}\) для каждого интента.
4. Схема распределения весов (Mermaid)
5. Программная реализация метода на Python
import math
import numpy as np
def calculate_intents_density(twin_metrics: dict, time_context: dict) -> np.ndarray:
"""
Рассчитывает сырые веса интентов на основе
метаболизма, привычек и циркадных синусоид.
"""
m_hunger = twin_metrics["m_hunger"]
h_anxiety = twin_metrics["h_anxiety"]
f_night_owl = twin_metrics["f_night_owl"]
# Берем среднее или пиковое значение вектора аффинити SKU для шага ядра
a_sku_weight = np.mean(twin_metrics["a_matrix"])
sim_hour = time_context["sim_hour"]
omega = time_context["omega"]
# 1. Расчет гармоники циркадного ритма
circadian_harmonic = 1.0 + f_night_owl * math.sin(omega * sim_hour)
# 2. Вычисление плотности каждого интента
w_inventory = h_anxiety * 0.5 # Тревожность гонит проверять запасы
w_preparing = m_hunger * circadian_harmonic * a_sku_weight
w_consume = m_hunger * 1.2 * a_sku_weight
w_waste = 0.1 * h_anxiety # Базовый вес списания
return np.array([w_inventory, w_preparing, w_consume, w_waste], dtype=float)