WeightedRandom.Backend offers a contract to all who implement it:
- The main WeightedRandom package presents a novel interface for generating a list of probabilities (floats that can be summed to equal exactly 1.0).
- The custom Backend module decides what to do with those probabilities once they are generated.
To create your own backend, copy the module WeightedRandom.Backend.Linear and make changes to the functions.
To use a different backend, you can either pass it in as an opt (see function docs), or you can put it in your config file:
config :weighted_random,
backend: Your.Backend.Module
Summary
Callbacks
Optionally provide the opts kwli
weights is a list of floats which, if summed, would equal exactly 1.0. Each float represents the probability of being selected in the random sample.
Given the struct returned by preprocess/2, return a list of random indices equal to count.
Types
@type backend_opts() :: [{:probability_type, probability_type()}]
@type index() :: integer()
@type indices() :: [index()]
@type opts() :: keyword()
@type percentage() :: float()
@type probability_type() :: :weights | :probabilities
@type table() :: struct()
@type weight() :: WeightedRandom.Input.Weight.t()
@type weights() :: [weight()]
Callbacks
@callback options() :: keyword()
Optionally provide the opts kwli
weights is a list of floats which, if summed, would equal exactly 1.0. Each float represents the probability of being selected in the random sample.
So if given [0.25, 0.25, 0.5], then index 2 is twice as likely to be sampled as index 1.
This function must return some kind of struct that will later be passed into take/2.
Given the struct returned by preprocess/2, return a list of random indices equal to count.