Module: Legion::Extensions::MindGrowth::Helpers::FitnessEvaluator
- Extended by:
- FitnessEvaluator
- Included in:
- FitnessEvaluator
- Defined in:
- lib/legion/extensions/mind_growth/helpers/fitness_evaluator.rb
Instance Method Summary collapse
- #fitness(extension) ⇒ Object
- #improvement_candidates(extensions) ⇒ Object
- #prune_candidates(extensions) ⇒ Object
- #rank(extensions) ⇒ Object
Instance Method Details
#fitness(extension) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/legion/extensions/mind_growth/helpers/fitness_evaluator.rb', line 10 def fitness(extension) w = Helpers::Constants::FITNESS_WEIGHTS invocation = normalize_invocations(extension[:invocation_count] || 0) impact = extension[:impact_score] || 0.5 health = extension[:health_score] || 1.0 error_rate = extension[:error_rate] || 0.0 latency = normalize_latency(extension[:avg_latency_ms] || 0) score = (w[:invocation_rate] * invocation) + (w[:impact_score] * impact) + (w[:health] * health) + (w[:error_penalty] * error_rate) + (w[:latency_penalty] * latency) score.clamp(0.0, 1.0).round(3) end |
#improvement_candidates(extensions) ⇒ Object
34 35 36 37 38 39 |
# File 'lib/legion/extensions/mind_growth/helpers/fitness_evaluator.rb', line 34 def improvement_candidates(extensions) extensions.select do |e| f = fitness(e) f >= Helpers::Constants::PRUNE_THRESHOLD && f < Helpers::Constants::IMPROVEMENT_THRESHOLD end end |
#prune_candidates(extensions) ⇒ Object
30 31 32 |
# File 'lib/legion/extensions/mind_growth/helpers/fitness_evaluator.rb', line 30 def prune_candidates(extensions) extensions.select { |e| fitness(e) < Helpers::Constants::PRUNE_THRESHOLD } end |
#rank(extensions) ⇒ Object
26 27 28 |
# File 'lib/legion/extensions/mind_growth/helpers/fitness_evaluator.rb', line 26 def rank(extensions) extensions.map { |e| e.merge(fitness: fitness(e)) }.sort_by { |e| -e[:fitness] } end |