← Библиотека ЭКВИЛИБРИУМ

СИСТЕМА АЛГОРИТМОВ

СИСТЕМА АЛГОРИТМОВ

Алгоритм 2: 

Полное дискретное Ходж-разложение (k=1) для WIST-741

Цель Для заданного потока (1-формы на рёбрах) \omega\in\mathbb{R}^m найти: \omega = \omega_{\mathrm{grad}} + \omega_{\mathrm{curl}} + h,

где:

Входные данные

Шаг 0. Приведение весов и метрик

0.1. Если у тебя стоимости w_e, переведи в проводимости

c_e=\exp(-w_e/\tau).

Собери:W_1=\mathrm{diag}(c_e)\in\mathbb{R}^{m\times m}.

0.2. Веса треугольников

По дефолту:

W_2=\mathrm{diag}(w_t),\quad w_t=\frac{1}{3}(c_{ij}+c_{ik}+c_{jk}).

Шаг 1. Собрать граничные операторы B и B_2

1.1. Инцидентность узел–ребро

B\in\mathbb{R}^{n\times m} по выбранной ориентации рёбер.

1.2. Инцидентность ребро–треугольник

B_2\in\mathbb{R}^{m\times p}

по канонической ориентации треугольников t=[i,j,k] (с i<j<k) и правилу:

\partial[i,j,k]=[j,k]-[i,k]+[i,j].

Шаг 2. Определить d и \delta

Дискретные дифференциалы:

d_0 = B^\top : \mathbb{R}^n\to\mathbb{R}^m,\qquad d_1 = B_2^\top : \mathbb{R}^m\to\mathbb{R}^p.

Взвешенные кодифференциалы:

\delta_1 = B W_1 : \mathbb{R}^m\to\mathbb{R}^n,

\delta_2 = W_1^{-1} B_2 W_2 : \mathbb{R}^p\to\mathbb{R}^m.

(Это согласовано со скалярными произведениями \langle\cdot,\cdot\rangle_1 = \cdot^\top W_1 \cdot и \langle\cdot,\cdot\rangle_2 = \cdot^\top W_2 \cdot.)

Шаг 3. Найти градиентную часть \omega_{\mathrm{grad}}

Решаем задачу на потенциал \varphi\in\mathbb{R}^n:

\varphi = \arg\min_{\varphi}\|\omega - d_0\varphi\|_{W_1}^2.

Нормальные уравнения:

L_0\,\varphi = \delta_1 \omega, \qquad L_0 := \delta_1 d_0 = B W_1 B^\top.

3.1. Калибровка (обязательно)

Так как L_0 имеет ядро (константы), делаем одно из:

  • фиксируем \varphi_{v_0}=0 (якорный узел)
  • или добавляем условие \sum_i \varphi_i = 0

3.2. Получаем

\omega_{\mathrm{grad}} = d_0\varphi = B^\top\varphi,

r_1 = \omega - \omega_{\mathrm{grad}}.

Контроль:

\delta_1 r_1 = 0 \quad (\text{с точностью до численной погрешности}).

Шаг 4. Найти вихревую часть \omega_{\mathrm{curl}} через \psi на треугольниках

Ищем \psi\in\mathbb{R}^p как:

\psi = \arg\min_{\psi}\|r_1 - \delta_2\psi\|_{W_1}^2.

Нормальные уравнения:

L_2\,\psi = d_1 r_1, где

L_2 := d_1 \delta_2 = B_2^\top W_1^{-1} B_2 W_2.

4.1. Калибровка для \psi

Если комплекс имеет 2-циклы, L_2 тоже может быть вырожден. Дефолт:

  • условие \sum_t \psi_t=0
    или фиксируем \psi_{t_0}=0.

4.2. Получаем

\omega_{\mathrm{curl}} = \delta_2\psi = W_1^{-1} B_2 W_2\psi,

h = r_1 - \omega_{\mathrm{curl}}.

Шаг 5. Проверки и диагностика качества

5.1. Гармоничность

Проверяем два условия:

  • дивергенция ноль:
    \|\delta_1 h\|_2 \approx 0
  • вихрь ноль:
    \|d_1 h\|_2 \approx 0

Если оба малы — разложение корректно.

5.2. Ортогональность (в W_1-метрике)

Проверяем:

