コンテンツにスキップ

生物模倣強化プラン 実装記録

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

策定日: 2026-03-01
最終更新: 2026-03-11(Phase D 分散ノード統合完了)
基準文書: Remaining_Functionality.md Section 11, docs-dev/REMAINING_FEATURES.md
担当: GitHub Copilot / Masahiro Aoki
Copyright 2026 Moonlight Technologies Inc. All Rights Reserved.


0. エグゼクティブサマリー

0.1 Section 11(11-1 〜 11-19)の精査結果

ステータス 件数 備考
✅ 完全実装済み 19(11-1, 11-2, 11-3, 11-4, 11-5, 11-6, 11-7, 11-8, 11-9, 11-10, 11-11, 11-12, 11-13, 11-14, 11-15, 11-16, 11-17, 11-18, 11-19) ソースコード・テスト両面でコア機能が実装済み。一部モジュールに SNN コア統合・UI・前庭感覚など次フェーズ TODO あり。
🔶 部分実装(BiomimeticAdapter パイロット) 0
❌ 未実装・計画中 0

注:✅ としてカウントされた項目でも、本文の詳細欄には未完または次フェーズ用の TODO が書かれている。表の数値は“項目存在”ベースであり、完全機能レベルの保証ではない。

0.2 Phase A/B 統合完了(2026-03-06新規)

biomimetic/ モジュール群と SNN コアの統合断絕 ("the last mile") を完全解消。詳細評価: docs-dev/biomimetic_integration_evaluation.md v2.0(総合スコア 8.7/10)。

ステータス 件数 内訳
✅ Phase A (必須) 全完了 4 __init__.py API、BrainSimulationFramework、STDP⇔NeuromodulatorGate、SleepConsolidation STDP
✅ Phase B (推奨) 全完了 7 Gate/Registry ブリッジ、Izhikevich バックエンド、CorticalTopology 統合、gammatone 匿名、EfferenceCopy 適応、MirrorNeuron デフォルト分類器、DMN アイドル
✅ Phase D (分散ノード統合) 全完了 4 BrainSimulation エイリアス、deploy_genome() / deploy_to_nodes()apply_weight_delta()、genome-driven forward pass
⏳ Phase C (将来) 4 海馬→皮質転送パス、覚醒/睡眠タイムライン、neuromod REST/Zenoh、CorticalTopology⇔HierarchicalRank

現在の BiomimeticAdapterevospikenet/eeg_integration/distributed_brain_executor.py)は EEG コマンドパイプラインへの数値ゲイン付与を行う。Phase D(2026-03-11)の統合により、DistributedBrainNode が genome-driven InstantiatedBrain forward pass を実行するようになり、modulatory_gain の他にゲノム出力ベースの信頼値補正も行われる。BrainSimulationFrameworkbiomimetic/ 全モジュールを完全利用するガドレイヤーとなった。


1. 各項目の詳細未実装分析

1.1 | 11-1: 遅延と脳波リズムの導入 ✅ 完全実装

追加: - 全帯域パワーに加えてPLVを計算し、adapterが利用可能。 - adapter.rhythm_metrics がメタデータ中の参照信号でPLVを返す。

変更: BrainRhythmSynchronizer に全帯域パワー計算、位相同期、Zenoh 遅延タグメソッドを追加。BiomimeticAdapter がメトリクスを正規化し、アセチルコリン放出をトリガするように強化。

実装済み: - BiomimeticAdapter.rhythm_metrics() — δ(0.5–4 Hz) / α(8–13 Hz) 帯域パワー計算(FFT ベース)

実装済みコア機能 (evospikenet/biomimetic/rhythm_sync.py): | 実装項目 | 詳細 | |---------|------| | θ/γ/β 帯域パワー計算 ✅ | BrainRhythmSynchronizer.compute_all_bands() — delta/theta/alpha/beta/gamma 全5帯域 FFT ベース | | 位相同期 API ✅ | compute_plv() — scipy.signal.hilbert / numpy フォールバック対応 | | Zenoh 遅延タグ ✅ | zenoh_delay_tag() — ガウス雑音付き軸索伝導遅延タグ生成 | | 軸索伝導遅延モデル ✅ | AxonalConductionModel — 距離・ミエリン化・発達段階から遅延計算 | | リズム同期ステートマシン ✅ | RhythmStateMachine — desynchronized / entraining / synchronized 3状態 FSM |

残存 TODO: - Zenoh メッセージヘッダへの遅延タグ付与(evospikenet/communication.py) - BiomimeticAdapter の rhythm_metrics() との完全統合

実装済みファイル:

evospikenet/biomimetic/rhythm_sync.py  # BrainRhythmSynchronizer, AxonalConductionModel, RhythmStateMachine

コードスタブ:

# evospikenet/biomimetic/rhythm_sync.py
import numpy as np
from dataclasses import dataclass, field
from typing import Dict, Optional

BANDS = {
    "delta": (0.5, 4.0),
    "theta": (4.0, 8.0),
    "alpha": (8.0, 13.0),
    "beta":  (13.0, 30.0),
    "gamma": (30.0, 80.0),
}

@dataclass
class RhythmState:
    band_power: Dict[str, float] = field(default_factory=dict)
    phase_lock_value: float = 0.0   # PLV between modules
    dominant_freq: float = 10.0     # Hz

class BrainRhythmSynchronizer:
    """全帯域リズム計算・モジュール間位相同期管理"""

    def compute_all_bands(self, eeg: np.ndarray, fs: float = 250.0) -> Dict[str, float]:
        freqs = np.fft.rfftfreq(len(eeg), d=1.0/fs)
        psd = np.abs(np.fft.rfft(eeg)) ** 2
        power = {}
        for band, (lo, hi) in BANDS.items():
            mask = (freqs >= lo) & (freqs < hi)
            power[band] = float(psd[mask].mean()) if mask.any() else 0.0
        return power

    def compute_plv(self, signal_a: np.ndarray, signal_b: np.ndarray) -> float:
        """Phase Locking Value between two signals"""
        from scipy.signal import hilbert
        phase_a = np.angle(hilbert(signal_a))
        phase_b = np.angle(hilbert(signal_b))
        return float(np.abs(np.mean(np.exp(1j * (phase_a - phase_b)))))

    def zenoh_delay_tag(self, base_delay_ms: float, variability_ms: float = 2.0) -> float:
        """軸索伝導遅延タグ (ms)"""
        return max(0.0, base_delay_ms + np.random.randn() * variability_ms)

テスト: tests/unit/test_rhythm_sync.py
工数見積: 2週間


1.2 | 11-2: 細胞・シナプス多様化 ✅ 完全実装

変更: Tsodyks‑Markram 短期可塑性クラスと PV/SST/VIP 抑制性ニューロンスタブを追加。tests/unit/test_synapses.py に動作検証。BiomimeticAdapter の plasticity 制御部分はすでに neuromodulator 経由で実装済。

実装済み (evospikenet/synapses.py): - AMPA, NMDA, GABA クラス(τ ベース動態) - Astrocyte クラス(重み調整)

実装済みコア機能 (evospikenet/synapses.py): | 実装項目 | 詳細 | |---------|------| | 短期可塑性(STP)✅ | TsodyksMarkramSynapse(L155–193)— facilitation / depression / recovery 完全実装 | | 抑制サブタイプ ✅ | PVInhibitoryNeuron(L194), SSTInhibitoryNeuron(L208), VIPInhibitoryNeuron(L217)実装済み |

残存 TODO: | 未実装項目 | 詳細 | |-----------|------| | SNN コア統合 | plasticity.py / hierarchical_plasticity.py への synapses.py 接続なし | | ベンチマーク | 動態パラメータのスケール試験なし |

コードスタブ:

# evospikenet/synapses.py への追記
@dataclass
class STPState:
    u: float = 0.2   # utilization
    x: float = 1.0   # available vesicles

