class PlanOut::WeightedChoice

Public Instance Methods

simple_execute() click to toggle source
# File lib/plan_out/op_random.rb, line 54
def simple_execute
  choices = @parameters[:choices]
  weights = @parameters[:weights]

  return [] if choices.length() == 0

  cum_weights = Array.new(weights.length)
  cum_sum = 0.0

  weights.each_with_index do |weight, index|
    cum_sum += weight
    cum_weights[index] = cum_sum
  end

  stop_value = get_uniform(0.0, cum_sum)

  i = 0
  cum_weights.each_with_index do |cum_weight, index|
    return choices[index] if stop_value <= cum_weight
  end
end