Module: TypeBalancer::RatioCalculator
- Defined in:
- lib/type_balancer/ratio_calculator.rb
Overview
Calculates ratios and positions for balanced distribution of items
Class Method Summary collapse
-
.calculate_positions(ratios, batch_size) ⇒ Hash<String, Array<Integer>>
Calculate positions for each type based on ratios and batch size.
- .calculate_ratios(types, items_by_type) ⇒ Object
Class Method Details
.calculate_positions(ratios, batch_size) ⇒ Hash<String, Array<Integer>>
Calculate positions for each type based on ratios and batch size
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/type_balancer/ratio_calculator.rb', line 13 def calculate_positions(ratios, batch_size) # Initialize variables positions = {} total_positions = 0 # First pass: Calculate minimum positions for each type ratios.each do |type, ratio| min_positions = (batch_size * ratio).ceil positions[type] = min_positions total_positions += min_positions end # Second pass: Adjust if we have too many positions reduce_positions(positions, batch_size) if total_positions > batch_size # Third pass: Fill remaining positions if we have too few fill_remaining_positions(positions, batch_size - total_positions, ratios) if total_positions < batch_size positions end |
.calculate_ratios(types, items_by_type) ⇒ Object
57 58 59 60 61 62 63 |
# File 'lib/type_balancer/ratio_calculator.rb', line 57 def calculate_ratios(types, items_by_type) return { types.first => 1.0 } if types.size == 1 type_counts = calculate_type_counts(types, items_by_type) initial_ratios = calculate_initial_ratios(types, type_counts) normalize_ratios(initial_ratios) end |