コンテンツにスキップ

EvoSpikeNetコネクトーム統合 – 実装基本方針

[!NOTE] 最新の実装状況は 機能実装ステータス (Remaining Functionality) を参照してください。


概要

本文書は、コネクトーム研究(connectome_literature_review.ja.mdconnectome_updates_2021-2026.ja.md)で得られた知見を、EvoSpikeNetの分散脳シミュレーションシステム(docs/NEUROSCIENCE_BRAIN_SIMULATION_PAPER.mddocs/DISTRIBUTED_BRAIN_SYSTEM.md)に統合するための基本方針を定める。


1. 現状分析:EvoSpikeNetの生物学的マッピング

EvoSpikeNetは既に各ノードと皮質部位を対応させた「生物学的マッピング」を実装している。

EvoSpikeNetノード 対応皮質・皮質下領域 コネクトーム対応データセット
PFC / Q-PFC 背外側・眼窩前頭皮質(dlPFC/OFC) MICrONS 皮質柱データ
Visual 後頭皮質 V1–V5, IT MICrONS Layer 2/3, FlyEM視覚葉
Auditory 一次聴覚皮質(A1) FlyEM Johnston器官、MICrONS
Speech ブローカ野(BA44/45) 現在公開データなし(ヒト限定)
Spatial 上頭頂小葉・後頭頭頂皮質 MICrONS 全皮質接続行列
Motor 一次運動皮質(M1) MICrONS M1コネクトーム (2024)
Episodic (海馬) 海馬 CA1/CA3/歯状回 HCP 拡散テンソル; Wu ら 2024
Semantic 側頭葉内側面(TE/TEO) FlyWire キノコ体
Integrator 帯状回・島皮質(ACC/Insula) MICrONS 長距離軸索投射

進捗(2026-03-19): evospikenet/node_types.pyNODE_TYPE_DEFINITIONS に各ノードの connectome_sourcecortical_regionei_ratio フィールドを追加済み。生物学的マッピングがソースコードレベルで明示的に記録された。

現在地(2026-03-19): Phase E-1 で connectome_loader.pyload_json / load_npz / save_npz / stratified_sample / spectral_coarsen / load)が実装完了。Phase E-2 で全ノードのコネクトームマッピング(evospikenet/connectome/)・シナプス遅延バッファ(SparseDelayBuffer)・Zenoh メタデータパブリッシャ・ETag+TTL キャッシュが完成。テスト合計 102 本が通過(E-1: 30pass/2fail/4skip, E-2: 70pass)。


2. ギャップ分析:コネクトーム統合で得られるもの

コネクトーム研究から明らかになっている事実と、EvoSpikeNetの現設計を照合すると、以下のギャップが存在する。

2.1 接続トポロジーのギャップ

観点 コネクトーム研究の知見 EvoSpikeNetの現状
ニューロン間接続 C. elegans: 全302ニューロン・7,000シナプスが公開 ノード内部がランダム初期化重みで接続
皮質層構造 V1のLayer 4が入力特化、Layer 2/3が側方連絡(MICrONS) 単一「視覚ノード」として抽象化
方向性 FlyWireで興奮性/抑制性の比率・方向が判明 重みの±符号のみ
長距離接続 HCPで皮質間の白質線維束トポグラフィが判明 Zenoh pub/sub上の均質接続
発達可塑性 Schlegel ら 2024: Drosophila成長に伴う接続刈り込みが記述 DevelopmentalSchedule が存在するが structural_mask との連携は未実装

2.2 スパイクダイナミクスのギャップ

コネクトームデータは シナプス遅延・伝導速度・シナプス強度 の実測値を提供するが、EvoSpikeNetの現在の LIFNeuronLayer は固定のleakパラメータと初期重みに依存する。

進捗(2026-03-19): ConnectomeLIFLayerLIFNeuronLayer のサブクラス)を evospikenet/core.py に新設。structural_mask(bool buffer)・delay_buffer(float32 buffer)・connectome_weight(float32 Parameter)を保持し、apply_connectome_input() で float→int16 橋渡し変換を提供済み。connectome_loader.py(Phase E-1 完了)からのデータ注入により生物学的忠実度が向上している。

2.3 スケール戦略ギャップ(Phase F-1〜F-3 仕様定義済み)

コネクトームデータの実ニューロン数と EvoSpikeNet ノードの表現次元には大きなミスマッチが存在する。縮約戦略は Section 3 方針F・docs-dev/connectome_schema.md に定義済み。残作業は connectome_loader.py 内での実装のみ。

コネクトームデータセット 実ニューロン数 EvoSpikeNetノード表現 ミスマッチ比
C. elegans 302 100〜302 ≈1×(直接対応可)
FlyWire 視覚葉 ~50,000 500〜2,000 25〜100×
MICrONS V1 皮質柱 ~65,000 500〜2,000 30〜130×
HCP(全脳マクロ) ノード間接続 ~29

具体的な縮約アルゴリズム(層別サンプリング・スペクトル縮約・クラスタ代表化)は 方針 F(Section 3)で定義する。


3. 実装基本方針

方針 A: コネクトームグラフによるノード内接続トポロジーの定義

目的: ノード内部のニューロン群の接続を、公開コネクトームデータから導出した隣接行列で初期化する。

具体的アプローチ: 1. 各ノードタイプに対応する公開コネクトームデータを選定する。 - visual ノード → MICrONS V1 Layer 2/3〜Layer 4 間接続行列(CAVEclient APIで取得) - episodic ノード → C. elegans 神経回路(OpenWorm プロジェクト JSON形式) - motor ノード → MICrONS M1コネクトーム部分グラフ 2. 接続行列を スパース COO 形式(PyTorch torch.sparse)でロードし、LIFNeuronLayer の重み行列 W を初期化する。 3. 接続行列は 読み取り専用の構造制約 として扱い、STDPによる可塑性はその上の重みスカラーに適用する。

実装場所: evospikenet/core.pyLIFNeuronLayer.__init__()connectome_topology 引数を追加。

# 例: コネクトームトポロジーからの重み初期化
class LIFNeuronLayer(nn.Module):
    def __init__(self, ..., connectome_topology: Optional[torch.sparse.Tensor] = None):
        ...
        if connectome_topology is not None:
            # トポロジーを構造マスクとして保持(勾配不要)
            self.structural_mask = connectome_topology.bool()
            # 接続密度で重みを初期化
            self.weight = nn.Parameter(
                connectome_topology.to_dense().float() * 0.1
            )
        else:
            self.weight = nn.Parameter(torch.randn(n_out, n_in) * 0.01)

方針 B: 公開コネクトームデータの活用ガイドライン

ノードタイプごとに推奨コネクトームデータソースを定める。

