module Split::Algorithms::Whiplash

Public Class Methods

choose_alternative(experiment) click to toggle source
# File lib/split/algorithms/whiplash.rb, line 10
def choose_alternative(experiment)
  experiment[best_guess(experiment.alternatives)]
end

Private Class Methods

arm_guess(participants, completions) click to toggle source
# File lib/split/algorithms/whiplash.rb, line 16
def arm_guess(participants, completions)
  a = [participants, 0].max
  b = [participants-completions, 0].max
  s = SimpleRandom.new; s.set_seed; s.beta(a+fairness_constant, b+fairness_constant)
end
best_guess(alternatives) click to toggle source
# File lib/split/algorithms/whiplash.rb, line 22
def best_guess(alternatives)
  guesses = {}
  alternatives.each do |alternative|
    guesses[alternative.name] = arm_guess(alternative.participant_count, alternative.all_completed_count)
  end
  gmax = guesses.values.max
  best = guesses.keys.select { |name| guesses[name] ==  gmax }
  best.sample
end
fairness_constant() click to toggle source
# File lib/split/algorithms/whiplash.rb, line 32
def fairness_constant
  7
end