module Split::Algorithms::WeightedSample

Public Class Methods

choose_alternative(experiment) click to toggle source
# File lib/split/algorithms/weighted_sample.rb, line 5
def self.choose_alternative(experiment)
  weights = experiment.alternatives.map(&:weight)

  total = weights.inject(:+)
  point = rand * total

  experiment.alternatives.zip(weights).each do |n,w|
    return n if w >= point
    point -= w
  end
end