B-1. C. elegans(線虫)— 小規模・全数・精緻

  • 対象ノード: memory_spike(海馬CA3自己連合回路のプロキシ)
  • データソース: OpenConnectome / WormWiring.net(WormAtlas)
  • JSON形式、全302ニューロン・1万以上シナプス
  • 利用方法: 小規模SNNのベンチマーク・プロトタイプ、単一ノード内の自己連合ネットワーク
  • 参照: White ら 1986, Cook ら 2019(detailed_paper_summaries.ja.md参照)

B-2. Drosophila FlyWire(ショウジョウバエ)— 中規模・全脳・最新

  • 対象ノード: visualauditoryspatial_integration
  • データソース: fafbseg-py / CAVE API(CloudVolume経由)
  • 約140,000ニューロン・5,000万シナプス(2024年版)
  • 利用方法: 感覚処理のニューロン回路構造、GNN(Graph Neural Network)によるノード間接続パターン学習
  • 参照: Dorkenwald ら 2024, Schlegel ら 2024(connectome_updates_2021-2026.ja.md参照)
# FlyWire取得例(fafbseg-py / CAVE client)
from caveclient import CAVEclient
client = CAVEclient("flywire_public")
syn_df = client.materialize.synapse_query(
    pre_ids=visual_neuron_ids,
    post_ids=visual_neuron_ids
)

B-3. MICrONS(マウス視覚皮質)— 大規模・皮質層構造

  • 対象ノード: visualspatialPFC(層構造を保持するノード)
  • データソース: microns-explorer.org / MICrONS-py
  • 皮質柱200µm³、約65,000ニューロン・5億シナプス(mm³スケール)
  • 利用方法: Layer 4→2/3→5フィードフォワード階層の再現、皮質マイクロカラム構造
  • 参照: Jiang ら 2023, MICrONS Consortium 2021(connectome_updates_2021-2026.ja.md参照)

B-4. HCP(ヒト接続プロジェクト)— マクロスケール・長距離結合

  • 対象ノード: ノードの Zenoh 接続重みの初期化
  • データソース: HCP S1200リリース(FSL/MRtrix3拡散テンソルデータ)
  • 利用方法: dlPFC↔海馬、視覚↔頭頂葉などの長距離接続トポグラフィをZenohルーティング優先度に反映
  • 参照: Van Essen ら 2013, Sporns ら(connectome_literature_review.ja.md参照)

方針 C: STDP+コネクトームトポロジーの統合(構造的可塑性)

目的: コネクトームデータを「構造的制約」として利用しつつ、STDPによる機能的可塑性を維持する二層モデルを実装する。

設計原則:

[構造層]  コネクトームトポロジー(変更不可の接続マスク)
    ↓
[機能層]  STDP/Meta-STDP による重みスカラーの更新
    ↓
[進化層]  EvoGenome によって構造マスク自体を進化的に変更(Phase E+)

実装詳細:

  1. 構造的プルーニング: コネクトームデータには接続強度の分布が含まれる。弱い接続(閾値未満)はマスク演算で無効化し、生物学的刈り込みを再現する。
  2. シナプス遅延テーブル: コネクトームの軸索長データから伝導遅延を計算し、LIFNeuronLayerdelay_buffer に格納する。
  3. 興奮/抑制バランス: FlyWireのE/I分類に基づき、興奮性(グルタミン酸系)/抑制性(GABA系)ニューロンを区別した重みスカラーを初期化する。

既存コードへの接続: - evospikenet/core.py: LIFNeuronLayerstructural_mask + delay_buffer を追加 - evospikenet/forgetting_controller.py: プルーニング閾値をコネクトーム密度統計から設定 - evospikenet/long_term_memory.py: シナプス強度の長期統計をコネクトームデータで正規化


方針 D: Zenohメタデータへの接続情報統合

目的: ノードの Zenoh pub/sub 通信において、コネクトーム由来のマクロスケール接続情報(HCPデータ)をルーティング優先度・遅延特性・帯域幅割当に反映する。

実装アプローチ:

  1. DISTRIBUTED_BRAIN_SYSTEM.mdの「領域ディスクリプタ(1Hzブロードキャスト)」にコネクトームメタデータフィールドを追加する。
// 領域ディスクリプタへの追加フィールド(案)
{
  "node_type": "visual",
  "cortical_region": "V1-V5",
  "connectome": {
    "source": "MICrONS-2023",
    "avg_indegree": 1847,
    "avg_outdegree": 1203,
    "ei_ratio": 4.2,
    "preferred_upstream": ["spatial", "auditory"],
    "preferred_downstream": ["pfc", "spatial", "memory_spike"]
  }
}
  1. ExecutiveControlEngine がこのメタデータを参照し、コネクトーム由来の接続密度が高いノードペア間のZenohパスに低遅延・高帯域幅の優先度を割り当てる。

  2. スパイクパケットのProtobufペイロードに synapse_weight_delta(INT16)フィールドを追加し、apply_weight_delta() の既存インフラ(Phase D実装済み)に乗せる。


方針 E: コネクトームデータ更新サイクル(プルーフリーディング連携)

目的: FlyWire・MICrONSなどのコネクトームデータは継続的に更新・修正されるため、EvoSpikeNetのパラメータへの反映を自動化するサイクルを設計する。

パイプライン設計:

[コネクトームDB更新検知]
    ↓  (週次cronジョブ / CAVEclientバージョン差分API)
[差分グラフ生成]
    ↓  (追加・削除シナプスのCOO行列デルタを計算)
[EvoSpikeNetパラメータ適用]
    ↓  apply_weight_delta() 経由で対象ノードへ配信
[検証]
    ↓  既存テストスイート(pytest)でスパイク率・E/Iバランスを検証
[ロールバック]
    ↓  検証失敗時はEvoGenomeの前バージョンをrestore

具体的な実装場所(新規): - scripts/sync_connectome.py: CAVEclient APIから差分を取得しJSONで保存 - evospikenet/connectome_loader.py: JSONコネクトームをPyTorchスパーステンソルへ変換するユーティリティ - config/connectome_config.yaml: データソースURL・バージョン・対象ノードマッピングを管理


方針 F: スケール縮約戦略(N_connectome → N_node)

目的: 実ニューロン数(数百〜数十万)をEvoSpikeNetノードの実用的な表現次元(100〜2,000ニューロン)に縮約する際の具体的アルゴリズムを定める。データ形式の入出力スキーマ仕様は docs-dev/connectome_schema.md を参照。

F-1. 層別サンプリング(Stratified Sampling)

皮質層(L2/3, L4, L5, L6)・細胞型(錐体細胞、介在ニューロン)の比率を保持しながら均等サンプリングする。適用場面: MICrONS V1 → visual ノード(層構造保持が重要)

