lc_supervisor (macula_neuroevolution v0.29.1)

View Source

Liquid Conglomerate Supervisor.

Supervises all 13 silos of the Liquid Conglomerate v2 architecture:

**Core Silos (Always Enabled):** Task Silo: Evolution optimization (τ = 50) Resource Silo: System stability (τ = 5)

**Optional Silos (Enable via Config):** Distribution Silo: Mesh networking (τ = 1) Temporal Silo: Episode timing (τ = 10) Competitive Silo: Opponent archives, Elo (τ = 50) Social Silo: Reputation, coalitions (τ = 50) Cultural Silo: Innovations, traditions (τ = 100) Ecological Silo: Niches, stress (τ = 100) Morphological Silo: Network complexity (τ = 30) Developmental Silo: Ontogeny, plasticity (τ = 100) Regulatory Silo: Gene expression (τ = 50) Economic Silo: Compute budgets (τ = 20) Communication Silo: Vocabulary, coordination (τ = 30)

Additionally supervises the meta_controller (L2 strategic layer) when enabled: Meta Controller: LTC-based hierarchical control (outputs L1 guidance)

Each silo operates independently with its own hierarchical levels (L0/L1/L2). When meta_controller is enabled, it provides L2 guidance to silos.

Summary

Functions

List all available silo types.

Disable an extension silo at runtime.

Enable an extension silo at runtime with default configuration.

Enable an extension silo at runtime with custom configuration.

Get the current configuration for a silo.

Check if a silo is currently enabled.

List all available silo types.

List all currently enabled silos.

Reconfigure a running silo with new configuration.

Get the dependencies for a silo type.

Map silo type atom to its module name.

Start the Liquid Conglomerate supervisor with default configuration.

Start the Liquid Conglomerate supervisor with custom configuration.

Validate configuration for a silo type.

Types

meta_config/0

-type meta_config() ::
          #meta_config{network_topology :: {pos_integer(), [pos_integer()], pos_integer()},
                       neuron_type :: ltc | cfc,
                       time_constant :: float(),
                       state_bound :: float(),
                       reward_weights :: #{reward_component() => float()},
                       learning_rate :: float(),
                       param_bounds :: #{meta_param() => {float(), float()}},
                       control_population_size :: boolean(),
                       control_topology :: boolean(),
                       history_window :: pos_integer(),
                       momentum :: float()}.

meta_param/0

-type meta_param() ::
          mutation_rate | mutation_strength | selection_ratio | evaluations_per_individual |
          max_concurrent_evaluations | population_size | add_node_rate | add_connection_rate |
          complexity_penalty.

reward_component/0

-type reward_component() ::
          convergence_speed | final_fitness | efficiency_ratio | diversity_aware | normative_structure.

Functions

all_silo_types()

-spec all_silo_types() -> [atom()].

List all available silo types.

disable_silo(SiloType)

-spec disable_silo(atom()) -> ok | {error, term()}.

Disable an extension silo at runtime.

Core silos (task, resource) cannot be disabled. Also checks that no other enabled silos depend on this one.

enable_silo(SiloType)

-spec enable_silo(atom()) -> ok | {error, term()}.

Enable an extension silo at runtime with default configuration.

enable_silo(SiloType, Config)

-spec enable_silo(atom(), map()) -> ok | {error, term()}.

Enable an extension silo at runtime with custom configuration.

Valid silo types: temporal, competitive, social, cultural, ecological, morphological, developmental, regulatory, economic, communication

Before enabling, this function: 1. Validates the silo type 2. Checks dependencies are satisfied 3. Validates the configuration 4. Stores config in ETS for later retrieval

get_silo_config(SiloType)

-spec get_silo_config(atom()) -> {ok, map()} | {error, not_enabled | unknown_silo}.

Get the current configuration for a silo.

Returns the config that was used to start the silo, or {error, not_enabled} if the silo is not running.

init(Config)

is_silo_enabled(SiloType)

-spec is_silo_enabled(atom()) -> boolean().

Check if a silo is currently enabled.

list_available_silos()

-spec list_available_silos() -> [atom()].

List all available silo types.

list_enabled_silos()

-spec list_enabled_silos() -> [atom()].

List all currently enabled silos.

reconfigure_silo(SiloType, NewConfig)

-spec reconfigure_silo(atom(), map()) -> ok | {error, term()}.

Reconfigure a running silo with new configuration.

This stops the silo, validates the new config, and restarts with new config. Core silos (task, resource) cannot be reconfigured this way.

silo_dependencies(_)

-spec silo_dependencies(atom()) -> [atom()].

Get the dependencies for a silo type.

Some silos require other silos to be enabled first. Returns a list of silo types that must be enabled before this one.

silo_module(_)

-spec silo_module(atom()) -> atom() | {error, unknown_silo}.

Map silo type atom to its module name.

start_link()

-spec start_link() -> {ok, pid()} | ignore | {error, term()}.

Start the Liquid Conglomerate supervisor with default configuration.

start_link(Config)

-spec start_link(map()) -> {ok, pid()} | ignore | {error, term()}.

Start the Liquid Conglomerate supervisor with custom configuration.

Configuration is merged from multiple sources (in priority order): 1. Config map passed to start_link/1 (highest priority) 2. Application env: application:get_env(macula_neuroevolution, lc_supervisor) 3. Default values (lowest priority)

If the supervisor is already running, returns the existing pid.

validate_silo_config(SiloType, Config)

-spec validate_silo_config(atom(), map()) -> ok | {error, term()}.

Validate configuration for a silo type.

Each silo type has specific configuration requirements. This function checks that required fields are present and values are within valid ranges.