Перейти к содержанию

Genome dag

Определение 3.1

Геном CNN-NEAT — ориентированный ациклический граф \(G = (V, E)\), где \(V = V_\text{in} \cup V_\text{hidden} \cup \{o\}\), \(E \subseteq V \times V\).

3.1 Граф генома (DAG)

Геном представляет собой ориентированный ациклический граф \(G = (V, E)\).

Множество вершин \(V = V_\text{in} \cup V_\text{hidden} \cup \{o\}\):

  • Входные вершины (views): \(V_\text{in} = \{0, 1, \ldots, V-1\}\), где \(V =\) num_input_views (по умолчанию \(V=1\)).
  • Выходная вершина (fusion output): \(o = V\) (фиксированный ID).
  • Скрытые вершины: целые ID, назначаемые при split-мутации: \(\text{id}_\text{new} = \max(V_\text{all}) + 1\).

Множество рёбер \(E\): каждое ребро \((u \to w) \in E\) описывается объектом ConvolutionConnectionGene с параметрами \((k_h, k_w, p_h, p_w, s=1, \sigma, \text{enabled})\), где \(\sigma\) — масштаб инициализации весов.

DAG-инварианты (проверяются при каждой структурной мутации):

  1. Граф ацикличен: топологическая сортировка существует.
  2. Self-loop запрещены: \(u \neq w\) для всех \((u,w) \in E\).
  3. Добавление \((u \to w)\) отклоняется, если существует путь \(w \leadsto u\).

Хэш топологии:

\[ \text{hash}(G) = \text{SHA-256}\!\Big(\text{JSON}\!\big([(u, w, (k_h, k_w)) \mid (u,w) \in E_\text{enabled},\;\text{sorted}]\big)\Big) \]

Хэш используется для гарантии уникальности топологий внутри одного run.

Минимальная инициализация (minimal_connections=True): для каждого входа \(i \in V_\text{in}\) создаётся прямое ребро \(i \to o\).