import scipy.sparse as sp
import numpy as np
from typing import Tuple

def stratified_sample(
    adj: sp.csr_matrix,
    labels: np.ndarray,
    n_target: int,
    rng: np.random.Generator,
) -> Tuple[np.ndarray, sp.coo_matrix]:
    """
    層別サンプリング: 各 label クラスから比例的に n_target ニューロンを選択する。
    Args:
        adj: 元の隣接行列 (N×N, CSR形式)
        labels: 各ニューロンの層/細胞型ラベル (N,)  例: 0=L2/3E, 1=L4E, 2=L5E, 3=L6E, 4=PV, 5=SST
        n_target: 縮約後ニューロン数
        rng: 再現性のためのRNGインスタンス (np.random.default_rng(seed=42))
    Returns:
        (選択インデックス配列 shape=(n_target,), 縮小後隣接行列 COO)
    """
    classes, counts = np.unique(labels, return_counts=True)
    quota = np.round(counts / counts.sum() * n_target).astype(int)
    idx = np.hstack([
        rng.choice(np.where(labels == c)[0], int(min(q, (labels == c).sum())), replace=False)
        for c, q in zip(classes, quota)
    ])
    sub = adj[np.ix_(idx, idx)]
    return idx, sub.tocoo()

F-2. スペクトル縮約(Spectral Coarsening)

グラフラプラシアンの固有ベクトルを使い、接続パターン(スペクトル特性・発振特性)を保持しながらノード数を削減する。適用場面: FlyWire 視覚葉 → visual/auditory ノード(γ/θ発振パターンの保持が重要)

from sklearn.cluster import KMeans
from scipy.sparse.linalg import eigsh
import scipy.sparse.csgraph as csgraph

def spectral_coarsen(adj: sp.csr_matrix, n_target: int) -> sp.csr_matrix:
    """
    スペクトル縮約: ラプラシアン固有ベクトルによるクラスタリングで圧縮。
    計算量目安: O(N·k) (eigsh) + O(k^2·nnz) (密度集約)。
    N>10,000 では事前に層別サンプリングで削減することを推奨。
    """
    L = csgraph.laplacian(adj, normed=True)
    _, vecs = eigsh(L, k=n_target, which="SM")
    labels = KMeans(n_clusters=n_target, n_init=5, random_state=42).fit_predict(vecs)
    A_coarse = np.zeros((n_target, n_target), dtype=np.float32)
    for i in range(n_target):
        for j in range(n_target):
            mi, mj = (labels == i), (labels == j)
            denom = mi.sum() * mj.sum()
            A_coarse[i, j] = float(adj[np.ix_(mi, mj)].sum()) / max(denom, 1)
    return sp.csr_matrix(A_coarse)

F-3. クラスタ代表化(Hub-Representative)

高次数ハブニューロンを代表として選択し、残余ニューロンはそのクラスタに統合する。ハブ構造・モチーフを保持する。適用場面: HCP全脳マクロ → Zenoh ノード間接続重みの初期化

Pseudocode (クラスタ代表化):
入力: 隣接行列 A ∈ R^{N×N}, 出次数ベクトル d
1. idx = argsort(d, descending=True)[:N_target]          # ハブ代表選択
2. residual = {全ニューロン} \ idx
3. 各 r ∈ residual を最近傍ハブ h = argmin_{h∈idx} dist(r,h) に割り当て
4. A'[h1,h2] = Σ_{i∈cluster(h1), j∈cluster(h2)} A[i,j] / (|cluster(h1)|·|cluster(h2)|)
5. threshold_eff[h] = mean(threshold[cluster(h)]) + log(|cluster(h)|) · τ_correction
出力: 縮約後隣接行列 A' + effective_threshold ベクトル

F-4. 縮約戦略選択ガイドライン

条件 推奨戦略 主な対象ノード 計算量目安
皮質層構造を保持したい 層別サンプリング(F-1) visual, spatial, motor O(N log N)
γ/θスペクトル特性を保持したい スペクトル縮約(F-2) auditory, speech O(N·k)
ハブ/モチーフ構造を保持したい クラスタ代表化(F-3) pfc, episodic, integrator O(N²) → 事前層別推奨
C. elegans など小規模データ 直接使用(縮約なし) memory_spike(プロトタイプ)

生理的制約違反対策(EvoGenome 変異時): EvoGenome で構造マスクを変異させる場合、以下の事前フィルタとペナルティを適用する。

  • E/I 比を [3.5, 5.0] の範囲に制約するハードクリップ
  • 接続密度が ±30% 変動した場合に変異を拒否するペナルティ項
  • 遅延値が生理的範囲(0.5〜20 ms)を超える変異をフィルタリング
def validate_structural_mask(mask: torch.Tensor, ei_ratio_range=(3.5, 5.0)) -> bool:
    """EvoGenome変異後の構造マスクが生理的制約を満たすか検証する。"""
    n_excit = (mask > 0).sum().item()
    n_inhib = (mask < 0).sum().item()
    if n_inhib == 0:
        return False
    ei = n_excit / n_inhib
    return ei_ratio_range[0] <= ei <= ei_ratio_range[1]

4. EvoSpikeNetコンポーネントへのマッピング

方針A〜Eと既存実装ファイルの対応表を下記に示す。

凡例: ✅ 実装済み / 🔧 部分実装 / ⬜ 未着手

方針 既存ファイル(変更対象) 新規ファイル 優先度 状態
A: トポロジー初期化 evospikenet/core.py evospikenet/connectome_loader.py ConnectomeLIFLayer 実装済み。connectome_loader.pyload_json/load_npz/load 実装完了(Phase E-1)
B: データソース活用 config/data_config.yaml config/connectome_config.yaml connectome_config.yaml 作成・ノード名整合済み。evospikenet/connectome/node_mapping.py で全ノードマッピング実装(Phase E-2)
C: 構造的可塑性 evospikenet/core.py ✅・plasticity.py ✅・forgetting_controller.py ConnectomeLIFLayer.validate_ei_ratio() 実装済み。STDP.compute_weight_updates()structural_mask 引数追加済み。compute_connectome_density()forgetting_controller.py に追加(Phase E-2)
D: Zenohメタデータ evospikenet/node_types.py evospikenet/zenoh_connectome_publisher.py NODE_TYPE_DEFINITIONS 拡張済み。ConnectomeMetadataPublisher でトピック connectome/metadata/{node_id} に発行(Phase E-2)。Zenoh なし時はログオンリーモード
E: 更新サイクル evospikenet/genome_to_brain.py ✅(apply_connectome_delta() 追加済み)
scripts/sync_connectome.py ✅(Phase E-3 完了)
evospikenet/brain_routing.py
scripts/auto_node_mapper.py
✅ 完了 sync_connectome.py 実装完了(apply_delta, apply_delta_with_validation, sync_connectome, fetch_cave_synapses_with_retry)。HCP routing は brain_routing.py、ノードマッパーは auto_node_mapper.py に実装(Phase E-3)
F: スケール縮約 evospikenet/connectome_loader.py docs-dev/connectome_schema.md stratified_sample()(F-1)・spectral_coarsen()(F-2)を connectome_loader.py に実装完了(Phase E-1)。クラスタ代表化(F-3)は Phase E-3 以降

