Sha256: 7f4d6a0e554f8449987913b31f9f3723b6134b0a2804fb7e4dfa868a86e96c55
Contents?: true
Size: 980 Bytes
Versions: 5
Compression:
Stored size: 980 Bytes
Contents
# A multi-armed bandit implementation inspired by # @aaronsw and victorykit/whiplash require 'simple-random' module Split module Algorithms module Whiplash def self.choose_alternative(experiment) experiment[best_guess(experiment.alternatives)] end private def self.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 self.best_guess(alternatives) guesses = {} alternatives.each do |alternative| guesses[alternative.name] = arm_guess(alternative.participant_count, alternative.completed_count) end gmax = guesses.values.max best = guesses.keys.select {|name| guesses[name] == gmax } return best.sample end def self.fairness_constant 7 end end end end
Version data entries
5 entries across 5 versions & 1 rubygems