class TsodyksMarkramSynapse(Synapse):
    """Tsodyks-Markram 短期可塑性モデル"""
    def __init__(self, U: float = 0.2, tau_rec: float = 200.0, tau_fac: float = 0.0):
        super().__init__()
        self.U   = U
        self.tau_rec = tau_rec
        self.tau_fac = tau_fac
        self.stp = STPState(u=U, x=1.0)

    def transmit(self, pre_spike: float, dt: float = 1.0) -> float:
        s = self.stp
        # facilitation
        s.u += self.U * (1 - s.u)
        # transmission
        psr = s.u * s.x * pre_spike
        # depression
        s.x -= s.u * s.x
        # recovery
        s.x += (1 - s.x) * dt / self.tau_rec
        return psr

class PVInhibitoryNeuron:
    """パルブアルブミン陽性介在ニューロン (高頻度発火)"""
    pass  # IzhikevichNeuronLayer の fast-spiking パラメータセットを流用

class SSTInhibitoryNeuron:
    """ソマトスタチン陽性介在ニューロン (樹状突起標的)"""
    pass

工数見積: 1週間(STP)+ 2週間(サブタイプ統合)= 3週間


1.3 | 11-3: 層状・階層トポロジ ✅ 完全実装 【特許 MT25-EV020】

CorticalTopologyGenerator が標準レイヤテンプレート生成・複製・長距離結合・グリッド・可視化を完全サポート。単体テストで構造と各メソッドの整合性を確認済み。

未実装コア機能: 実装済みコア機能 (evospikenet/biomimetic/cortical_topology.py): | 実装項目 | 詳細 | |---------|------| | カラム/層テンプレートジェネレータ ✅ | build_column() — L1/L2/3/L4/L5/L6 テンプレートを深コピー生成 | | 前向き・逆向き長距離結合 ✅ | connect_columns_long_range() — 距離ベースのコラム間結合生成 | | カラム複製ツール ✅ | duplicate_column() — 既存コラムから新規 ID で複製 | | トポロジ可視化 ✅ | visualize_network() — networkx + matplotlib による配線図レンダリング |

実装先:

evospikenet/biomimetic/cortical_topology.py  # 新規

コードスタブ:

# evospikenet/biomimetic/cortical_topology.py
from dataclasses import dataclass, field
from typing import List, Tuple, Dict

@dataclass
class CorticalLayer:
    layer_id: str           # "L2/3", "L4", "L5", "L6"
    neuron_count: int       # 典型: L4=4000, L2/3=2000, L5=1000, L6=2000
    exc_ratio: float = 0.8  # 興奮性比率
    inh_subtypes: List[str] = field(default_factory=lambda: ["PV", "SST", "VIP"])

@dataclass
class CorticalColumn:
    column_id: str
    layers: List[CorticalLayer]
    # 前向き結合 (L4→L2/3→L5→L6)
    feedforward_paths: List[Tuple[str, str]] = field(default_factory=list)
    # 逆向き結合 (L5/6→L4/L2/3)
    feedback_paths: List[Tuple[str, str]] = field(default_factory=list)

class CorticalTopologyGenerator:
    """皮質ライク階層ネットワークの自動生成"""

    CANONICAL_TEMPLATE = [
        CorticalLayer("L1",   100,  0.0),
        CorticalLayer("L2/3", 2000, 0.8),
        CorticalLayer("L4",   4000, 0.85),
        CorticalLayer("L5",   1000, 0.8),
        CorticalLayer("L6",   2000, 0.8),
    ]

    def build_column(self, column_id: str) -> CorticalColumn:
        import copy
        layers = copy.deepcopy(self.CANONICAL_TEMPLATE)
        ff = [("L4","L2/3"), ("L2/3","L5"), ("L5","L6")]
        fb = [("L5","L4"), ("L6","L2/3")]
        return CorticalColumn(column_id, layers, ff, fb)

    def replicate(self, template: CorticalColumn, n: int) -> List[CorticalColumn]:
        return [self.build_column(f"{template.column_id}_{i}") for i in range(n)]

工数見積: 3週間


1.4 | 11-4: 調節物質と可塑性ゲーティング ✅ 完全実装 【特許 MT25-EV018】

NeuromodulatorGate と AcetylcholineModule による学習率ゲートが実装済。adapter では modulatory_gain で利用され、 VTA モデルと連携して報酬信号が更新される。さらに最近の拡張で 扁桃体感情係数・側坐核動機付けスケールがゲートに反映されるように なり、BiomimeticAdapter の睡眠状態更新でもゲート調整が行われる。# 実装済み: - BiomimeticAdapter.modulatory_gain() — ドーパミン/ノルアドレナリン相当ゲイン (0.6〜1.6) + 情動/動機付けブースト

実装済みコア機能 (evospikenet/biomimetic/neuromodulators.py): | 実装項目 | 詳細 | |---------|------| | 可塑性ゲート ✅ | NeuromodulatorGate.gated_learning_rate() — DA/ACh スケール乗算で学習率を変調 | | アセチルコリン (ACh) モジュール ✅ | AcetylcholineModule が theta 帯域連動放出・アテンションレベル係数を提供(11-16 統合済み)| | 報酬遅延ハンドリング ✅ | VTADopamineModel.update() — TD 誤差でドーパミンを更新(reward_circuit.py)|

残存 TODO: | 未実装項目 | 詳細 | |-----------|------| | ~~plasticity.py 直接統合~~ | ✅ 2026-03-11 解決 — InstantiatedBrain.apply_weight_delta() で STDP デルタをリアルタイムに nn.Linear 重みへ反映 | | オキシトシン模型 | 社会的絆・信頼強化シグナルなし | | デバッグ UI | 調節物質レベルのリアルタイム可視化パネルなし |

コードスタブ:

# evospikenet/biomimetic/neuromodulators.py
from dataclasses import dataclass

@dataclass
class NeuromodulatorState:
    dopamine: float      = 0.5   # [0,1]  — 報酬予測誤差
    noradrenaline: float = 0.5   # [0,1]  — 覚醒・アテンション
    acetylcholine: float = 0.5   # [0,1]  — エンコーディング・θ波
    serotonin: float     = 0.5   # [0,1]  — 安定・気分
    oxytocin: float      = 0.0   # [0,1]  — 社会的絆

class NeuromodulatorGate:
    """STDP学習率への調節物質ゲート"""

    def __init__(self, base_lr: float = 0.01):
        self.base_lr = base_lr
        self.state = NeuromodulatorState()

    def gated_learning_rate(self) -> float:
        """ドーパミン/ACh による学習率スケーリング"""
        da_scale = 0.5 + self.state.dopamine          # 0.5–1.5
        ach_scale = 0.8 + self.state.acetylcholine * 0.4  # 0.8–1.2
        return self.base_lr * da_scale * ach_scale

    def update_from_reward(self, reward: float, prediction: float) -> None:
        """TD誤差からドーパミンを更新"""
        td_error = reward - prediction
        da = max(0.0, min(1.0, self.state.dopamine + 0.1 * td_error))
        self.state.dopamine = da

工数見積: 2週間(ゲート統合)+ 1週間(UI)= 3週間


1.5 | 11-5: 記憶システム拡張(海馬/前頭葉) ✅ 実装済み 【特許 MT25-EV025】

(既存)

前提: evospikenet/memory_nodes.py に EpisodicMemoryNode / SemanticMemoryNode は存在するが、海馬的リプレイは含まない。

実装済みコア機能: | 機能 | 詳細 | |------|------| | 海馬風エピソードバッファ | 短期高容量エピソードリングバッファ (〜10,000 items) を HippocampalBuffer に実装 | | 優先リプレイ | prioritized_replay + replay ラッパーを実装 | | リプレイスケジューラ | ReplayScheduler クラスを追加し,バッファと連携可能 | | 前頭葉的作業記憶 | PyTorch GRU ベースの WorkingMemoryBlock を新規作成 | | 皮質統合インターフェース | HippocampalBuffer.transfer_to_semantic メソッドで semantic ノードへ転送可能 | | 評価ベンチ | MemoryEvaluator クラス、evaluate_replay_precisionforgetting_curve を追加 |

実装先:

evospikenet/biomimetic/hippocampal_memory.py  # 機能拡張
 evospikenet/biomimetic/working_memory.py       # GRU モジュール

コードスタブ:

# evospikenet/biomimetic/hippocampal_memory.py
import collections
from dataclasses import dataclass, field
from typing import Any, Deque, List