\langle \omega_{\mathrm{grad}}, \omega_{\mathrm{curl}}\rangle_{1}\approx 0, \quad \langle \omega_{\mathrm{grad}}, h\rangle_{1}\approx 0, \quad \langle \omega_{\mathrm{curl}}, h\rangle_{1}\approx 0.

5.3. Энергии компонентов (диагностика “структуры души”)

Определи:

E_{\mathrm{grad}}=\|\omega_{\mathrm{grad}}\|_{W_1}^2,\quad E_{\mathrm{curl}}=\|\omega_{\mathrm{curl}}\|_{W_1}^2,\quad E_h=\|h\|_{W_1}^2.

Интерпретация:

  • большой E_{\mathrm{grad}}: система “потенциальная” (можно свести к перенастройке уровней)
  • большой E_{\mathrm{curl}}: доминируют локальные циркуляции/ритмы
  • большой E_h: сильная структурная память (не смывается диффузией)

Шаг 6. Построить 1-лапласиан и “память кристалла” как ядро

Определим Ходж-лапласиан на 1-формах:

\Delta_1 = d_0\delta_1 + \delta_2 d_1.

В матрицах (по нашим определениям):

\Delta_1 = B^\top B W_1 + W_1^{-1} B_2 W_2 B_2^\top.

Память кристалла на уровне k=1: \dim\ker(\Delta_1) \;=\; b_1

(первое число Бетти комплекса, при корректной дискретизации).

Практически:

  • найдёшь несколько собственных значений \lambda\approx 0
  • количество таких \lambda = размерность “памяти”

Выход Алгоритма 2

  • \omega_{\mathrm{grad}}\in\mathbb{R}^m
  • \omega_{\mathrm{curl}}\in\mathbb{R}^m
  • h\in\mathbb{R}^m
  • диагностические метрики: \|\delta_1 h\|, \|d_1 h\|, энергии E, и \dim\ker(\Delta_1)

Практический “минимум для запуска” на WIST-741

Если ты хочешь это внедрить без длительной подготовки:

  • Граф: kNN (k=12), веса c_e=\exp(-w_e/\tau)
  • Треугольники: клики размера 3 с cap=60/узел
  • Сборка: B, B_2, W_1, W_2
  • Решатель: два раза решить разреженные симметричные системы (для \varphi и \psi)
  • Диагностика: нормы и энергии, затем спектр \Delta_1 вблизи нуля

Если хочешь, следующим шагом я дам Алгоритм 3: “Кристалл Души — диффузия на 1-формах”: как запустить \frac{d\omega}{dt}=-\Delta_1\omega

и наблюдать, как \omega(t) стремится к h (памяти), плюс как подключить управление \mathcal{U}(t).

Алгоритм 3: 

Диффузия на 1-формах и “проявление памяти” Кристалла Души (WIST-741)

Цель

Запустить динамику на потоках (1-формах на рёбрах) так, чтобы:

  • сгладить локальные напряжения/вихри
  • выявить гармоническую компоненту h (структурную память)
  • при необходимости — управлять процессом через внешние воздействия

Вход

  • Разреженные матрицы B, B_2 (из Алгоритма 2)
  • Весовые матрицы W_1=\mathrm{diag}(c_e), W_2=\mathrm{diag}(w_t)
  • Начальный поток (1-форма) \omega_0\in\mathbb{R}^m
  • (Опционально) управление \mathcal{U}(t)\in\mathbb{R}^m или импульсы

Подготовка: собрать Ходж-лапласиан на 1-формах

Используем согласованную дефолтную форму (из Алгоритма 2):

\Delta_1 = d_0\delta_1 + \delta_2 d_1

где

d_0=B^\top,\quad \delta_1=B W_1,\quad d_1=B_2^\top,\quad \delta_2=W_1^{-1}B_2W_2.

В виде “двух вкладов”:

1) Верхний (градиентный) вклад

\Delta_{1,\mathrm{up}} = d_0\delta_1 = B^\top B W_1

2) Нижний (вихревой) вклад

\Delta_{1,\mathrm{down}} = \delta_2 d_1 = W_1^{-1} B_2 W_2 B_2^\top

Итого:

\Delta_1=\Delta_{1,\mathrm{up}}+\Delta_{1,\mathrm{down}}.

Часть A. Линейная диффузия (без управления)

A1. Непрерывная динамика

\frac{d\omega}{dt} = -\Delta_1\,\omega.

Решение формально:

\omega(t)=e^{-t\Delta_1}\,\omega_0.

