sequenceDiagram
autonumber
participant Core as 🧠 Core Orchestrator
participant DB as 💾 PostgreSQL DB
participant Registry as 👥 Twin Registry (RAM)
Core->>DB: SELECT user_id FROM users WHERE is_active=TRUE
DB-->>Core: Массив активных UUID
loop Для каждого полученного user_id
Core->>Registry: link_twin_state(user_id, initial_affinity_size=100)
Note over Registry: Генерация случайных весов H_anxiety, P_impulse, A_matrix
Registry->>Registry: Аллокация памяти: _states[user_id] = TwinStateVector
end
Note over Core, Registry: Фаза 0 завершена. RAM-структура готова к рантайм-циклу
Метод link_twin_state()
In-Memory Twin Registry: Первичный маппинг математических моделей на идентификаторы СУБД
1. Функциональное назначение
Метод link_twin_state выполняется на этапе инициализации симуляционного полигона (Фаза 0: Однократная инициализация сессии). Он предназначен для динамического связывания чистой математической модели поведения (вектора признаков) с уникальными сквозными идентификаторами реальных пользователей (user_id), извлеченными из PostgreSQL базы данных приложения. Метод производит первичную аллокацию оперативной памяти хост-машины под In-Memory структуру сессии.
2. Математический базис и распределение начальных весов
Метод инициализирует для каждого импортированного user_id многомерный вектор начального состояния:
\[\mathbf{DT}_i = \langle \text{user\_id}, \mathbf{A}_{\text{matrix}}, H_{\text{anxiety}}, P_{\text{impulse}}, F_{\text{night\_owl}}, M_{\text{hunger}} \rangle\]
Для того чтобы цифровой след не был однородным, метод использует генератор псевдослучайных чисел для распределения начальных психологических и поведенческих весов внутри заданных интервалов:
- Коэффициент системной тревожности: \(H_{\text{anxiety}} \sim U(1.0, 2.5)\) (Равномерное распределение)
- Склонность к импульсивным закупкам: \(P_{\text{impulse}} \sim U(0.1, 0.4)\)
- Циркадный флаг «полуночника»: \(F_{\text{night\_owl}} \sim \text{Bernoulli}(p=0.2)\) (С вероятностью 20% агент становится ночным актором)
- Начальный уровень метаболического истощения: \(M_{\text{hunger}} = 0.0\) (Константа на старте)
3. Спецификация метода (ИТ-контракт)
- Тип вызова: Синхронный, блокирующий (вызывается оркестратором на Фазе 0).
- Исполнитель:
In-Memory Twin Registry Service.
3.1. Входные параметры (Аргументы вызова)
| Параметр | Тип данных | Обязательный | Описание |
|---|---|---|---|
user_id |
UUIDv4 | Да | Реальный идентификатор пользователя, извлеченный из СУБД бэкенда. |
initial_affinity_size |
Integer | Да | Размерность вектора номенклатурных позиций (SKU) для генерации стартовых весов приверженности. |
3.2. Выходные данные (Возвращаемое значение)
void— метод производит запись объектаTwinStateVectorнепосредственно в RAM-структуру реестра (In-Memory Dictionary).
4. Схема инициализационного маппинга (Mermaid)
5. Программная реализация метода на Python
import numpy as np
from uuid import UUID
from pydantic import BaseModel
class TwinStateVector(BaseModel):
user_id: UUID
h_anxiety: float
p_impulse: float
f_night_owl: int
m_hunger: float
a_matrix: list
class InMemoryTwinRegistryLinker:
def __init__(self):
# Изолированное RAM-хранилище векторов состояний
self._states: dict[UUID, TwinStateVector] = {}
def link_twin_state(self, user_id: UUID, initial_affinity_size: int) -> None:
"""
Создает чистую математическую надстройку над
реальным user_id без дублирования его паспорта или ИИН.
"""
if user_id in self._states:
return # Предотвращение коллизий повторной инициализации
# Генерация стартовых стохастических параметров поведения
initial_vector = TwinStateVector(
user_id=user_id,
h_anxiety=float(np.random.uniform(1.0, 2.5)),
p_impulse=float(np.random.uniform(0.1, 0.4)),
f_night_owl=int(np.random.choice([0, 1], p=[0.8, 0.2])),
m_hunger=0.0,
# Равномерное распределение приверженности к SKU из каталога
a_matrix=list(np.random.uniform(0.5, 1.0, size=initial_affinity_size))
)
# Запись в оперативную память
self._states[user_id] = initial_vector