@dataclass
class Episode:
    timestamp_ns: int
    context: Any
    reward: float = 0.0
    surprise: float = 0.0  # 予測誤差(リプレイ優先度)

class HippocampalBuffer:
    """海馬風エピソードバッファ + 優先リプレイ"""
    MAX_SIZE = 10_000

    def __init__(self):
        self._buffer: Deque[Episode] = collections.deque(maxlen=self.MAX_SIZE)

    def store(self, episode: Episode) -> None:
        self._buffer.append(episode)

    def prioritized_replay(self, n: int = 32, alpha: float = 0.6) -> List[Episode]:
        """サプライズ重みベースのサンプリング"""
        import random, math
        eps = self._buffer
        if not eps:
            return []
        weights = [max(e.surprise, 1e-6) ** alpha for e in eps]
        total = sum(weights)
        probs = [w / total for w in weights]
        idx = random.choices(range(len(eps)), weights=probs, k=min(n, len(eps)))
        return [list(eps)[i] for i in idx]

# evospikenet/biomimetic/working_memory.py
import torch, torch.nn as nn

class WorkingMemoryBlock(nn.Module):
    """前頭葉作業記憶: GRU ベース再帰ループ (容量 7±2 チャンク)"""
    CAPACITY = 7

    def __init__(self, chunk_size: int = 64):
        super().__init__()
        self.gru = nn.GRU(chunk_size, chunk_size, batch_first=True)
        self.chunk_size = chunk_size
        self._hidden = None

    def reset(self):
        self._hidden = None

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        out, self._hidden = self.gru(x, self._hidden)
        return out

工数見積: 3週間


1.6 | 11-6: 感覚・運動クローズドループ強化 ✅ 完全実装 【特許 MT25-EV027】【特許 MT25-EV022】

sensory_preprocessing.py(DoG/Gabor/Gammatone + SensoryPreprocessingModule)と motor_efference.pyEfferenceCopy / ProprioceptiveFeedback)が実装済み。 scipy・skimage 非依存の numpy フォールバックも完備。test_motor_efference.py / test_sensory_motor.py でテスト済み。

実装済みコア機能: | 実装項目 | 詳細 | |---------|------| | 視覚 DoG 前処理 ✅ | dog_filter() — scipy / numpy フォールバック付き Difference-of-Gaussians | | 視覚ガボールフィルタ ✅ | gabor_bank() — skimage / numpy フォールバック付き方位×周波数フィルタバンク | | 聴覚コクレアフィルタ ✅ | gammatone_filterbank() — ERB スケール numpy 実装(32フィルタデフォルト)| | エフェレンスコピー ✅ | EfferenceCopy.record() / predict_reafference() 実装済み | | 固有感覚フィードバック ✅ | ProprioceptiveFeedback.compare() — 期待値との差分計算 |

残存 TODO: | 未実装項目 | 詳細 | |-----------|------| | 前庭感覚 | 加速度・角速度からのバランス信号(sensory_motor.py 拡張余地あり)|

実装済みファイル:

evospikenet/biomimetic/sensory_preprocessing.py  # 完全実装
evospikenet/biomimetic/motor_efference.py         # 完全実装

コードスタブ:

# evospikenet/biomimetic/sensory_preprocessing.py
import numpy as np
from scipy.ndimage import gaussian_filter

def dog_filter(image: np.ndarray, sigma1: float = 1.0, sigma2: float = 2.0) -> np.ndarray:
    """Difference of Gaussians — 網膜/LGN 前処理"""
    return gaussian_filter(image, sigma1) - gaussian_filter(image, sigma2)

def gabor_bank(thetas: int = 8, freqs: tuple = (0.1, 0.2, 0.4)) -> list:
    """V1 方位/周波数フィルタバンク"""
    from skimage.filters import gabor_kernel
    kernels = []
    for f in freqs:
        for t in range(thetas):
            theta = t * np.pi / thetas
            kernels.append(gabor_kernel(f, theta=theta))
    return kernels

def gammatone_filterbank(n_filters: int = 64, fs: float = 16000.0) -> np.ndarray:
    """蝸牛模倣ガンマトーンフィルタバンク"""
    # 実装: Brian2 / cochlea ライブラリの利用を推奨
    raise NotImplementedError("gammatone_filterbank: install 'cochlea' package")

# evospikenet/biomimetic/motor_efference.py
class EfferenceCopy:
    """エフェレンスコピー — 運動指令の内部照合"""
    def __init__(self):
        self._last_command: np.ndarray | None = None

    def record(self, motor_cmd: np.ndarray) -> None:
        self._last_command = motor_cmd.copy()

    def predict_reafference(self, sensory: np.ndarray) -> np.ndarray:
        """感覚フィードバックから自発的成分を除去"""
        if self._last_command is None:
            return sensory
        predicted = self._last_command * 0.9  # 単純線形予測 (改良余地)
        return sensory - predicted

工数見積: 4週間


1.7 | 11-7: エネルギー・ホメオスタシス制約 ✅ 完全実装

エネルギー予算クラスが以下の高負荷要因を扱うようになり、 アダプタと進化アルゴリズムの両方で利用される。

実装済み: - NodeEnergyBudget に「発火率ペナルティ」 (firing_rate_penalty) を追加。 高発火率時に energy_fitness_term() が低下する。 - energy_fitness_term() は消費ワット数と発火率双方を考慮し、 0.5〜1.5 のスケールを返す。 - BiomimeticAdapter.homeostasis_scale() がメタデータ中の energy_consumptionfiring_rate_hz を読み取り評価を更新。 - EvoGenome.apply_energy_fitness() ヘルパーで進化スコア履歴に エネルギー項が取り込まれる。 - 対応する単体テストが 21 件に追加され、挙動を網羅。

残存 TODO: | 未実装項目 | 詳細 | |-----------|------| | ノード別エネルギー予算モデル | 各ランクノードへの消費量トラッキングなし | | エネルギー可視化 | ノード別消費量ダッシュボードなし |

# evospikenet/biomimetic/energy_homeostasis.py
# (現在の実装を参照:firing_rate_penalty(), energy_fitness_term() など)

工数見積: 2週間


1.8 | 11-8: 発達ダイナミクス(臨界期/刈り込み) ✅ 完全実装 【特許 MT25-EV021】

実装済み: - DevelopmentalSchedule クラスが可塑性倍率、刈り込み判定、伝導遅延低減(ミエリン化)を提供 - CurriculumScheduler によるタスク難易度スケジューラを追加 - 単体テスト tests/unit/test_developmental_dynamics.py で各メソッドの振る舞いを網羅

補足: 以前「部分実装」としていた項目はすべてコード化済みで、テストで挙動検証が完了している。BiomimeticAdapter にも dev_gain() 呼び出しがあり開発段階に応じたゲイン調整が動作する。

残存 TODO: - より生物学的な刈り込みアルゴリズム(重要度フィルタなど) - タスク難易度と可塑性の連動を運用パイプラインに統合

# evospikenet/biomimetic/developmental_dynamics.py
import math
from dataclasses import dataclass

class DevelopmentalSchedule:
    def __init__(self, total_epochs: int = 1000):
        self.total_epochs = total_epochs

    def plasticity_multiplier(self, epoch: int) -> float:
        """エポック進行に応じて 0.1→1.0 に線形 ramp"""
        if epoch <= 0:
            return 0.1
        return float(min(1.0, 0.1 + 0.9 * (epoch / self.total_epochs)))

    def should_prune(self, epoch: int, weight: float) -> bool:
        """重み閾値が発育とともに厳しくなる"""
        threshold = 0.05 + 0.45 * (1.0 - epoch / self.total_epochs)
        return weight < threshold

    def conduction_delay_ms(self, epoch: int, base_delay_ms: float = 5.0) -> float:
        """発達に伴い伝導遅延が半分まで低下"""
        factor = 1.0 - 0.5 * min(1.0, epoch / self.total_epochs)
        return base_delay_ms * factor

class CurriculumScheduler:
    """[11-19] 難易度ステージ化"""
    def __init__(self, stages: int = 5):
        self.stages = stages

    def difficulty(self, epoch: int, total_epochs: int) -> float:
        stage = min(self.stages - 1, int(epoch / (total_epochs / self.stages)))
        return stage / float(max(1, self.stages - 1))

