lc_temporal_events (faber_neuroevolution v1.2.4)

View Source

Behavioral event constructors for Temporal Silo.

Events related to timing, episodes, and learning rate adaptation. Temporal Silo operates at timescale τ=10 (fastest adaptation).

Summary

Types

generation/0

-type generation() :: non_neg_integer().

individual_id/0

-type individual_id() :: binary().

population_id/0

-type population_id() :: binary().

temporal_event/0

-type temporal_event() ::
          #episode_started{meta ::
                               #lc_event_meta{event_id :: binary(),
                                              correlation_id :: binary() | undefined,
                                              causation_id :: binary() | undefined,
                                              timestamp :: timestamp(),
                                              version :: pos_integer(),
                                              emitter :: atom()},
                           individual_id :: individual_id(),
                           episode_number :: non_neg_integer(),
                           expected_duration_ms :: non_neg_integer() | undefined,
                           generation :: generation()} |
          #episode_completed{meta ::
                                 #lc_event_meta{event_id :: binary(),
                                                correlation_id :: binary() | undefined,
                                                causation_id :: binary() | undefined,
                                                timestamp :: timestamp(),
                                                version :: pos_integer(),
                                                emitter :: atom()},
                             individual_id :: individual_id(),
                             episode_number :: non_neg_integer(),
                             duration_ms :: non_neg_integer(),
                             outcome :: success | failure | timeout | early_termination,
                             fitness_delta :: float(),
                             steps_taken :: non_neg_integer()} |
          #timing_adjusted{meta ::
                               #lc_event_meta{event_id :: binary(),
                                              correlation_id :: binary() | undefined,
                                              causation_id :: binary() | undefined,
                                              timestamp :: timestamp(),
                                              version :: pos_integer(),
                                              emitter :: atom()},
                           population_id :: population_id(),
                           previous_timeout_ms :: non_neg_integer(),
                           new_timeout_ms :: non_neg_integer(),
                           adjustment_reason :: convergence | stagnation | resource_pressure} |
          #learning_rate_adapted{meta ::
                                     #lc_event_meta{event_id :: binary(),
                                                    correlation_id :: binary() | undefined,
                                                    causation_id :: binary() | undefined,
                                                    timestamp :: timestamp(),
                                                    version :: pos_integer(),
                                                    emitter :: atom()},
                                 population_id :: population_id(),
                                 previous_rate :: float(),
                                 new_rate :: float(),
                                 adaptation_reason ::
                                     stagnation | breakthrough | scheduled | convergence,
                                 generation :: generation()} |
          #patience_exhausted{meta ::
                                  #lc_event_meta{event_id :: binary(),
                                                 correlation_id :: binary() | undefined,
                                                 causation_id :: binary() | undefined,
                                                 timestamp :: timestamp(),
                                                 version :: pos_integer(),
                                                 emitter :: atom()},
                              population_id :: population_id(),
                              generations_waited :: non_neg_integer(),
                              best_fitness :: float(),
                              action_taken :: terminate | reset | diversify} |
          #convergence_detected{meta ::
                                    #lc_event_meta{event_id :: binary(),
                                                   correlation_id :: binary() | undefined,
                                                   causation_id :: binary() | undefined,
                                                   timestamp :: timestamp(),
                                                   version :: pos_integer(),
                                                   emitter :: atom()},
                                population_id :: population_id(),
                                fitness_variance :: float(),
                                generations_stable :: non_neg_integer(),
                                generation :: generation()} |
          #timeout_threshold_reached{meta ::
                                         #lc_event_meta{event_id :: binary(),
                                                        correlation_id :: binary() | undefined,
                                                        causation_id :: binary() | undefined,
                                                        timestamp :: timestamp(),
                                                        version :: pos_integer(),
                                                        emitter :: atom()},
                                     individual_id :: individual_id(),
                                     elapsed_ms :: non_neg_integer(),
                                     threshold_ms :: non_neg_integer(),
                                     action :: terminate | extend | warn}.

timestamp/0

-type timestamp() :: integer().

Functions

convergence_detected(Data)

-spec convergence_detected(map()) ->
                              #convergence_detected{meta ::
                                                        #lc_event_meta{event_id :: binary(),
                                                                       correlation_id ::
                                                                           binary() | undefined,
                                                                       causation_id ::
                                                                           binary() | undefined,
                                                                       timestamp :: timestamp(),
                                                                       version :: pos_integer(),
                                                                       emitter :: atom()},
                                                    population_id :: population_id(),
                                                    fitness_variance :: float(),
                                                    generations_stable :: non_neg_integer(),
                                                    generation :: generation()}.

episode_completed(Data)

