Class: Legion::Extensions::Agentic::Homeostasis::Metabolism::Helpers::MetabolismEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Homeostasis::Metabolism::Helpers::MetabolismEngine
show all
- Includes:
- Constants
- Defined in:
- lib/legion/extensions/agentic/homeostasis/metabolism/helpers/metabolism_engine.rb
Constant Summary
collapse
- MAX_EFFICIENCY_HISTORY =
200
Constants included
from Constants
Constants::EFFICIENCY_DECAY, Constants::MAX_ENERGY, Constants::METABOLIC_STATES, Constants::OPERATION_COSTS, Constants::RECOVERY_RATE, Constants::RESTING_METABOLIC_RATE, Constants::STATE_THRESHOLDS
Instance Method Summary
collapse
Methods included from Constants
label_for
Constructor Details
Returns a new instance of MetabolismEngine.
14
15
16
17
|
# File 'lib/legion/extensions/agentic/homeostasis/metabolism/helpers/metabolism_engine.rb', line 14
def initialize
@reserves = {}
@efficiency_history = []
end
|
Instance Method Details
#all_reserves ⇒ Object
96
97
98
|
# File 'lib/legion/extensions/agentic/homeostasis/metabolism/helpers/metabolism_engine.rb', line 96
def all_reserves
@reserves.transform_values(&:to_h)
end
|
#anabolize(reserve_id:, energy_cost: 5.0) ⇒ Object
62
63
64
65
66
|
# File 'lib/legion/extensions/agentic/homeostasis/metabolism/helpers/metabolism_engine.rb', line 62
def anabolize(reserve_id:, energy_cost: 5.0)
reserve = fetch_reserve(reserve_id)
result = reserve.anabolize!(energy_cost: energy_cost)
result.merge(reserve_id: reserve_id)
end
|
#catabolize(reserve_id:, complexity: 1.0) ⇒ Object
56
57
58
59
60
|
# File 'lib/legion/extensions/agentic/homeostasis/metabolism/helpers/metabolism_engine.rb', line 56
def catabolize(reserve_id:, complexity: 1.0)
reserve = fetch_reserve(reserve_id)
result = reserve.catabolize!(complexity: complexity)
result.merge(reserve_id: reserve_id)
end
|
#create_reserve(max_energy: MAX_ENERGY, metabolic_rate: RESTING_METABOLIC_RATE, efficiency: 1.0) ⇒ Object
19
20
21
22
23
|
# File 'lib/legion/extensions/agentic/homeostasis/metabolism/helpers/metabolism_engine.rb', line 19
def create_reserve(max_energy: MAX_ENERGY, metabolic_rate: RESTING_METABOLIC_RATE, efficiency: 1.0)
reserve = EnergyReserve.new(max_energy: max_energy, metabolic_rate: metabolic_rate, efficiency: efficiency)
@reserves[reserve.id] = reserve
reserve
end
|
#efficiency_history ⇒ Object
92
93
94
|
# File 'lib/legion/extensions/agentic/homeostasis/metabolism/helpers/metabolism_engine.rb', line 92
def efficiency_history
@efficiency_history.dup
end
|
84
85
86
87
88
89
90
|
# File 'lib/legion/extensions/agentic/homeostasis/metabolism/helpers/metabolism_engine.rb', line 84
def metabolic_report(reserve_id:)
reserve = fetch_reserve(reserve_id)
{
reserve: reserve.to_h,
efficiency_history: efficiency_history_for(reserve_id)
}
end
|
#recover(reserve_id:, duration: 1.0) ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/legion/extensions/agentic/homeostasis/metabolism/helpers/metabolism_engine.rb', line 42
def recover(reserve_id:, duration: 1.0)
reserve = fetch_reserve(reserve_id)
amount = (RECOVERY_RATE * duration.clamp(0.0, Float::INFINITY)).round(10)
gained = reserve.recover!(amount)
record_efficiency(reserve)
{
reserve_id: reserve_id,
duration: duration,
energy_gained: gained.round(10),
current_energy: reserve.current_energy.round(10),
state: reserve.state
}
end
|
#run_cycle(reserve_id:, operations: []) ⇒ Object
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/legion/extensions/agentic/homeostasis/metabolism/helpers/metabolism_engine.rb', line 68
def run_cycle(reserve_id:, operations: [])
reserve = fetch_reserve(reserve_id)
cycle = MetabolicCycle.new
operations.each do |op_type|
cost_base = OPERATION_COSTS.fetch(op_type, 0.0)
reserve.spend!(cost_base) if cost_base > 0.0
cycle.record_operation(operation_type: op_type, energy_spent: cost_base)
end
reserve.spend!(reserve.metabolic_rate)
cycle.record_operation(operation_type: :resting_rate, energy_spent: reserve.metabolic_rate)
cycle.complete!.merge(reserve_state: reserve.state, reserve_energy: reserve.current_energy.round(10))
end
|
#spend_energy(reserve_id:, operation_type:) ⇒ Object
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/legion/extensions/agentic/homeostasis/metabolism/helpers/metabolism_engine.rb', line 25
def spend_energy(reserve_id:, operation_type:)
reserve = fetch_reserve(reserve_id)
cost = OPERATION_COSTS.fetch(operation_type) do
raise ArgumentError, "Unknown operation type: #{operation_type.inspect}"
end
actual_spent = reserve.spend!(cost)
record_efficiency(reserve)
{
reserve_id: reserve_id,
operation_type: operation_type,
base_cost: cost,
actual_spent: actual_spent.round(10),
current_energy: reserve.current_energy.round(10),
state: reserve.state
}
end
|