工数見積: 3週間


1.9 | 11-9: 目的・意図表現モジュール ✅ 完全実装 【特許 MT25-EV026】

意図モジュールはすでに evospikenet/biomimetic/intention_module.py として実装され,BiomimeticAdapter への統合及び関連テストが完了している。 脳野: 前頭前皮質(PFC) + 前帯状皮質(ACC)

実装済みコア機能 (evospikenet/biomimetic/intention_module.py): | 実装項目 | 詳細 | |---------|------| | 意図ベクトル管理 API ✅ | set_goal(), goal_vector(), goal_priority(), decay_priority() — 状態・優先度管理完備 | | PFC 融合レイヤ ✅ | pfc.py L1590 — forward(intention_priority=...) で意図スカラーを decision_vector に統合 | | 意図履歴ログ ✅ | save_history() / load_history() — JSON 永続化対応 |

残存 TODO: | 未実装項目 | 詳細 | |-----------|------| | 意図変更 UI | フロントエンドからの意図設定インターフェースなし |

実装済みファイル:

evospikenet/biomimetic/intention_module.py  # 完全実装
evospikenet/pfc.py                           # intention_priority 対応済み

コードスタブ:

# evospikenet/biomimetic/intention_module.py
import time
from dataclasses import dataclass, field
from typing import Any, List, Optional
import numpy as np

@dataclass
class IntentionState:
    goal_vector: np.ndarray      # 埋め込みベクトル (dim=128)
    subgoals: List[str]
    priority: float              # [0,1]
    timestamp: float = field(default_factory=time.time)
    source: str = "internal"     # "internal" | "external" | "reward"

class IntentionModule:
    """PFC+ACC 意図表現・計画駆動モジュール"""
    DIM = 128

    def __init__(self):
        self._current: Optional[IntentionState] = None
        self._history: List[IntentionState] = []

    def set_goal(self, goal_embedding: np.ndarray, subgoals: List[str] = [],
                 priority: float = 0.5, source: str = "internal") -> None:
        assert goal_embedding.shape == (self.DIM,)
        state = IntentionState(goal_vector=goal_embedding.copy(),
                               subgoals=subgoals, priority=priority, source=source)
        if self._current:
            self._history.append(self._current)
        self._current = state

    def current_goal(self) -> Optional[IntentionState]:
        return self._current

    def goal_similarity(self, other: np.ndarray) -> float:
        if self._current is None:
            return 0.0
        dot = float(np.dot(self._current.goal_vector, other))
        norm = float(np.linalg.norm(self._current.goal_vector) *
                     np.linalg.norm(other) + 1e-8)
        return dot / norm

    def history_json(self) -> List[dict]:
        return [{"timestamp": s.timestamp, "priority": s.priority,
                 "source": s.source, "subgoals": s.subgoals}
                for s in self._history]

工数見積: 2週間


1.10 | 11-10: 創造性生成エンジン ✅ 完全実装 【特許 MT25-EV019】

脳野: 側頭連合野, 海馬, DMN

evospikenet/biomimetic/creativity_engine.py として完全実装済み。NoveltyEvaluatorCreativityEngine が連携し、DefaultModeNetwork(11-18)の future_sim モードから呼び出される。tests/unit/test_creativity_engine.py でテスト済み。

実装済みコア機能: | 実装項目 | 詳細 | |---------|------| | 記憶再組換え演算 ✅ | CreativityEngine.recombine() — Dirichlet 重み付き確率的断片混合 | | ノベルティ評価関数 ✅ | NoveltyEvaluator.score() — 直近100件との平均コサイン距離 | | DMN フィードバックループ ✅ | DefaultModeNetwork._generate_activity()future_sim モードで呼び出し(11-18 統合済み)|

残存 TODO: | 未実装項目 | 詳細 | |-----------|------| | 生成結果監査 | 安全性・倫理フィルタ(safety_filter.py)との統合なし |

コードスタブ:

# evospikenet/biomimetic/creativity_engine.py
import numpy as np
from typing import List, Tuple

class NoveltyEvaluator:
    """生成物の新規性スコア計算"""
    def __init__(self, history_size: int = 1000):
        self._embeddings: List[np.ndarray] = []
        self.history_size = history_size

    def score(self, embedding: np.ndarray) -> float:
        """既存記憶との平均コサイン距離 → 新規性スコア [0,1]"""
        if not self._embeddings:
            return 1.0
        dists = [1 - float(np.dot(embedding, h) /
                           (np.linalg.norm(embedding) * np.linalg.norm(h) + 1e-8))
                 for h in self._embeddings[-100:]]
        return float(np.mean(dists))

    def update(self, embedding: np.ndarray) -> None:
        self._embeddings.append(embedding.copy())
        if len(self._embeddings) > self.history_size:
            self._embeddings.pop(0)

class CreativityEngine:
    """記憶再組換えによる創発的出力生成"""
    def __init__(self, novelty_evaluator: NoveltyEvaluator):
        self.evaluator = novelty_evaluator

    def recombine(self, fragments: List[np.ndarray], temperature: float = 1.0) -> np.ndarray:
        """断片の確率的混合"""
        if not fragments:
            raise ValueError("fragments must not be empty")
        weights = np.random.dirichlet([1.0 / temperature] * len(fragments))
        combined = sum(w * f for w, f in zip(weights, fragments))
        norm = np.linalg.norm(combined)
        return combined / (norm + 1e-8)

工数見積: 3週間


1.11 | 11-11: 自己認識/内省レイヤ ✅ 完全実装 【特許 MT25-EV030】

脳野: 内側前頭前皮質(mPFC), 後帯状皮質(PCC)

evospikenet/biomimetic/introspection.py として完全実装済み。SelfState データクラスと IntrospectionLayer が自己状態の記録・傾向解析・レポート生成を提供。DefaultModeNetwork の self_ref モードから利用される。tests/unit/test_introspection.py でテスト済み。

実装済みコア機能: - SelfState — performance_score / confidence / error_rate / meta_vector - IntrospectionLayer.update() — 履歴 100 件管理 - IntrospectionLayer.trend() — polyfit による改善/悪化傾向判定 - IntrospectionLayer.self_report() — dict 形式のサマリ出力

コード(参照用):

# evospikenet/biomimetic/introspection.py
import time
from dataclasses import dataclass, field
from typing import Any, Dict, List
import numpy as np

@dataclass
class SelfState:
    timestamp: float = field(default_factory=time.time)
    performance_score: float = 0.0   # 直近タスク成績
    confidence: float = 0.5          # 予測確信度
    error_rate: float = 0.0          # 直近エラー率
    meta_vector: np.ndarray = field(default_factory=lambda: np.zeros(64))

class IntrospectionLayer:
    """自身の状態・履歴をメタ的に評価するモジュール"""
    HISTORY_LEN = 100

    def __init__(self):
        self._history: List[SelfState] = []

    def update(self, state: SelfState) -> None:
        self._history.append(state)
        if len(self._history) > self.HISTORY_LEN:
            self._history.pop(0)

    def trend(self, metric: str = "performance_score") -> float:
        """直近10件の傾向 (正=改善, 負=悪化)"""
        vals = [getattr(s, metric) for s in self._history[-10:]]
        if len(vals) < 2:
            return 0.0
        return float(np.polyfit(range(len(vals)), vals, 1)[0])

    def self_report(self) -> Dict[str, Any]:
        if not self._history:
            return {}
        s = self._history[-1]
        return {"performance": s.performance_score, "confidence": s.confidence,
                "error_rate": s.error_rate, "trend": self.trend()}

工数見積: 2週間


1.12 | 11-12: 動的目標選択器 ✅ 完全実装 【特許 MT25-EV026】

脳野: 基底核(尾状核/線条体) + PFC ループ

evospikenet/biomimetic/goal_switcher.py として完全実装済み。GoalCandidateCaudateSelectorLayer(Softmax 目標選択)が実装され、select() はゼロ除算・空リスト対策も含む。tests/unit/test_goal_switcher.py でテスト済み。

実装済みコア機能: - GoalCandidate — goal_id / value / cost - CaudateSelectorLayer.select() — temperature 付き Softmax 確率的選択