-spec episode_completed(map()) ->
                           #episode_completed{meta ::
                                                  #lc_event_meta{event_id :: binary(),
                                                                 correlation_id :: binary() | undefined,
                                                                 causation_id :: binary() | undefined,
                                                                 timestamp :: timestamp(),
                                                                 version :: pos_integer(),
                                                                 emitter :: atom()},
                                              individual_id :: individual_id(),
                                              episode_number :: non_neg_integer(),
                                              duration_ms :: non_neg_integer(),
                                              outcome :: success | failure | timeout | early_termination,
                                              fitness_delta :: float(),
                                              steps_taken :: non_neg_integer()}.

episode_started(Data)

-spec episode_started(map()) ->
                         #episode_started{meta ::
                                              #lc_event_meta{event_id :: binary(),
                                                             correlation_id :: binary() | undefined,
                                                             causation_id :: binary() | undefined,
                                                             timestamp :: timestamp(),
                                                             version :: pos_integer(),
                                                             emitter :: atom()},
                                          individual_id :: individual_id(),
                                          episode_number :: non_neg_integer(),
                                          expected_duration_ms :: non_neg_integer() | undefined,
                                          generation :: generation()}.

event_to_map(Event)

-spec event_to_map(temporal_event()) -> map().

learning_rate_adapted(Data)

-spec learning_rate_adapted(map()) ->
                               #learning_rate_adapted{meta ::
                                                          #lc_event_meta{event_id :: binary(),
                                                                         correlation_id ::
                                                                             binary() | undefined,
                                                                         causation_id ::
                                                                             binary() | undefined,
                                                                         timestamp :: timestamp(),
                                                                         version :: pos_integer(),
                                                                         emitter :: atom()},
                                                      population_id :: population_id(),
                                                      previous_rate :: float(),
                                                      new_rate :: float(),
                                                      adaptation_reason ::
                                                          stagnation | breakthrough | scheduled |
                                                          convergence,
                                                      generation :: generation()}.

make_meta(Emitter)

-spec make_meta(Emitter :: atom()) ->
                   #lc_event_meta{event_id :: binary(),
                                  correlation_id :: binary() | undefined,
                                  causation_id :: binary() | undefined,
                                  timestamp :: timestamp(),
                                  version :: pos_integer(),
                                  emitter :: atom()}.

make_meta(Emitter, Opts)

-spec make_meta(Emitter :: atom(), Opts :: map()) ->
                   #lc_event_meta{event_id :: binary(),
                                  correlation_id :: binary() | undefined,
                                  causation_id :: binary() | undefined,
                                  timestamp :: timestamp(),
                                  version :: pos_integer(),
                                  emitter :: atom()}.

patience_exhausted(Data)

-spec patience_exhausted(map()) ->
                            #patience_exhausted{meta ::
                                                    #lc_event_meta{event_id :: binary(),
                                                                   correlation_id ::
                                                                       binary() | undefined,
                                                                   causation_id :: binary() | undefined,
                                                                   timestamp :: timestamp(),
                                                                   version :: pos_integer(),
                                                                   emitter :: atom()},
                                                population_id :: population_id(),
                                                generations_waited :: non_neg_integer(),
                                                best_fitness :: float(),
                                                action_taken :: terminate | reset | diversify}.

timeout_threshold_reached(Data)

-spec timeout_threshold_reached(map()) ->
                                   #timeout_threshold_reached{meta ::
                                                                  #lc_event_meta{event_id :: binary(),
                                                                                 correlation_id ::
                                                                                     binary() |
                                                                                     undefined,
                                                                                 causation_id ::
                                                                                     binary() |
                                                                                     undefined,
                                                                                 timestamp ::
                                                                                     timestamp(),
                                                                                 version ::
                                                                                     pos_integer(),
                                                                                 emitter :: atom()},
                                                              individual_id :: individual_id(),
                                                              elapsed_ms :: non_neg_integer(),
                                                              threshold_ms :: non_neg_integer(),
                                                              action :: terminate | extend | warn}.

timing_adjusted(Data)

-spec timing_adjusted(map()) ->
                         #timing_adjusted{meta ::
                                              #lc_event_meta{event_id :: binary(),
                                                             correlation_id :: binary() | undefined,
                                                             causation_id :: binary() | undefined,
                                                             timestamp :: timestamp(),
                                                             version :: pos_integer(),
                                                             emitter :: atom()},
                                          population_id :: population_id(),
                                          previous_timeout_ms :: non_neg_integer(),
                                          new_timeout_ms :: non_neg_integer(),
                                          adjustment_reason ::
                                              convergence | stagnation | resource_pressure}.