Смысл: все компоненты, лежащие вне \ker(\Delta_1), затухают. Остаётся проекция на ядро — гармоническая память.

A2. Дискретизация во времени: “неявный Эйлер” (стабильный дефолт)

Выбираем шаг \Delta t>0 и считаем:

\omega_{k+1} = \omega_k - \Delta t\,\Delta_1\,\omega_{k+1}

то есть решаем линейную систему:

(I+\Delta t\,\Delta_1)\,\omega_{k+1}=\omega_k.

Почему так:

неявный шаг устойчив для любых \Delta t (важно на больших графах).

A3. Остановка: когда “память проявилась”

Остановку делаем по одному из критериев:

  • малость изменения
    \frac{\|\omega_{k+1}-\omega_k\|_{W_1}}{\|\omega_k\|_{W_1}} < \varepsilon_{\mathrm{stop}}
  • малость энергии вне ядра (остаточного “затухания”)
    \|\Delta_1\omega_k\|_2 < \varepsilon_{\mathrm{lap}}

Итог: h \approx \omega_k — проявленная гармоническая часть.

Часть B. Диагностика по ходу процесса

На каждом шаге считай три величины (полезно для “карты души”):

B1. Дивергенция (узловая “утечка/приток”)

\mathrm{div}(\omega_k)=\delta_1\omega_k=B W_1\omega_k\in\mathbb{R}^n.

B2. Вихрь (треугольная циркуляция)

\mathrm{curl}(\omega_k)=d_1\omega_k=B_2^\top\omega_k\in\mathbb{R}^p.

B3. Энергия (напряжение потока)

E(\omega_k)=\|\omega_k\|_{W_1}^2=\omega_k^\top W_1\omega_k.

Интерпретация процесса диффузии:

  • \|\mathrm{div}\| падает → уходит “узловая несбалансированность”
  • \|\mathrm{curl}\| падает → уходит локальная циркуляция
  • остаётся h, где и дивергенция, и вихрь близки к нулю

Часть C. Управляемая диффузия (вмешательство)

C1. Непрерывная управляемая модель

\frac{d\omega}{dt} = -\Delta_1\omega + \mathcal{U}(t).

C2. Дискретный неявный шаг с управлением

(I+\Delta t\,\Delta_1)\,\omega_{k+1}=\omega_k + \Delta t\,\mathcal{U}_k.

C3. Дефолт-стратегии управления (три режима)

Режим 1: “Локальный импульс”

Хотим усилить/ослабить поток на выбранном наборе рёбер S\subset E:

(\mathcal{U}_k)_e= \begin{cases} u_k(e), & e\in S\\ 0,& e\notin S \end{cases}

Режим 2: “Гашение вихря”

Вмешиваемся пропорционально вихрю:

\mathcal{U}_k = -\eta\, W_1^{-1} B_2 W_2\,(B_2^\top \omega_k)

Это прямое подавление компоненты \delta_2 d_1\omega.

Режим 3: “Сведение к потенциалу”

Вмешиваемся пропорционально дивергенции:

\mathcal{U}_k = -\eta\, B^\top (B W_1 \omega_k)

Это гасит вклад d_0\delta_1\omega.

Часть D. “Проекция на память” как альтернативный быстрый метод

Если тебе не хочется гонять время, можно сразу вычислить гармоническую часть:

h = \Pi_{\ker(\Delta_1)}\,\omega_0

Практически:

  • найти несколько собственных векторов \phi_1,\dots,\phi_r с \lambda\approx 0
  • собрать матрицу \Phi=[\phi_1\ \dots\ \phi_r]
  • проекция:
    h = \Phi(\Phi^\top W_1 \Phi)^{-1}\Phi^\top W_1 \omega_0

Диффузия же полезна тем, что даёт “треки” затухания и карты напряжений по времени.

Выход Алгоритма 3

  • последовательность \omega_k (эволюция потоков)
  • h\approx \omega_{k^\*} — проявленная гармоническая память
  • диагностические ряды: \|\delta_1\omega_k\|, \|d_1\omega_k\|, E(\omega_k)

Дефолтные параметры (чтобы не думать)

  • \Delta t = 1.0
  • \varepsilon_{\mathrm{stop}} = 10^{-4}
  • \varepsilon_{\mathrm{lap}} = 10^{-6}
  • количество шагов: максимум 200 (обычно хватит меньше)