コード(参照用):

# evospikenet/biomimetic/goal_switcher.py
import numpy as np
from dataclasses import dataclass
from typing import Dict, List

@dataclass
class GoalCandidate:
    goal_id: str
    value: float       # 期待価値
    cost: float = 0.0  # 切り替えコスト

class CaudateSelectorLayer:
    """尾状核模倣: 基底核 Soft-max 目標選択"""
    def __init__(self, temperature: float = 1.0):
        self.temperature = temperature

    def select(self, candidates: List[GoalCandidate]) -> GoalCandidate:
        vals = np.array([c.value - c.cost for c in candidates])
        probs = np.exp(vals / self.temperature)
        probs /= probs.sum()
        idx = np.random.choice(len(candidates), p=probs)
        return candidates[int(idx)]

工数見積: 2週間


1.13 | 11-13: 感情・情動システム(扁桃体・辺縁系) ✅ 実装済み 【特許 MT25-EV023】

概要: 扁桃体と島皮質モデルを実装し、アテンションバイアスと学習率変調を提供。 BiomimeticAdapter では modulatory_gainsleep_state がこれらの出力を 活用し、ニューススタートのゲート更新にも組み込んでいる。

実装済み機能: - AmygdalaModel.plasticity_modulator()attention_bias() が neuromodulator gate および adapter の attention バイアスに反映。 - InsulaCortex.update() により内感覚状態が生成可能。 - テスト test_emotion_system.py, test_adapter_rhythm_emotion_reward.pyが 統合動作を検証。

# evospikenet/biomimetic/emotion_system.py
import numpy as np
from dataclasses import dataclass

@dataclass
class EmotionState:
    valence: float   = 0.0
    arousal: float   = 0.5
    fear: float      = 0.0
    reward_signal: float = 0.0

class AmygdalaModel:
    """扁桃体モデル: 感情価値評価と学習率変調"""
    FEAR_THRESHOLD = 0.6

    def __init__(self):
        self.state = EmotionState()

    def evaluate(self, stimulus_embedding: np.ndarray,
                 threat_prototypes: list[np.ndarray]) -> EmotionState:
        """刺激と脅威プロトタイプの類似度から感情状態を更新"""
        if threat_prototypes:
            sims = [float(np.dot(stimulus_embedding, tp) /
                          (np.linalg.norm(stimulus_embedding) * np.linalg.norm(tp) + 1e-8))
                    for tp in threat_prototypes]
            self.state.fear = float(max(sims))
        # 単純な valence/arousal マッピング
        self.state.arousal = 0.3 + 0.7 * self.state.fear
        self.state.valence = -self.state.fear
        return self.state

    def plasticity_modulator(self) -> float:
        """感情が高い場合、記憶固定を促進 (扁桃体→海馬投射)"""
        return 1.0 + self.state.arousal * 0.5   # 1.0〜1.5

    def attention_bias(self) -> float:
        """脅威/高価値刺激へのアテンションバイアス [0,1]"""
        return min(1.0, self.state.fear + self.state.reward_signal)

class InsulaCortex:
    """島皮質モデル: 内感覚フィードバック"""
    def __init__(self):
        self.interoceptive_state: dict = {}

    def update(self, heart_rate: float, skin_conductance: float,
               respiration_rate: float) -> dict:
        self.interoceptive_state = {
            "heart_rate_norm": (heart_rate - 70) / 40,      # 正規化
            "skin_conductance": skin_conductance,
            "respiration": (respiration_rate - 15) / 10,
        }
        return self.interoceptive_state

工数見積: 3週間


1.14 | 11-14: 睡眠フェーズ・記憶固定サイクル ✅ 実装済み 【特許 MT25-EV017】

実装済み: - SleepConsolidation クラスによる δ波同期バッチリプレイ。 - δ波ピーク時に neuromodulator gate を可塑性促進状態に切替。 - BiomimeticAdapter.sleep_state() が感情・動機づけ情報でゲートを更新。 - シャープウェーブリップルメソッドと HippocampalBuffer の利用。

補足: オフライン統合のループはテストで検証済み (test_hippocampal_sleep.py)。

コードスタブ:

# evospikenet/biomimetic/sleep_consolidation.py
import asyncio, time
from typing import Any, List

class SleepConsolidation:
    """睡眠フェーズ記憶固定: バッチリプレイ + δ波トリガー可塑性"""
    REPLAY_BATCH = 32
    SLOW_WAVE_HZ = 1.0    # δ波: ~1 Hz

    def __init__(self, hippocampal_buffer, neuromod_gate):
        self.buffer = hippocampal_buffer
        self.gate   = neuromod_gate

    async def offline_consolidation(self, n_cycles: int = 10) -> None:
        """非レム睡眠相当のオフライン統合ループ"""
        for cycle in range(n_cycles):
            # δ波1周期待機
            await asyncio.sleep(1.0 / self.SLOW_WAVE_HZ)

            # δ波ピーク: 可塑性を高可塑状態に
            self.gate.state.acetylcholine = 0.2   # 低ACh → 固定モード
            self.gate.state.dopamine      = 0.8   # 高DA → 強化

            # バッチリプレイ
            episodes = self.buffer.prioritized_replay(n=self.REPLAY_BATCH)
            for ep in episodes:
                await self._replay_episode(ep)

            # 可塑性を通常に戻す
            self.gate.state.acetylcholine = 0.5
            self.gate.state.dopamine      = 0.5

    async def sharp_wave_ripple(self, duration_ms: float = 100.0) -> None:
        """シャープウェーブリップル: 高頻度バースト (100–200 Hz 模倣)"""
        n_bursts = int(duration_ms / 1000 * 150)   # 150 Hz
        for _ in range(n_bursts):
            await asyncio.sleep(1.0 / 150)
            # TODO: trigger hippocampal output spike to cortex

    async def _replay_episode(self, episode: Any) -> None:
        """エピソードをSTDP学習に再入力 (スタブ)"""
        pass  # plasticity.apply(episode.context) を呼び出す

工数見積: 3週間


1.15 | 11-15: ミラーニューロンシステム ✅ 完全実装 🟠 高優先度 【特許 MT25-EV024】

最初の MirrorNeuronSystem 提案は既に evospikenet/biomimetic/mirror_neurons.py として導入され、観察→運動マッピング、模倣報酬、オプションのポストプロセッサ機能を備える。関連テストがすべてパス済。

脳野: F5 野, 下前頭野(IFG)

コードスタブ:

# evospikenet/biomimetic/mirror_neurons.py
import numpy as np
from dataclasses import dataclass
from typing import Callable, Optional

@dataclass
class ObservedAction:
    action_embedding: np.ndarray   # 観察行動の表現
    agent_id: str
    timestamp: float

class MirrorNeuronSystem:
    """観察行動→自己運動プリミティブへのマッピング"""

    def __init__(self, motor_dim: int = 64):
        self._motor_dim = motor_dim
        self._mapping: dict = {}        # action_class -> motor_primitive
        self._imitation_reward: float = 0.0

    def register_action_class(self, action_class: str,
                               motor_primitive: np.ndarray) -> None:
        assert motor_primitive.shape == (self._motor_dim,)
        self._mapping[action_class] = motor_primitive.copy()

    def observe_and_mirror(self, observed: ObservedAction,
                            classify_fn: Callable) -> Optional[np.ndarray]:
        """観察→運動プリミティブ活性化"""
        action_class = classify_fn(observed.action_embedding)
        motor = self._mapping.get(action_class)
        if motor is not None:
            # 模倣報酬シグナル (観察との類似度)
            self._imitation_reward = float(np.dot(
                observed.action_embedding[:self._motor_dim],
                motor
            ) / (np.linalg.norm(observed.action_embedding[:self._motor_dim]) *
                 np.linalg.norm(motor) + 1e-8))
        return motor

    @property
    def imitation_reward(self) -> float:
        return self._imitation_reward

工数見積: 3週間


1.16 | 11-16: アセチルコリン系モジュール ✅ 完全実装 🟢 低優先度

脳野: 前脳基底部(basal forebrain), 海馬

