class TrailGuide::Algorithms::Bandit

Public Instance Methods

choose!(**opts) click to toggle source
# File lib/trail_guide/algorithms/bandit.rb, line 6
def choose!(**opts)
  variants.find { |var| var == best_guess }
end

Private Instance Methods

arm_guess(participants, conversions) click to toggle source
# File lib/trail_guide/algorithms/bandit.rb, line 26
def arm_guess(participants, conversions)
  a = [participants, 0].max
  b = [(participants - conversions), 0].max
  s = SimpleRandom.new
  s.set_seed
  s.beta(a+fairness_constant, b+fairness_constant)
end
best_guess() click to toggle source
# File lib/trail_guide/algorithms/bandit.rb, line 18
def best_guess
  @best_guess ||= begin
    gmax = guesses.values.max
    best = guesses.keys.select { |name| guesses[name] == gmax }
    best.sample
  end
end
fairness_constant() click to toggle source
# File lib/trail_guide/algorithms/bandit.rb, line 34
def fairness_constant
  7
end
guesses() click to toggle source
# File lib/trail_guide/algorithms/bandit.rb, line 12
def guesses
  @guesses ||= variants.map do |variant|
    [variant.name, arm_guess(variant.participants, variant.converted)]
  end.to_h
end