Sha256: 46b812d44d6195d59982c2913ff3fba4e6b0d67d28155d4cccb54c9d1fd222e9
Contents?: true
Size: 1010 Bytes
Versions: 4
Compression:
Stored size: 1010 Bytes
Contents
# A multi-armed bandit implementation inspired by # @aaronsw and victorykit/whiplash require 'simple-random' module Split module Algorithms module Whiplash class << self def choose_alternative(experiment) experiment[best_guess(experiment.alternatives)] end private 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 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 def fairness_constant 7 end end end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
split-1.3.2 | lib/split/algorithms/whiplash.rb |
split-1.3.1 | lib/split/algorithms/whiplash.rb |
split-1.3.0 | lib/split/algorithms/whiplash.rb |
split-1.2.1 | lib/split/algorithms/whiplash.rb |