lc_silo_chain (faber_neuroevolution v1.2.4)

View Source

LC Silo Chain - Manages L0/L1/L2 LTC TWEANNs for a single silo.

Each silo (Task, Resource, Distribution) has 3 chained LTC TWEANNs that operate at different time scales. Training metrics flow to all levels, while outputs cascade down: L2 outputs feed into L1 inputs, and L1 outputs feed into L0 inputs.

See assets/lc_silo_chain.svg for the architecture diagram.

Data Flow

1. Training metrics from NuT are fed to ALL levels 2. L2 outputs become PART OF L1's inputs (L1 hyperparameters) 3. L1 outputs become PART OF L0's inputs (L0 hyperparameters) 4. L0 outputs are the actual hyperparameters applied to evolution

Time Constants

Each level operates at a different time scale: - L2: Slow (strategic) - updates every τ_L2 (e.g., 100 generations) - L1: Medium (tactical) - updates every τ_L1 (e.g., 50 generations) - L0: Fast (reactive) - updates every τ_L0 (e.g., 10 generations)

Summary

Functions

Get hyperparameter recommendations.

Get current state for debugging/monitoring.

Report reward signal for learning.

Start the silo chain with configuration.

Types

layer/0

-type layer() :: #{weights := [[float()]], biases := [float()]}.

network/0

-type network() ::
          #network{input_size :: pos_integer(),
                   hidden_sizes :: [pos_integer()],
                   output_size :: pos_integer(),
                   layers :: [layer()],
                   candidate_layers :: [layer()] | undefined,
                   candidate_reward :: float()}.

Functions

get_recommendations(Chain, TrainingMetrics)

-spec get_recommendations(atom() | pid(), map()) -> map().

Get hyperparameter recommendations.

TrainingMetrics is a map containing: - best_fitness, avg_fitness, fitness_variance - improvement_velocity, convergence_trend - stagnation_severity, diversity_index - memory_pressure, cpu_pressure - etc.

Returns a map of hyperparameter name => value.

get_state(Chain)

-spec get_state(atom() | pid()) -> map().

Get current state for debugging/monitoring.

handle_call(Request, From, State)

handle_cast(Msg, State)

handle_info(Info, State)

init(Config)

report_reward(Chain, Reward)

-spec report_reward(atom() | pid(), float()) -> ok.

Report reward signal for learning.

The reward is distributed to all levels based on their contribution.

start_link(Name, Config)

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

Start the silo chain with configuration.

Config options: - silo_type: task | resource | distribution - tau_l0, tau_l1, tau_l2: time constants for each level - l0_topology, l1_topology, l2_topology: {InputSize, HiddenSizes, OutputSize} - output_ranges: map of output name to {min, max}

terminate(Reason, State)