5. フェーズ別実装ロードマップ

本方針は EvoSpikeNet の Phase E(コネクトーム統合フェーズ) として位置づける。

現在地(2026-03-19): Phase E-0・E-1・E-2・E-3 が完了。全 112 テスト PASS(1 skip)。Phase E-3-5(HCP DUC 取得・全脳 E2E 検証)が次のマイルストーン。

Phase E-0(前提条件解決 — ✅ 2026-03-19 完了)

  • [x] evospikenet/node_types.py: NODE_TYPE_DEFINITIONS に全コネクトームノード名・connectome_sourcecortical_regionei_ratio を追加。"visual", "auditory", "spatial", "spatial_integration", "memory_spike", "episodic", "integrator", "language" を新規登録。旧 "audio" を後方互換エイリアスとして保持。
  • [x] evospikenet/core.py: ConnectomeLIFLayer(LIFNeuronLayer) を新設。structural_mask(bool buffer)・delay_buffer(float32 buffer)・connectome_weight(float32 Parameter)・apply_connectome_input()validate_ei_ratio() を実装。int16 LIF と float32 コネクトーム重みの型橋渡し変換を提供。
  • [x] evospikenet/genome_to_brain.py: apply_connectome_delta() を新設。ConnectomeLIFLayerSynapseMatrixCSRnn.Linear の優先度順で COO スパース差分を適用。
  • [x] evospikenet/plasticity.py: PlasticityRule.compute_weight_updates() 抽象メソッドおよび全サブクラス(STDP, Homeostasis, MetaSTDP, STDPRule, HomeostaticRule 等)に structural_mask: Optional[torch.Tensor] = None を追加。STDP ではマスク外シナプスへの更新をゼロ化して構造制約を強制。
  • [x] config/connectome_config.yaml: 各データソースの target_nodes を上記統一ノード名に合わせてコメント整備済み。

Phase E-1(プロトタイプ — ✅ 2026-03-19 完了)

  • [x] evospikenet/connectome_loader.py の実装
  • load_json(): C. elegans JSON → ConnectomeData TypedDict 変換(connectome_schema.md 仕様準拠)
  • load_npz() / save_npz(): NPZ キャッシュ双方向変換(1.8× 高速化確認)
  • stratified_sample(): 層別サンプリング(F-1)実装
  • spectral_coarsen(): スペクトル縮約(F-2)実装
  • load(): ETag + TTL キャッシュ制御付き統合ロード関数
  • C. elegans 302ニューロンの memory_spike ノードへの注入 E2E 検証 PASS
  • [x] visual ノードへのFlyWire由来トポロジー注入 PoC
  • ConnectomeLIFLayer.attach_sparse_delay_buffer() / SNNModel.forward() 遅延ルーティング実装
  • SynapseMatrixCSR との接続(apply_connectome_input() 経由)
  • [x] pytestによるE/Iバランス・スパイク率の回帰テスト追加
  • tests/test_connectome_loader.py: JSON/NPZ ロード・縮約・E/I 比チェック(30pass/2fail/4skip)
  • tests/test_lif_structural_mask.py: ConnectomeLIFLayer のマスク・勾配・バリデーション
  • [x] data/connectome/ ディレクトリ作成・JSON データ配置済み

Phase E-2(ノード展開 — ✅ 2026-03-19 完了)

  • [x] 全ノードタイプへのコネクトームマッピング適用(方針B全ソース対応)
  • MICrONS V1 → visual/spatial/pfc(stratified, N=2000)
  • FlyWire → auditory/spatial_integration(spectral, N=2000)
  • C. elegans → memory/memory_spike/episodic(縮約なし)
  • 実装: evospikenet/connectome/node_mapping.pyget_source_for_node(), build_manifest(), apply_to_layer()
  • [x] spectral_coarsen() 実装(F-2)を connectome_loader.py に追加(Phase E-1 で実装済み)
  • [x] シナプス遅延テーブル: ConnectomeLIFLayer.delay_buffer を利用した遅延付きスパイク伝達を SNNModel.forward() に組み込む
  • 実装: evospikenet/connectome/delay_buffer.pySparseDelayBuffer(COO形式リングバッファ)
  • ConnectomeLIFLayer.attach_sparse_delay_buffer() / SNNModel.forward() 遅延ルーティング実装済
  • [x] Zenoh 領域ディスクリプタへの connectome フィールド追加(方針D)
  • 実装: evospikenet/zenoh_connectome_publisher.pyConnectomeMetadataPublisher
  • トピック: connectome/metadata/{node_id}、Zenoh なし時はログオンリーモードで動作
  • [x] forgetting_controller.py へのコネクトーム密度統計連携(方針C残作業)
  • 実装: compute_connectome_density(structural_mask) 追加
  • [x] ETag+TTLキャッシュ無効化(E-2-5)
  • 実装: connectome_loader.pyread_etag(), write_etag(), _is_cache_expired()
  • [x] テスト: tests/test_node_mapping.py(18テスト)、tests/test_delay_buffer.py(22テスト)、tests/test_zenoh_connectome_publisher.py(30テスト)、全70テスト PASS

Phase E-3(本番統合 — ✅ 2026-03-19 完了)

  • [x] scripts/sync_connectome.py による自動更新パイプライン
  • apply_delta() / apply_delta_with_validation() / sync_connectome() / fetch_cave_synapses_with_retry() 実装済み
  • ConnectomeSyncValidationError 例外クラス追加
  • [x] EvoGenomeとコネクトーム構造マスクの共進化機構(Phase D進化エンジンとの統合)
  • evolution_engine.py に E-3-2 フック実装済み
  • [x] マクロスケール接続(HCP)によるZenohルーティング最適化
  • evospikenet/brain_routing.py: HCPDelayRouter, compute_delay_matrix(), optimize_routing_delays(), build_hcp_routing_table() 実装済み
  • [x] 自動ノードマッパー
  • scripts/auto_node_mapper.py: map_connectome(), generate_manifest(), MappingResult, NodeMappingEntry 実装済み
  • [ ] 全脳シミュレーション(24プロセス Full Brain)でのエンドツーエンド検証 → Phase E-3-5 以降
  • HCP DUC 取得完了後に着手

