lc_cross_silo (faber_neuroevolution v1.2.4)
View SourceCross-Silo Communication Coordinator for Liquid Conglomerate.
Part of the Liquid Conglomerate v2 event-driven architecture. This module subscribes to silo signal events and aggregates them for consumers.
Event-Driven Architecture
Silos publish signals via silo_events:publish_signal/3 to topic-based pub/sub. This module subscribes to all silo topics and maintains an aggregated view for backward compatibility and efficient querying.
Architecture
The LC routes ~60+ named signals between 13 specialized silos:
Core Silos (Original): Task Silo: Evolution optimization (tau = 50) Resource Silo: System stability (tau = 5) Distribution Silo: Mesh networking (tau = 1)
Extension Silos (LC v2): Temporal Silo: Episode timing, early termination (tau = 10) Competitive Silo: Opponent archives, Elo ratings (tau = 50) Social Silo: Reputation, coalitions, mentoring (tau = 50) Cultural Silo: Innovations, traditions, imitation (tau = 100) Ecological Silo: Niches, carrying capacity, stress (tau = 100) Morphological Silo: Network size, pruning (tau = 30) Developmental Silo: Ontogeny, critical periods (tau = 100) Regulatory Silo: Gene expression, module activation (tau = 50) Economic Silo: Compute budgets, energy economics (tau = 20) Communication Silo: Vocabulary, coordination (tau = 30)
Signal Naming Convention
Pressure signals: constraint indicators (0-1, higher = more constrained) Boost signals: enhancement requests (0-1, higher = more boost) Score signals: quality metrics (0-1, higher = better) Rate signals: frequency indicators (0-1, higher = more frequent)
Signal Decay
Signals not updated within decay_ms (default 30s) decay toward neutral: Pressure/boost signals decay to 0.0, balance signals decay to 0.5.
Summary
Functions
Emit a signal from one silo to another.
Emit multiple signals from one silo to another.
Get all signals for all silos.
Get effective evaluations per individual (negotiated between silos).
Get all signals destined for a specific silo.
Start the cross-silo coordinator with default configuration.
Start the cross-silo coordinator with custom configuration. If the coordinator is already running, returns the existing pid.
Subscribe to signals for a specific silo.
Unsubscribe from signals for a specific silo.
Functions
Emit a signal from one silo to another.
Example: emit(resource, task, pressure_signal, 0.7)
Emit multiple signals from one silo to another.
-spec get_all_signals() -> map().
Get all signals for all silos.
-spec get_effective_evals_per_individual() -> pos_integer().
Get effective evaluations per individual (negotiated between silos).
This resolves the shared resource conflict: - Resource Silo sets max based on pressure - Task Silo requests desired based on fitness variance - Effective = min(resource_max, task_desired)
Get all signals destined for a specific silo.
Start the cross-silo coordinator with default configuration.
Start the cross-silo coordinator with custom configuration. If the coordinator is already running, returns the existing pid.
Subscribe to signals for a specific silo.
The callback will be invoked whenever signals change.
-spec unsubscribe(atom()) -> ok.
Unsubscribe from signals for a specific silo.