実装済み: - NeuromodulatorGateacetylcholine ステートを追加し、 gated_learning_rate が ACh スケールを掛け合わせる。 - AcetylcholineModule クラスが Theta 帯乗力で放出をトリガし、 アテンションレベルに応じた記憶エンコーディング係数を返す。 - バイオミメティックアダプタの ach_module が脳波同期計測時 に呼び出される(tests/unit/test_biomimetic_adapter.py で確認)。 - 単体テスト tests/unit/test_neuromodulators.py に theta 釣動 および attention modulation を検証。

残存 TODO: - 海馬スパイクタイミング依存放出模型 - θ‑ACh と睡眠/記憶統合のエンドツーエンドテスト

# 既存の neuromodulators.py を参照

1.17 | 11-17: 側坐核・VTAループ(動機付け・報酬) ✅ 実装済み 🟠 高優先度 【特許 MT25-EV023】

脳野: 側坐核(NAcc), 腹側被蓋野(VTA)

実装内容: - VTADopamineModel に TD 更新と prediction_error 保存を実装。 - NAccMotivationScaler で予測誤差に基づく動機付けスケールを提供。 - BiomimeticAdapter の modulatory_gainsleep_state が このスケールを読み取り neuromodulator gate に反映。 - テスト test_reward_circuit.py と adapter 統合ケースがパス。

# 以下は実際の実装同様
from dataclasses import dataclass

@dataclass
class TDState:
    value: float = 0.0
    prediction_error: float = 0.0

class VTADopamineModel:
    LEARNING_RATE = 0.05
    DISCOUNT = 0.95

    def __init__(self):
        self._td = TDState()
        self._values: dict = {}

    def update(self, state_key: str, reward: float, next_state_key: str) -> float:
        v_s = self._values.get(state_key, 0.0)
        v_s1 = self._values.get(next_state_key, 0.0)
        td_error = reward + self.DISCOUNT * v_s1 - v_s
        self._values[state_key] = v_s + self.LEARNING_RATE * td_error
        self._td.value = self._values[state_key]
        self._td.prediction_error = td_error
        return td_error

class NAccMotivationScaler:
    def __init__(self, vta: VTADopamineModel):
        self.vta = vta

    def motivation_scale(self, base_drive: float = 0.5) -> float:
        prd_err = self.vta._td.prediction_error
        return max(0.0, base_drive + 0.3 * prd_err)

工数見積: 2週間


1.18 | 11-18: デフォルトモードネットワーク(DMN)専用モジュール ✅ 完全実装 🟡 中優先度 【特許 MT25-EV019】

脳野: mPFC, PCC, 角回, 海馬傍回

evospikenet/biomimetic/dmn.py として完全実装済み。DefaultModeNetwork が self_ref / future_sim / social_sim の3モードで IntrospectionLayerCreativityEngine を利用する非同期ジェネレータを提供。引数 None デフォルト対応で単独利用可能。run_idle_loop()AsyncIterator[DMNActivity] として型付けされた async generator。tests/unit/test_dmn.py でテスト済み。

実装済みコア機能: - DMNActivity — mode / content / salience - DefaultModeNetwork.run_idle_loop() — async generator(0.1 Hz) - stop() / deactivate() — 停止制御 - _generate_activity() — self_ref / future_sim / social_sim 生成ロジック

コード(参照用):

# evospikenet/biomimetic/dmn.py
import asyncio, random
import numpy as np
from dataclasses import dataclass, field
from typing import List

@dataclass
class DMNActivity:
    mode: str       # "idle" | "self_ref" | "future_sim" | "social_sim"
    content: np.ndarray = field(default_factory=lambda: np.zeros(128))
    salience: float = 0.0

class DefaultModeNetwork:
    """タスク非実行時の自発活動・自己参照・将来シミュレーション"""
    IDLE_RATE_HZ = 0.1   # アイドル活動の自発頻度

    def __init__(self, introspection_layer, creativity_engine):
        self.introspection = introspection_layer
        self.creativity    = creativity_engine
        self._active = False

    async def run_idle_loop(self, episodes: list) -> None:
        """タスク非実行期間に自発活動を生成"""
        self._active = True
        while self._active:
            await asyncio.sleep(1.0 / self.IDLE_RATE_HZ)
            mode = random.choice(["self_ref", "future_sim", "social_sim"])
            activity = self._generate_activity(mode, episodes)
            yield activity   # async generator

    def _generate_activity(self, mode: str, episodes: list) -> DMNActivity:
        if mode == "self_ref":
            report = self.introspection.self_report()
            vec = np.array(list(report.values()) if report else [0.0] * 4)
            vec = np.pad(vec, (0, 128 - len(vec)))
        elif mode == "future_sim" and episodes:
            fragments = [np.random.randn(128) for _ in episodes[:3]]
            vec = self.creativity.recombine(fragments)
        else:
            vec = np.random.randn(128) * 0.1
        norm = np.linalg.norm(vec)
        return DMNActivity(mode=mode, content=vec/(norm+1e-8), salience=float(norm))

    def deactivate(self) -> None:
        self._active = False

工数見積: 3週間


1.19 | 11-19: カリキュラム学習スケジューラ ✅ 完全実装 🟢 低優先度 【特許 MT25-EV021】

evospikenet/biomimetic/developmental_dynamics.py 内の CurriculumScheduler クラスとして完全実装済み。DevelopmentalSchedule と同ファイルに共存し、difficulty(epoch, total_epochs) メソッドで epoch に応じた難易度スケール [0,1] を返す。tests/unit/test_developmental_dynamics.py でテスト済み。

実装済みコア機能: - CurriculumScheduler.difficulty() — ステージ分割による難易度線形スケール - DevelopmentalSchedule との同ファイル統合

工数見積: ✅ 完了(11-8 と統合)


2. 優先度ランキング

優先度 項目 ID 名称 理由
🔴 最高 11-13 感情・情動システム 判断・記憶固定・アテンションバイアスに直結
🔴 最高 11-14 睡眠フェーズ・記憶固定 長期学習の安定化に不可欠
🟠 高 11-17 側坐核・VTA 報酬ループ 動機付け・ゴール駆動行動の基盤
🟠 高 11-15 ミラーニューロン 社会的学習・模倣の基盤
🟠 高 11-4 補完 可塑性ゲート統合 BiomimeticAdapter の実用化
🟠 高 11-1 補完 全帯域位相同期 リズム-可塑性連動
🟡 中 11-9 意図表現モジュール 計画・目標駆動行動
🟡 中 11-18 DMN 専用モジュール 創造性・内省の基盤
🟡 中 11-5 海馬記憶拡張 11-14 と密接連携
🟡 中 11-8 補完 刈り込み・可塑性スケジュール 発達ダイナミクス完成
🟡 中 11-3 層状トポロジ 皮質ライクな配線構造
🟡 中 11-10 創造性生成エンジン DMN 依存
🟡 中 11-11 自己認識・内省 複合タスクの前提
🟡 中 11-12 動的目標選択器 11-17 と統合
🟢 低 11-6 感覚・運動ループ強化 ロボット統合が前提
🟢 低 11-7 補完 エネルギー発火ペナルティ EVOスコア連携
🟢 低 11-16 アセチルコリン系 11-4 フレーム流用で低コスト
🟢 低 11-2 補完 STP・抑制サブタイプ統合 基礎実装は完了済み
🟢 低 11-19 カリキュラムスケジューラ 11-8 の拡張

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

〜2026 Q2 (フェーズ2A) ─ 感情・報酬・睡眠の基盤
┌─────────────────────────────────────────────────────────────────┐
│ Week 1–3 : 11-13 AmygdalaModel + InsulaCortex                  │
│ Week 4–6 : 11-17 VTADopamineModel + NAccMotivationScaler       │
│ Week 7–9 : 11-14 SleepConsolidation + HippocampalBuffer (11-5) │
│ Week 10–12: 統合テスト + BiomimeticAdapter 完全接続           │
└─────────────────────────────────────────────────────────────────┘