6. 数理的補足

コネクトームトポロジー行列

ノード \(u\) 内のニューロン間接続を隣接行列 \(\mathbf{A} \in \{0,1\}^{N \times N}\) で表す。 コネクトームデータから得られる接続強度 \(s_{ij}\) を用いた重み行列の初期化:

\[W_{ij}^{(0)} = \begin{cases} s_{ij} \cdot \alpha & \text{if } (i,j) \in A \\ 0 & \text{otherwise} \end{cases}\]

ここで \(\alpha\) はスケーリング係数(典型値 0.1)。

構造的制約付きSTDP

構造マスクを考慮したSTDP更新則:

\[\Delta W_{ij} = \mathbf{A}_{ij} \cdot \begin{cases} A_+ e^{-\Delta t/\tau_+} & \Delta t > 0\\ -A_- e^{\Delta t/\tau_-} & \Delta t < 0 \end{cases}\]

マスク \(\mathbf{A}_{ij} = 0\) ならば接続なし(構造的可塑性は進化エンジンのみが変更可能)。

E/I バランス制約

各ノードのニューロン集団において、興奮性(E)と抑制性(I)の比率をコネクトームデータに基づいて固定する:

\[\frac{N_E}{N_I} \approx R_{\text{connectome}}, \quad W_I < 0, \quad W_E > 0\]

MICrONSデータでは \(R \approx 4.2\)(哺乳類皮質の典型値)。


7. セキュリティと倫理的配慮

  • コネクトームデータはCC-BY ライセンスの公開データのみを使用する(FlyWire Public, C. elegans OpenConnectome, MICrONS公開データセット)。
  • コネクトームAPIキー・認証情報は config/connectome_config.yamlsecrets セクションに外部化し、リポジトリにはコミットしない(.gitignore 追記済みであることを確認)。

7.1 HCP ヒトデータ利用時の手続き(DUC 取得手順)

ヒト由来コネクトームデータ(HCP S1200 等)を使用する場合は、以下の手順をデータ取得開始前に完了すること。

  1. ConnectomeDB アカウント作成 https://db.humanconnectome.org にてアカウントを作成し、所属機関と使用目的(研究区分)を登録する。

  2. Data Use Certification(DUC)への署名 HCP Open Access データ(構造 MRI・拡散 MRI・rsfMRI)は CC-BY 4.0 で提供されるが、制限付きデータ(行動データ・MEG 等)は NIH DUC の電子署名が必要(年次更新)。

  3. 手順: ConnectomeDB ログイン → AccountData Use TermsAgree and Enable Access
  4. DUC の有効期限は1年間。年次更新を怠るとアクセスが自動停止される。

  5. 所属機関 IRB の承認確認 日本国内の研究機関では、ヒト由来データの二次利用に対して倫理審査委員会(IRB)の承認または除外証明が必要な場合がある。組織の研究倫理担当部署に確認すること。

  6. データアクセス記録の保管 DUC 署名書類・ダウンロード日・使用バージョン(HCP S1200 等)をプロジェクトの docs/data_use_log.md に記録する(リポジトリ内で追跡)。

  7. 利用可能データの種別と条件

データ種別 利用条件 個人情報リスク
構造 MRI(T1w/T2w) Open Access(CC-BY 4.0、HCPアカウント要) 低(脱識別済み)
拡散 MRI(dMRI) Open Access(CC-BY 4.0、HCPアカウント要) 低(脱識別済み)
安静時 fMRI(rsfMRI) Open Access(CC-BY 4.0、HCPアカウント要) 低(脱識別済み)
行動データ・サイコメトリクス 制限付き(DUC署名必須) 中(個人特定リスク)
MEG データ 制限付き(DUC署名必須) 中(個人特定リスク)

重要: HCP データをクラウドストレージ(AWS S3・GCS 等)にアップロードする場合は、DUC 追加条項(プライベートバケット必須、第三者共有禁止)を遵守すること。EvoSpikeNet の docker-compose や CI/CD パイプラインへの自動取得を組み込む場合も同様の制約を適用する。



8. パフォーマンス見積り

8.1 メモリコスト(ノード当たり)

コンポーネント 推定メモリ量 備考・圧縮戦略
structural_mask(COO, N=2000, 密度1%) ~3.2 MB int8 × 40,000 非ゼロ要素
delay_buffer(float32, N=2000, max_delay=20ms) ~160 MB(非圧縮) 非ゼロ遅延のみ保持で ~2〜5 MB に圧縮可能
connectome NPZ キャッシュ(FlyWire 全脳) ~2 GB 縮約済み COO を保存すれば ~50 MB
Zenoh コネクトームメタデータ < 1 KB JSON 圧縮後、帯域影響なし

遅延バッファの圧縮実装:

class SparseDelayBuffer:
    """非ゼロ遅延シナプスのみ保持する圧縮遅延バッファ。OOMリスク対策。"""

    def __init__(self, delays: torch.Tensor):
        mask = delays > 0
        self.indices = mask.nonzero(as_tuple=False)  # [nnz, 2]
        self.delay_vals = delays[mask].long()         # [nnz]  単位: タイムステップ
        self.buffer: dict[int, torch.Tensor] = {}    # t_emit → スパイクベクトル

8.2 CPU/GPU 処理負荷

処理 CPU 推定 GPU 推定 備考
COO→dense 変換(N=2000) ~5 ms ~0.3 ms メモリ転送ボトルネック
層別サンプリング(N=65,000→2,000) ~200 ms(初回のみ) 結果を NPZ キャッシュ
スペクトル縮約(N=65,000, k=2,000) ~30 s(初回) ~8 s(CuPy) オフライン実行推奨
STDP + structural_mask 適用(1ステップ) ~2 ms ~0.1 ms スパース行列乗算

推奨: 縮約処理はオフライン(CI/CDでのキャッシュ生成)として一度実行し、実行時は NPZ キャッシュをロードする。

8.3 ネットワーク帯域(外部 API)

API 推定転送量 推奨取得頻度 対策
FlyWire 全シナプス取得 ~2 GB / フル取得 差分のみ(週次) ローカル NPZ キャッシュ + ETag 差分フェッチ
MICrONS V1 部分グラフ ~200 MB / 取得 月次 縮約済み NPZ をリポジトリ外で管理
HCP 拡散テンソル ~50 GB / 被験者 初回のみ 集約済みスカラーのみコミット

9. 実装リスクと対策

