СИСТЕМА АЛГОРИТМОВ
Алгоритм 2:
Полное дискретное Ходж-разложение (k=1) для WIST-741
Цель Для заданного потока (1-формы на рёбрах) \omega\in\mathbb{R}^m найти: \omega = \omega_{\mathrm{grad}} + \omega_{\mathrm{curl}} + h,
где:
- \omega_{\mathrm{grad}} = d_0\varphi = B^\top\varphi,
- \omega_{\mathrm{curl}} = \delta_2\psi,
- h — гармоническая 1-форма, удовлетворяющая
\delta_1 h = 0,\qquad d_1 h = 0.
Входные данные
- Ориентированный граф G=(V,E), |V|=n=741, |E|=m.
- Веса рёбер (проводимости) c_e>0 или стоимости w_e>0.
- Треугольники F (2-симплексы) по Default Triangles v0.1, |F|=p.
- Поток \omega\in\mathbb{R}^m на ориентированных рёбрах.
Шаг 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 (обычно хватит меньше)