〜2026 Q3 (フェーズ2B) ─ 高次認知・社会性
┌─────────────────────────────────────────────────────────────────┐
│ Week 1–3 : 11-1 全帯域リズム + Zenoh 遅延タグ完成             │
│ Week 4–6 : 11-4 NeuromodulatorGate → plasticity.py 接続       │
│ Week 7–9 : 11-15 MirrorNeuronSystem                           │
│ Week 10–12: 11-9 IntentionModule + PFC融合拡張                │
└─────────────────────────────────────────────────────────────────┘

〜2026 Q4 (フェーズ3) ─ 自律性・アーキテクチャ完成
┌─────────────────────────────────────────────────────────────────┐
│ Week 1–3 : 11-8 補完(刈り込み・ミエリン化)+ 11-19             │
│ Week 4–6 : 11-3 CorticalTopologyGenerator                     │
│ Week 7–9 : 11-18 DMN + 11-10 CreativityEngine                │
│ Week 10–12: 11-11 IntrospectionLayer + 11-12 CaudateSelector  │
└─────────────────────────────────────────────────────────────────┘

〜2027 Q1 (フェーズ4) ─ 感覚・運動・エネルギー
┌─────────────────────────────────────────────────────────────────┐
│ 11-6 感覚・運動ループ(DoG/Gabor/蝸牛/前庭)                    │
│ 11-7 補完(発火率ペナルティ + 進化スコア統合)                  │
│ 11-16 アセチルコリン系(11-4 フレーム拡張)                    │
└─────────────────────────────────────────────────────────────────┘

4. モジュール依存関係グラフ

BiomimeticAdapter (既存)
    ├── rhythm_metrics()       ──→ [11-1] BrainRhythmSynchronizer
    ├── modulatory_gain()      ──→ [11-4] NeuromodulatorGate
    │                                  └──→ [11-16] AcetylcholineModule
    ├── homeostasis_scale()    ──→ [11-7] NodeEnergyBudget
    ├── dev_gain()             ──→ [11-8] DevelopmentalSchedule
    │                                  └──→ [11-19] CurriculumScheduler
    └── sleep_state()          ──→ [11-14] SleepConsolidation
                                       ├──→ [11-5] HippocampalBuffer
                                       └──→ [11-1] rhythm_metrics (δ 波)

[11-13] AmygdalaModel
    ├── plasticity_modulator() ──→ plasticity.py (STDP 学習率変調)
    ├── attention_bias()       ──→ spatial_processing.py (アテンション制御)
    └──→ [11-14] SleepConsolidation (感情強化リプレイ優先度)

[11-17] VTADopamineModel
    ├──→ [11-4] NeuromodulatorGate.state.dopamine 更新
    └──→ [11-12] CaudateSelectorLayer (動的目標選択)

[11-9] IntentionModule
    ├──→ evospikenet/pfc.py (PFC融合レイヤ拡張)
    └──→ [11-12] CaudateSelectorLayer

[11-10] CreativityEngine
    ├──→ [11-5] HippocampalBuffer (記憶断片取得)
    └──→ [11-18] DefaultModeNetwork

[11-11] IntrospectionLayer
    └──→ [11-18] DefaultModeNetwork (自己参照コンテンツ生成)

[11-15] MirrorNeuronSystem
    └──→ [11-17] NAccMotivationScaler (模倣報酬シグナル)

[11-3] CorticalTopologyGenerator
    ├──→ [11-2] TsodyksMarkramSynapse (各レイヤのシナプス型)
    └──→ evospikenet/hierarchical_plasticity.py

[11-6] SensoryPreprocessing
    └──→ evospikenet/spatial_processing.py (V1 前処理追加)

5. 実装ガイドライン

5.1 ファイル構成

evospikenet/
└── biomimetic/                        # 新規パッケージ
    ├── __init__.py
    ├── rhythm_sync.py                 # [11-1]
    ├── cortical_topology.py           # [11-3]
    ├── neuromodulators.py             # [11-4] + [11-16]
    ├── hippocampal_memory.py          # [11-5]
    ├── working_memory.py              # [11-5 続き]
    ├── sensory_preprocessing.py       # [11-6]
    ├── motor_efference.py             # [11-6 続き]
    ├── energy_homeostasis.py          # [11-7]
    ├── developmental_dynamics.py      # [11-8] + [11-19]
    ├── intention_module.py            # [11-9]
    ├── creativity_engine.py           # [11-10]
    ├── introspection.py               # [11-11]
    ├── goal_switcher.py               # [11-12]
    ├── emotion_system.py              # [11-13]
    ├── sleep_consolidation.py         # [11-14]
    ├── mirror_neurons.py              # [11-15]
    ├── reward_circuit.py              # [11-17]
    └── dmn.py                         # [11-18]

tests/unit/
├── test_rhythm_sync.py
├── test_emotion_system.py
├── test_sleep_consolidation.py
├── test_reward_circuit.py
├── test_mirror_neurons.py
├── test_intention_module.py
├── test_hippocampal_memory.py
├── test_developmental_dynamics.py
├── test_dmn.py
└── test_cortical_topology.py

tests/integration/
└── test_biomimetic_full_pipeline.py   # 全モジュール結合テスト

5.2 BiomimeticAdapter への統合方針

既存の BiomimeticAdapter は段階的に拡張する。新規モジュールは独立して動作し、BiomimeticAdapterapply() メソッドで各モジュールを呼び出すファサードパターンを採用する。

# evospikenet/eeg_integration/distributed_brain_executor.py への追記イメージ
class BiomimeticAdapter:
    def __init__(self, config):
        ...
        # フェーズ2A (Q2)
        self.emotion      = AmygdalaModel()            # [11-13]
        self.vta          = VTADopamineModel()         # [11-17]
        self.sleep_cons   = SleepConsolidation(...)    # [11-14]

        # フェーズ2B (Q3)
        self.rhythm_sync  = BrainRhythmSynchronizer()  # [11-1]
        self.neuromod     = NeuromodulatorGate()        # [11-4]
        self.mirror       = MirrorNeuronSystem()        # [11-15]
        self.intention    = IntentionModule()           # [11-9]

    def apply(self, eeg_data, metadata, command) -> dict:
        """統合ゲイン計算 (後方互換)"""
        rhythms  = self.rhythm_sync.compute_all_bands(eeg_data)
        emotion  = self.emotion.evaluate(...)
        td_error = self.vta.update(...)
        ...
        return {"biomimetic_gain": ..., "emotion_state": ..., ...}

5.3 テスト戦略

  • 各モジュールは独立してユニットテスト可能(依存は pytest.fixture で差し替え)
  • 統合テスト test_biomimetic_full_pipeline.py は Docker (dev/ubuntu:22.04/CPU) で実行
  • パフォーマンステスト: BiomimeticAdapter.apply() の実行時間 < 5 ms/コール

5.4 実装順序の原則

  1. コードスタブを先にコミット → CI/CD が通ることを確認
  2. ユニットテストを先に書く(TDD)
  3. BiomimeticAdapter への統合は各モジュールのテスト完了後
  4. 感情(11-13)→ 睡眠固定(11-14) の順序依存に注意

6. 工数・リソース見積サマリー

フェーズ 含まれる項目 合計工数 完了目標
2A (感情・報酬・睡眠) 11-13, 11-17, 11-14, 11-5 11週 2026-Q2 末
2B (リズム・可塑性・社会) 11-1補完, 11-4補完, 11-15, 11-9 10週 2026-Q3 末
3 (高次認知・構造) 11-8, 11-3, 11-18, 11-10, 11-11, 11-12 16週 2026-Q4 末
4 (感覚・運動・エネルギー) 11-6, 11-7, 11-16, 11-2補完, 11-19 8週 2027-Q1 末
合計 19項目 〜45週 2027-Q1

7. リスクと軽減策

リスク 影響 軽減策
感情状態が既存テストに干渉 既存23件テスト破損 emotion フラグで無効化デフォルト
睡眠バッファのメモリ増大 OOM 発生 バッファ上限 (MAX_SIZE=10,000) 強制
δ波トリガーループのデッドロック 分散処理停止 asyncio タイムアウト (10s) 必須設定
NeuromodulatorGate が学習発散を引き起こす STDP 暴走 gated_lr に上限 (≤5×base_lr) の clamp
PFC 意図ベクトルとの競合 既存 PFC テスト失敗 既存インターフェースを保持し extend のみ

