Class: Legion::Extensions::Agentic::Homeostasis::Neuromodulation::Helpers::ModulatorSystem

Inherits:
Object
  • Object
show all
Includes:
Constants
Defined in:
lib/legion/extensions/agentic/homeostasis/neuromodulation/helpers/modulator_system.rb

Constant Summary

Constants included from Constants

Constants::BASELINE_DRIFT, Constants::DEFAULT_LEVEL, Constants::LEVEL_CEILING, Constants::LEVEL_FLOOR, Constants::MAX_EVENTS, Constants::MODULATION_ALPHA, Constants::MODULATORS, Constants::OPTIMAL_RANGES, Constants::STATE_LABELS

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeModulatorSystem

Returns a new instance of ModulatorSystem.



14
15
16
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/helpers/modulator_system.rb', line 14

def initialize
  @modulators = MODULATORS.to_h { |name| [name, Modulator.new(name)] }
end

Instance Attribute Details

#modulatorsObject (readonly)

Returns the value of attribute modulators.



12
13
14
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/helpers/modulator_system.rb', line 12

def modulators
  @modulators
end

Instance Method Details

#all_levelsObject



37
38
39
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/helpers/modulator_system.rb', line 37

def all_levels
  @modulators.transform_values(&:level)
end

#arousal_levelObject



69
70
71
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/helpers/modulator_system.rb', line 69

def arousal_level
  @modulators[:norepinephrine].level
end

#attention_precisionObject



51
52
53
54
55
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/helpers/modulator_system.rb', line 51

def attention_precision
  ne = @modulators[:norepinephrine].level
  ach = @modulators[:acetylcholine].level
  clamp((ne * 0.5) + (ach * 0.5))
end

#balance_scoreObject



84
85
86
87
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/helpers/modulator_system.rb', line 84

def balance_score
  in_range = @modulators.values.count(&:optimal?)
  in_range.to_f / @modulators.size
end

#boost(name, amount, reason: nil) ⇒ Object



18
19
20
21
22
23
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/helpers/modulator_system.rb', line 18

def boost(name, amount, reason: nil)
  validate_name!(name)
  result = @modulators[name].boost(amount, reason: reason)
  apply_interactions(name)
  result
end

#composite_influencesObject



73
74
75
76
77
78
79
80
81
82
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/helpers/modulator_system.rb', line 73

def composite_influences
  {
    learning_rate_modifier:   learning_rate_modifier.round(4),
    attention_precision:      attention_precision.round(4),
    exploration_bias:         exploration_bias.round(4),
    patience_factor:          patience_factor.round(4),
    memory_encoding_strength: memory_encoding_strength.round(4),
    arousal_level:            arousal_level.round(4)
  }
end

#exploration_biasObject



57
58
59
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/helpers/modulator_system.rb', line 57

def exploration_bias
  @modulators[:dopamine].level
end

#learning_rate_modifierObject



45
46
47
48
49
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/helpers/modulator_system.rb', line 45

def learning_rate_modifier
  da = @modulators[:dopamine].level
  ach = @modulators[:acetylcholine].level
  clamp((da * 0.6) + (ach * 0.4))
end

#level(name) ⇒ Object



32
33
34
35
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/helpers/modulator_system.rb', line 32

def level(name)
  validate_name!(name)
  @modulators[name].level
end

#memory_encoding_strengthObject



65
66
67
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/helpers/modulator_system.rb', line 65

def memory_encoding_strength
  @modulators[:acetylcholine].level
end

#patience_factorObject



61
62
63
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/helpers/modulator_system.rb', line 61

def patience_factor
  @modulators[:serotonin].level
end

#suppress(name, amount, reason: nil) ⇒ Object



25
26
27
28
29
30
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/helpers/modulator_system.rb', line 25

def suppress(name, amount, reason: nil)
  validate_name!(name)
  result = @modulators[name].suppress(amount, reason: reason)
  apply_interactions(name)
  result
end

#tickObject



41
42
43
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/helpers/modulator_system.rb', line 41

def tick
  @modulators.each_value(&:drift_to_baseline)
end

#to_hObject



89
90
91
92
93
94
95
# File 'lib/legion/extensions/agentic/homeostasis/neuromodulation/helpers/modulator_system.rb', line 89

def to_h
  {
    modulators: @modulators.transform_values(&:to_h),
    influences: composite_influences,
    balance:    balance_score.round(4)
  }
end