Current section
Files
Jump to
Current section
Files
include/lc_competitive_events.hrl
%%%-------------------------------------------------------------------
%%% @doc Behavioral event definitions for Competitive Silo (τ=15).
%%%
%%% Events related to Elo ratings, opponent archives, and matchmaking.
%%%
%%% @end
%%%-------------------------------------------------------------------
-ifndef(LC_COMPETITIVE_EVENTS_HRL).
-define(LC_COMPETITIVE_EVENTS_HRL, true).
-include("lc_events_common.hrl").
%%% ============================================================================
%%% Archive Events
%%% ============================================================================
-record(opponent_archived, {
meta :: #lc_event_meta{},
opponent_id :: individual_id(),
archive_id :: binary(),
fitness_at_archive :: float(),
elo_at_archive :: float(),
generation :: generation(),
archive_size_after :: non_neg_integer()
}).
-record(opponent_retired, {
meta :: #lc_event_meta{},
opponent_id :: individual_id(),
archive_id :: binary(),
retirement_reason :: age | performance | diversity,
games_played :: non_neg_integer(),
final_elo :: float()
}).
%%% ============================================================================
%%% Match Events
%%% ============================================================================
-record(match_completed, {
meta :: #lc_event_meta{},
match_id :: binary(),
player_a_id :: individual_id(),
player_b_id :: individual_id(),
winner_id :: individual_id() | draw,
player_a_elo_before :: float(),
player_b_elo_before :: float(),
player_a_elo_after :: float(),
player_b_elo_after :: float(),
match_duration_ms :: non_neg_integer()
}).
-record(elo_updated, {
meta :: #lc_event_meta{},
individual_id :: individual_id(),
elo_before :: float(),
elo_after :: float(),
k_factor :: float(),
match_result :: win | loss | draw
}).
%%% ============================================================================
%%% Strategy Events
%%% ============================================================================
-record(strategy_countered, {
meta :: #lc_event_meta{},
counter_id :: individual_id(),
countered_id :: individual_id(),
win_rate_against :: float(),
strategy_signature :: binary(),
generation :: generation()
}).
-record(arms_race_detected, {
meta :: #lc_event_meta{},
population_id :: population_id(),
cycle_length :: non_neg_integer(),
participants :: [individual_id()],
intensity :: float(),
generation :: generation()
}).
%%% ============================================================================
%%% Matchmaking Events
%%% ============================================================================
-record(matchmaking_adjusted, {
meta :: #lc_event_meta{},
population_id :: population_id(),
elo_range_before :: float(),
elo_range_after :: float(),
self_play_ratio_before :: float(),
self_play_ratio_after :: float(),
adjustment_reason :: diversity | exploitation | exploration
}).
-record(dominance_matrix_updated, {
meta :: #lc_event_meta{},
population_id :: population_id(),
matrix_size :: non_neg_integer(),
strongest_counter :: {individual_id(), individual_id(), float()},
cycle_detected :: boolean(),
update_generation :: generation()
}).
%%% ============================================================================
%%% Type Exports
%%% ============================================================================
-type competitive_event() :: #opponent_archived{} | #opponent_retired{} |
#match_completed{} | #elo_updated{} |
#strategy_countered{} | #arms_race_detected{} |
#matchmaking_adjusted{} | #dominance_matrix_updated{}.
-endif. %% LC_COMPETITIVE_EVENTS_HRL