Portability | portable |
---|---|
Stability | experimental |
Safe Haskell | Safe-Infered |
Functions for shuffling elements according to weights.
Definitions:
- Weight
- A number above 0 denoting how likely it is for an element to end up in the first position.
- Probability
- A weight normalised into the (0,1] range.
- Weighted list
- A list of pairs
(w, a)
, wherew
is the weight of elementa
. The probability of an element getting into the first position is equal by its weight divided by the sum of all weights, and the probability of getting into a position other than the first is equal to the probability of getting in the first position when all elements in prior positions have been removed from the weighted list. - CDF Map
- A map of summed weights to elements. For example, a weighted
list
[(0.2,
corresponds to a CDF map ofa
), (0.6,b
), (0.2,c
)][(0.2,
(as aa
), (0.8,b
), (1.0,c
)]Map
). The weights are summed from left to right.
- weightedShuffleCDF :: (Num w, Ord w, Distribution Uniform w, Excludable w) => Map w a -> RVar [a]
- weightedShuffle :: (Num w, Ord w, Distribution Uniform w, Excludable w) => [(w, a)] -> RVar [a]
- weightedSampleCDF :: (Num w, Ord w, Distribution Uniform w, Excludable w) => Int -> Map w a -> RVar [a]
- weightedSample :: (Num w, Ord w, Distribution Uniform w, Excludable w) => Int -> [(w, a)] -> RVar [a]
- weightedChoiceExtractCDF :: (Num w, Ord w, Distribution Uniform w, Excludable w) => Map w a -> RVar (Map w a, a)
- cdfMapFromList :: (Num w, Eq w) => [(w, a)] -> Map w a
Shuffling
weightedShuffleCDF :: (Num w, Ord w, Distribution Uniform w, Excludable w) => Map w a -> RVar [a]Source
Randomly shuffle a CDF map according to its weights.
weightedShuffle :: (Num w, Ord w, Distribution Uniform w, Excludable w) => [(w, a)] -> RVar [a]Source
Randomly shuffle a weighted list according to its weights.
Sampling
weightedSampleCDF :: (Num w, Ord w, Distribution Uniform w, Excludable w) => Int -> Map w a -> RVar [a]Source
Randomly draw n elements from a CDF map according to its weights.
weightedSample :: (Num w, Ord w, Distribution Uniform w, Excludable w) => Int -> [(w, a)] -> RVar [a]Source
Randomly draw n elements from a weighted list according to its weights.
Extraction
weightedChoiceExtractCDF :: (Num w, Ord w, Distribution Uniform w, Excludable w) => Map w a -> RVar (Map w a, a)Source
Randomly extract an element from a CDF map according to its weights. The element is removed and the resulting weight gap closed.
Utilities
cdfMapFromList :: (Num w, Eq w) => [(w, a)] -> Map w aSource
Generate a CDF map from a weighted list.