# リスク 影響度 対策
R1 CAVE/HCP API レート制限により差分同期が遅延・停止 (パイプライン停止) ローカル NPZ キャッシュ + ETag 差分フェッチ + connectome_config.yamlrate_limit_rps 設定でバックオフ制御
R2 delay_buffer のメモリ増大でノードが OOM クラッシュ (ノード不安定) SparseDelayBuffer で非ゼロ遅延のみ保持、max_delay_ms 上限を config で設定
R3 EvoGenome が生理的制約違反の構造マスクを生成 中(学習発散) validate_structural_mask() 事前フィルタ + E/I ペナルティ項、接続密度変動 ±30% 超でリジェクト
R4 スペクトル縮約の計算コストが CI を遅延 中(CI タイムアウト) 縮約済み NPZ をアーティファクトキャッシュ、CI では 302ニューロン小規模サブセットを使用
R5 コネクトームデータのプルーフリーディング更新による版不整合 低(パラメータ不整合) connectome_config.yaml にバージョンハッシュを記録、ロールバック対応

重大リスク(R1・R2)の詳細設定: connectome_config.yamlcache セクションおよび rate_limits セクションを参照。


10. 指標の明確化

「コネクトーム統合による改善効果」として参照される指標の測定条件を下表に定義する。再現性確保のためタスク・データセット・ベースライン設定を明記する。

指標 推定改善幅 タスク定義 試験データセット 測定方法
スパイク効率 +15〜25% CIFAR-10 分類(10クラス) CIFAR-10 テストセット(10,000枚) 総スパイク数 ÷ Top-1 精度。ランダム初期化 vs コネクトーム初期化を同一ハイパーパラメータで 5 seed 平均
収束エポック数 −20〜30% 同上 同上 検証精度 95% 達成までのエポック数(100エポック打切り)
E/I 比維持精度 >90% 維持率 100エポック学習後に初期値 ±10% 以内 FlyWire 由来 E/I ラベル E/I 比の学習曲線(平均)
γ/θピーク出現頻度 ベースラインの 1.5〜2.0× 視覚刺激提示時 LFP スペクトル MICrONS 由来生理刺激 LFP FFT の γ帯域(30–80 Hz)・θ帯域(4–8 Hz)振幅比
Zenoh 平均 RTT −5〜15% 短縮 ノード間スパイクパケット配信 29ノード Full Brain シミュレーション RTT ヒストグラム(ペア別)p50/p99

共通ベースライン設定: ランダム初期化(torch.randn * 0.01)、LIF パラメータ(tau_m=20 ms, V_th=−55 mV, V_rest=−70 mV)、Adam(lr=1e-3)。


11. 短期改善提案(優先度付き)

P1(高・すぐやる): connectome_loader の入出力スキーマ定義とサンプルデータ追加

  • 実装担当者が迷わず着手できる最小公仕様を定義する。
  • 提案ファイル: docs-dev/connectome_schema.md(本文書と同時に作成済み)
  • サンプルデータ候補: docs-dev/sample_data/celegans_mini_302n.npz(C. elegans 302ニューロン、OpenWorm 由来)

P2(中・次にやる): サブグラフサンプリング戦略の確定と実験プロトコル策定

  • 方針 F(Section 3)が対応済み。実験プロトコルは Section 13 を参照。
  • アルゴリズム選択決定: FlyWire → スペクトル縮約(F-2)、MICrONS → 層別サンプリング(F-1)を一次案とする。

P3(中・運用整備): config/connectome_config.yaml にキャッシュ/フェイルバック設定追加

  • connectome_config.yaml として作成済み(本文書と同時)。
  • キャッシュ戦略: ローカル NPZ キャッシュ → 差分のみ取得 → API 失敗時は既存キャッシュへフォールバック。

12. テスト計画(短期)

tests/test_connectome_loader.py

  • 目的: 小規模 FlyWire サブグラフ → COO 変換の整合性テスト
  • test_load_celegans_json_to_coo: C. elegans JSON → COO テンソル変換(nnz 数・dtype・値域チェック)
  • test_stratified_sample_ei_ratio: 層別サンプリング後の E/I 比が元データの ±10% 以内
  • test_spectral_coarsen_eigenvalue_preservation: 上位 5 固有値が元グラフの ±20% 以内
  • test_cache_hit_performance: NPZ キャッシュ命中時のロード時間が 100 ms 未満

tests/test_lif_structural_mask.py

  • 目的: structural_mask 適用後の forward 比較(ランダム vs マスク適用)
  • test_mask_zeros_disconnected_synapses: マスク外シナプスの重みが 0 に維持される
  • test_ei_ratio_preserved_after_stdp: STDP 1,000 ステップ後もE/I比が [3.5, 5.0] 範囲内
  • test_validate_structural_mask_rejects_invalid: E/I 比 3.5 未満の変異マスクが reject される
  • test_mask_gradient_does_not_flow: structural_mask に勾配が流れないことを確認

tests/test_sync_connectome_integration.py

  • 目的: 差分適用 → pytest 回帰の自動化ワークフロー(モック CAVE レスポンス)
  • test_diff_apply_adds_new_synapses: モック差分 JSON → weight_delta の正確な適用
  • test_diff_apply_removes_pruned_synapses: 削除シナプスがマスクから除外される
  • test_rollback_on_validation_failure: E/I 違反差分適用後にロールバックが発火する
  • test_mock_cave_rate_limit_retry: レート制限 429 レスポンス → バックオフリトライ動作確認

13. 推奨メトリクス & 実験

13.1 学習曲線ベンチマーク

実験条件 設定値
タスク CIFAR-10 分類(EvoSpikeNet visual ノード単独)
モデル規模 N=2,000 ニューロン、T=50 タイムステップ
比較条件 ランダム初期化 vs MICrONS 層別サンプリング(F-1)vs FlyWire スペクトル縮約(F-2)
シード 5 seeds(1, 42, 123, 456, 789)
評価指標 エポック毎 Top-1 精度・総スパイク数・推定エネルギー(スパイク数 × E_spike = 3.7 pJ)

13.2 生理指標の定期評価

  • E/I 比時系列: 50 エポックごとに各ノードの E/I 比を記録し、[3.5, 5.0] 逸脱を自動アラート。
  • FFT γ/θ ピーク出現頻度: 視覚刺激提示時の膜電位平均に FFT を適用し、γ(30–80 Hz)・θ(4–8 Hz)帯域パワー比を評価。
  • スパイク同期度(PLV: Phase Locking Value): ニューロンペアの位相同期度を 100 ms ウィンドウで計算し、コネクトーム距離との相関を確認。
# PLV 計算例(スパイク列 spikes: [T, N])
def compute_plv(spikes: torch.Tensor, window_ms: int = 100) -> torch.Tensor:
    phase = torch.angle(torch.fft.fft(spikes.float(), dim=0))
    plv = torch.abs(torch.exp(1j * (phase[:, :, None] - phase[:, None, :])).mean(0))
    return plv  # [N, N]