8. 参考文献・実装基準

  • Tsodyks-Markram STP モデル: Tsodyks & Markram (1997), PNAS
  • 海馬シャープウェーブリップル: Buzsáki (2015), Neuron
  • 側坐核-VTA TD モデル: Schultz et al. (1997), Science
  • ミラーニューロン: Rizzolatti & Craighero (2004), Annu. Rev. Neurosci.
  • DMN & 自発活動: Raichle et al. (2001), PNAS
  • Gabor/DoG 視覚前処理: Daugman (1985), JOSAA
  • 睡眠Memory固定: Wilson & McNaughton (1994), Science

このドキュメントは Remaining_Functionality.md Section 11 および docs-dev/REMAINING_FEATURES.md の精査に基づいて策定されました。実装進捗に従い随時更新してください。


9. Phase A/B 統合記録(2026-03-06)

本セクションは、Section 11 完了後に実施した「最後のマイル」統合作業(Phase A/B)の記録です。

9.1 BrainSimulationFrameworkbiomimetic/ 全モジュール統合レイヤー

from evospikenet.brain_simulation import BrainSimulationFramework

framework = BrainSimulationFramework(enable_biomimetic=True)
result = framework.run_simulation(duration=1000)    # 6段階: 発達・制御・STDP・エネルギー・海馬・睡眠

activities = await framework.run_idle_phase(duration_s=10.0)  # DMN アイドルサイクル
status = framework.biomimetic_status()  # 全モジュール状態スナップショット

内部ウォークスルー:

BrainSimulationFramework.run_simulation(t)
 ├─ ① DevelopmentalSchedule.plasticity_multiplier(t)    ← biomimetic ✅
 ├─ ② NeuralCircuitModeler.simulate_timestep()            ← Izhikevich 対応 (B-2) ✅
 ├─ ③ STDP × NeuromodulatorGate.gated_learning_rate()     ← biomimetic (A-3) ✅
 ├─ ④ NodeEnergyBudget.energy_fitness_term() → weight 制御 ← biomimetic ✅
 ├─ ⑤ HippocampalBuffer.store(episode)                    ← biomimetic ✅
 └─ ⑥ SleepConsolidation.offline_consolidation()           ← biomimetic (A-4) ✅

9.2 Izhikevich バックエンド(B-2)

from evospikenet.brain_simulation import NeuralCircuitModeler, NeuralCircuitConfig

cfg = NeuralCircuitConfig(num_neurons=100, num_inputs=10, connectivity=0.2)
circuit = NeuralCircuitModeler(cfg, neuron_type="izhikevich")
spikes, membrane_v = circuit.simulate_timestep(input_current, t=0)
# 内部で IzhikevichNeuron.step(input, dt) を全ニューロンに呼び出す

9.3 CorticalTopologyGeneratorBrainRegionIntegrator(B-3)

from evospikenet.biomimetic import CorticalTopologyGenerator
from evospikenet.brain_simulation import BrainRegionIntegrator

gen = CorticalTopologyGenerator()
integrator = BrainRegionIntegrator()
added = integrator.add_cortical_topology(gen, nx_cols=4, ny_cols=4)
# 16 カラムが BrainRegionConfig として登録され、近隣 √2 mm 内で小世界的接続

9.4 STDP ⇔ NeuromodulatorGate(A-3)

from evospikenet.biomimetic import NeuromodulatorGate
from evospikenet.plasticity import STDP

gate = NeuromodulatorGate()
stdp = STDP.with_neuromodulation(gate)       # ファクトリメソッド
# または
stdp.connect_plasticity_gate(gate)           # 後付け接続

9.5 NeuromodulatorGate ⇔ NeuromodulatorRegistry(B-1)

from evospikenet.biomimetic import NeuromodulatorGate, NeuromodulatorRegistry

registry = NeuromodulatorRegistry()
gate = NeuromodulatorGate()
gate.connect_to_registry(registry)   # 双方向ブリッジ確立
gate.push_to_registry()              # Gate 状態 → Registry
gate.pull_from_registry()            # Registry 値 → Gate state

9.6 テスト整備

テストファイル 内容
tests/unit/test_biomimetic_init_api.py __init__.py 全シンボル検証
tests/unit/test_stdp_neuromodulation.py STDP ⇔ Gate 配線
tests/unit/test_sleep_consolidation_stdp.py STDP リプレイ、offline_consolidation()stats
tests/unit/test_efference_copy_adaptive.py 適応ゲイン、reset()
tests/unit/test_mirror_neurons_default_classify.py _default_classify()、後方互換性
tests/integration/test_brain_simulation_biomimetic.py BrainSimulationFramework フル統合
tests/integration/test_dmn_idle_phase.py run_idle_phase()、DMN 停止確認
# Docker
docker compose -f docker-compose.test.yml --profile biomimetic run --rm biomimetic-test

10. Phase D — 分散ノード統合(2026-03-11)

本セクションは、生物模倣モジュールを DistributedBrainNode レベルで動作させるために実施した修正の記録です。

10.1 BrainSimulation エイリアスの追加

distributed_brain_node.pyfrom evospikenet.brain_simulation import BrainSimulation によりインポートしていたが、当該クラスが存在せず ImportError が発生していた。brain_simulation.py 末尾に BrainSimulation(BrainSimulationFramework) ラッパークラスを追加して解消した。

# evospikenet/brain_simulation.py(末尾に追記)
class BrainSimulation(BrainSimulationFramework):
    """DistributedBrainNode 互換エイリアス。"""
    def __init__(self, node_id: str = "node", config: dict | None = None, **kwargs):
        cfg = config or {}
        circuit_config = NeuralCircuitConfig(num_neurons=int(cfg.get("neuron_count", 1000)))
        super().__init__(circuit_config=circuit_config, **kwargs)
        self.node_id = node_id
        self.node_config = cfg
        self.specialization: str = str(cfg.get("specialization", "general"))

10.2 InstantiatedBrain.apply_weight_delta()

STDP の apply_plasticity_update() は INT16 デルタテンソルを計算して返すが、実際の重みへの適用手段がなかった。InstantiatedBrainapply_weight_delta() を追加して解消した。

# evospikenet/genome_to_brain.py — InstantiatedBrain クラスへの追加
def apply_weight_delta(self, module_name: str, delta: torch.Tensor,
                       learning_rate: float = 1e-4) -> None:
    """INT16 STDP デルタを nn.Linear 重みにインプレース適用する。"""
    # delta / 32767 × lr でスケーリングし、形状が合う最初の Linear 層を更新

使用フロー:

delta = brain.apply_plasticity_update("pfc", spike_hist, syn_mat)
if delta is not None:
    brain.apply_weight_delta("pfc", delta)   # 重みへの即時反映

10.3 DistributedBrainNode.deploy_genome() と genome-driven forward pass

DistributedBrainNode がゲノムを受け取る仕組みがなく、素の BrainSimulation だけで動作していた。deploy_genome() メソッドを追加し、_process_brain_command() 内で InstantiatedBrain を経由した forward pass を行うように変更した。

def deploy_genome(self, genome) -> None:
    """EvoGenome を InstantiatedBrain としてノードに展開する。"""
    from evospikenet.genome_to_brain import GenomeToBrainConverter
    self.instantiated_brain = GenomeToBrainConverter().instantiate(genome)

10.4 DistributedEvolutionEngine.deploy_to_nodes()

進化エンジンから分散ノードへのブリッジが欠如していた。deploy_to_nodes(nodes) メソッドを追加した。

def deploy_to_nodes(self, nodes: list) -> None:
    """best_genome を DistributedBrainNode の一覧に一括展開する。"""
    for node in nodes:
        if hasattr(node, "deploy_genome") and self.best_genome is not None:
            node.deploy_genome(self.best_genome)

10.5 変更ファイル一覧

ファイル 変更内容
evospikenet/brain_simulation.py BrainSimulation ラッパークラス追加
evospikenet/genome_to_brain.py InstantiatedBrain.apply_weight_delta() 追加
evospikenet/distributed_brain_node.py deploy_genome() + genome forward pass + get_stats() 更新
evospikenet/distributed_evolution_engine.py deploy_to_nodes() 追加