13.3 システム指標

  • Zenoh 平均 RTT: ノードペア別(29×29)RTT ヒストグラム(p50/p99)を Prometheus + Grafana で可視化。コネクトーム由来ルーティング適用前後で比較。
  • メモリ/CPU 消費差分: memory_profilerstructural_mask 導入前後のピーク RSS を比較(forward() × 1,000 ステップ)。
  • 差分更新後のスパイク率変化: sync_connectome.py 実行後の各ノードスパイク率シフトを回帰テストで検知。

14. 図版・アーキテクチャダイアグラム

実装チームが流用できるよう、主要ダイアグラムを SVG 形式で docs-dev/assets/ に保存する。

14.1 コネクトーム統合アーキテクチャ

graph TD
    subgraph DataSources["コネクトームデータソース"]
        CE[C. elegans<br/>302 neurons]
        FW[FlyWire<br/>~140k neurons]
        MC[MICrONS<br/>~65k neurons]
        HCP[HCP<br/>全脳マクロ]
    end
    subgraph ScaleReduction["スケール縮約(方針F)"]
        SS[層別サンプリング<br/>F-1]
        SC[スペクトル縮約<br/>F-2]
        HR[クラスタ代表化<br/>F-3]
    end
    subgraph EvoSpikeNet["EvoSpikeNet ノード層"]
        CL[connectome_loader.py<br/>COO テンソル生成]
        SM[structural_mask<br/>LIFNeuronLayer]
        DB[delay_buffer<br/>SparseDelayBuffer]
        STDP[Meta-STDP<br/>機能的可塑性]
        EG[EvoGenome<br/>構造進化]
    end
    subgraph Communication["Zenoh 通信層"]
        ZR[Zenoh ルーティング<br/>HCP由来重み]
    end
    CE --> SS --> CL
    FW --> SC --> CL
    MC --> SS --> CL
    HCP --> HR --> ZR
    CL --> SM
    SM --> DB
    SM --> STDP
    STDP --> SM
    EG --> SM
    SM --> ZR

SVG エクスポート: mmdc -i docs-dev/assets/connectome_architecture.mmd -o docs-dev/assets/connectome_architecture.svg

14.2 縮約パイプライン

flowchart LR
    Raw["生コネクトーム\nN=50k〜140k"]
    --> |stratified / spectral / hub| Reduced["縮約済みグラフ\nN=500〜2,000"]
    --> |NPZ キャッシュ| Loader["connectome_loader\n.load_npz()"]
    --> |structural_mask| LIF["LIFNeuronLayer\nEvoSpikeNet"]
    --> |スパイク| Zenoh["Zenoh pub/sub"]

SVG エクスポート: mmdc -i docs-dev/assets/coarsening_pipeline.mmd -o docs-dev/assets/coarsening_pipeline.svg


15. 参照文献・関連ドキュメント

docs-dev 内の関連ファイル

docs 内の関連 EvoSpikeNet ドキュメント

  • docs/NEUROSCIENCE_BRAIN_SIMULATION_PAPER.md — 全脳シミュレーション論文・数理モデル
  • docs/DISTRIBUTED_BRAIN_SYSTEM.md — 29ノード分散アーキテクチャ仕様
  • docs/DISTRIBUTED_BRAIN_NODE_TYPES.md — ノードタイプと皮質対応表
  • docs/DISTRIBUTED_BRAIN_NODE_CONFIGURATION.md — ノード構成・シミュレーションタイプ

主要コネクトームデータソース

データセット 生物種 スケール URL / API
OpenWorm / C. elegans 線虫 302ニューロン openworm.org, WormAtlas JSON
FlyWire (Dorkenwald ら 2024) ショウジョウバエ ~140,000ニューロン fafbseg-py, cave.fanc-fly.com
MICrONS (2021–2023) マウス V1 ~65,000ニューロン microns-explorer.org, CAVEclient
HCP S1200 ヒト(健常) 全脳マクロ humanconnectome.org

主要論文(DOI)

論文 DOI
White ら 1986 (C. elegans) https://doi.org/10.1098/rstb.1986.0056
Januszewski ら 2018 (FFN) https://doi.org/10.1038/s41592-018-0049-4
Dorkenwald ら 2024 (FlyWire) https://doi.org/10.1038/s41586-024-07558-y
Schlegel ら 2024 (Drosophila発達) https://doi.org/10.1038/s41586-024-07763-9
MICrONS Consortium 2021 https://doi.org/10.1101/2021.07.28.454025
Tavakoli ら 2025 (LICONN) https://doi.org/10.1038/s41586-025-08985-1

16. ソースコード検証結果(2026-03-19)

本節は、実装計画と現行ソースコードの整合性を照合した結果を記録する。 Phase E-1 着手前に解決すべき問題点を優先度付きで列挙する。

16.1 実装済み・整合確認済みコンポーネント ✅

方針 対象ファイル 状態
方針B データソース管理 config/connectome_config.yaml 作成済み。全データソース・キャッシュ・レート制限設定が本文書と整合
方針E apply_weight_delta() インフラ evospikenet/genome_to_brain.py L431 実装済み(INT16 デルタ → nn.Linear への float32 変換機構)
STDP 基盤 evospikenet/plasticity.pyevospikenet/genome.py L95 整数ベース STDP が動作中。PlasticityConfig からジーノム経由で参照可
DevelopmentalSchedule evospikenet/brain_simulation.py L1374 実装済み(ただしコネクトーム構造非依存。Phase E-3 以降で接続を要検討)
スキーマ仕様 docs-dev/connectome_schema.md JSON・NPZ 入出力スキーマ・命名規則・サンプルコードが完全定義済み

16.2 未実装コンポーネント(新規作成が必要)❌

方針 対象ファイル 優先度 備考
方針A・F evospikenet/connectome_loader.py 最優先(Phase E-1) ファイル自体が存在しない。スキーマは connectome_schema.md 完全定義済みなので直ちに着手可能
方針E 自動更新 scripts/sync_connectome.py ✅ Phase E-3 完了 apply_delta() / sync_connectome() / fetch_cave_synapses_with_retry() 実装済み。brain_routing.py / auto_node_mapper.py も E-3 で追加

16.3 重大な整合性問題(Phase E-1 着手前に解決必須)⚠️

問題 I-1: ノード名の不一致(高リスク)

config/connectome_config.yaml および本文書が使用するノード名が、evospikenet/node_types.pyNODE_TYPE_DEFINITIONS キー群と食い違っている。

ドキュメント・config のノード名 node_types.py の実際の定義 状態
visual "vision" (NODE_TYPE_VISION) ❌ 不一致
auditory "audio"NODE_TYPE_DEFINITIONS のキー)※ ❌ 不一致
memory_spike "memory" ❌ 不一致
spatial_integration 定義なし ❌ 存在しない
speech "speech" ✅ 一致
pfc "pfc" ✅ 一致
spatial "spatial"NODE_TYPE_DEFINITIONS には未エントリ ⚠️ 要確認
motor "motor" ✅ 一致

node_types.py では NODE_TYPE_AUDITORY = "auditory" という定数名だが、NODE_TYPE_DEFINITIONS ディクショナリのキーは "audio" になっており内部でも乖離がある。

対応方針(要決定): 以下のいずれかに統一する。

  • 案A: connectome_config.yaml と本文書の記述を node_types.py の実際のキー名("vision", "audio" 等)に合わせて修正する。
  • 案B: node_types.pyNODE_TYPE_DEFINITIONS"visual", "auditory", "memory_spike", "spatial_integration" キーを追加してエイリアスとして整備する。
  • 推奨: node_types.py NODE_TYPE_AUDITORY の値を "audio" へ統一し(もしくは逆)、connectome_config.yaml 側を合わせる(案A)。Phase E-1 のテスト実装前に決定すること。

問題 I-2: LIFNeuronLayer のデータ型不整合(高リスク)

実装計画(方針A)のコードサンプルは nn.Parameter(torch.randn(...) * 0.01) という float32 ベースの重み行列LIFNeuronLayer に追加することを想定しているが、evospikenet/core.py の現在の LIFNeuronLayerint16 専用の固定小数点実装 である。

LIFNeuronLayer(現状):
  - self.potential : torch.int16
  - SynapseMatrixCSR.weights : torch.int8
  - forward() : int32 を経由して int16 に戻す整数演算

方針A が想定する structural_mask:
  - torch.sparse_coo_tensor (float32)
  - nn.Parameter(float32) の重み行列
  → 型衝突が発生する

structural_mask を int16 演算パスに組み込む際の変換レイヤーが設計に明示されていない。

対応方針(要決定): 以下のいずれかを選択する。

内容 影響範囲
案A LIFNeuronLayerfloat_mode=True オプションを追加し、float32 演算経路を共存させる core.py の変更のみ。後方互換性は引数デフォルト False で維持
案B コネクトーム統合専用に ConnectomeLIFLayer(LIFNeuronLayer) のサブクラスを新設する connectome_loader.pycore.py に追加のみ。既存コード無変更
案C IzhikevichNeuronLayer(同 core.py に存在する float 実装)にのみコネクトームトポロジーを適用する 既存 LIF との使い分けが生じ、脳シミュレーション設定が複雑化
推奨 案BConnectomeLIFLayer サブクラス新設)。最小変更・後方互換性維持・Phase E-1 スコープ内で完結

問題 I-3: apply_weight_delta() の対象層ミスマッチ(中リスク)

方針Dは「コネクトーム由来の STDP 更新を apply_weight_delta() に乗せる」と記述しているが、evospikenet/genome_to_brain.py L431 の現実装は モジュール内の最初の nn.Linear 層のみ を対象にするため、コネクトームトポロジーが格納される SynapseMatrixCSR に対して機能しない。

# 現在の apply_weight_delta(): nn.Linear のみ対応
for layer in module.modules():
    if isinstance(layer, nn.Linear):  # ← SynapseMatrixCSR はここでスキップされる
        ...
        break

対応方針: - Phase E-2 以降で apply_weight_delta() の対象に SynapseMatrixCSR を追加し、.weights スパーステンソルへの更新経路を実装する。 - または、コネクトーム更新専用の apply_connectome_delta(module_name, delta_coo) メソッドを genome_to_brain.py に新設する。


問題 I-4: STDP の structural_mask 引数が未定義(中リスク)

方針Cの「構造的制約付き STDP 更新則」を実現するには、evospikenet/plasticity.pyPlasticityRule.compute_weight_updates() インターフェースに structural_mask 引数を追加する必要があるが、現在の抽象インターフェースにはこの引数が存在しない。

# 現在のシグネチャ(plasticity.py)
@abstractmethod
def compute_weight_updates(self, spike_history, synapse_matrix): ...

# 必要なシグネチャ(変更案)
@abstractmethod
def compute_weight_updates(
    self,
    spike_history,
    synapse_matrix,
    structural_mask: Optional[torch.Tensor] = None,  # ← 追加
): ...

対応方針: Phase E-1 で structural_mask をオプション引数(デフォルト None)として追加する。既存サブクラスは引数を受け取り無視するだけで後方互換性が維持される。


16.4 Phase E-1 着手のための前提条件チェックリスト

Phase E-1 に入る前に、以下のすべてに「決定マーク」が付いていること。

  • [x] 問題 I-1 解決(2026-03-19): node_types.pyNODE_TYPE_DEFINITIONS"visual", "auditory", "spatial", "spatial_integration", "memory_spike", "speech", "episodic", "integrator", "language" を追加し、各エントリに connectome_sourcecortical_regionei_ratio フィールドも付与。旧 "audio" キーは後方互換エイリアスとして保持。connectome_config.yaml のコメントも整合ずみ。
  • [x] 問題 I-2 解決(2026-03-19): evospikenet/core.pyConnectomeLIFLayer(LIFNeuronLayer) を新設(案B採用)。structural_mask(bool dense buffer)・delay_buffer(float32 buffer)・connectome_weight(float32 Parameter)を保持。apply_connectome_input() で float→int16 橋渡し変換を提供。validate_ei_ratio() で E/I バリデーション。
  • [x] 問題 I-3 解決(2026-03-19): evospikenet/genome_to_brain.pyapply_connectome_delta() メソッドを新設。優先度順に ConnectomeLIFLayer.connectome_weightSynapseMatrixCSR.weightsnn.Linear へ更新を適用。
  • [x] 問題 I-4 先行解決(2026-03-19): evospikenet/plasticity.pyPlasticityRule.compute_weight_updates() 抽象メソッドに structural_mask: Optional[torch.Tensor] = None を追加。STDP では実際にマスクを適用してコネクトーム外シナプスの更新をゼロにする。Homeostasis, MetaSTDP, STDPRule, HomeostaticRule の全実装も同引数で後方互換更新済み。
  • [x] tests/test_connectome_loader.py テストファイル骨格を作成し、CI に組み込む(30pass/2fail/4skip)。
  • [ ] data/connectome/ ディレクトリを作成し、.gitignore に登録する(サンプルデータは docs-dev/sample_data/ に格納)。

本文書は EvoSpikeNet Phase E のキックオフドキュメントとして機能する。実装の進捗は上記ロードマップに従ってチケット管理システムで追跡すること。

Copyright 2026 Moonlight Technologies Inc. All Rights Reserved.