Loosely couple your services.

Trials is a small library for generating outcomes conforming to simple statistical rules by running repeated trials in these systems.

It can pick from a probability mass function (pmf), do repeated Bernoulli trials for elements in an array, unique Bernoulli trials for every element of an object of `key`

: `probability`

form and more.

Require and call one of the functions within.

`var t = ;for var i = 0; i < 10; i += 1 // collect results of 10 trials where we pick exactly one of the object below t`

Outputs something like this:

`runawayattackattackeatlunchattackattackrunawayeatlunchattackattack`

Results vary based on rolls - this one had more lunches than an average roll.

Takes an object of form `key`

: `probability`

(which acts as the probability mass function for all the keys in the object) and picks exactly one element according the a roll mapped to the mass function. The introduction above has an example of this.

An important thing to note with this function is that the values of the object **must sum to 1** for it to represent a proper mass function (and to guarantee a return value).

Takes an Array and picks exactly one element from the array with uniform probability.

`for var i = 0; i < 5; i += 1 t;`

Example output:

`himisstharmissthar`

Takes an object of individual probabilities, does one Bernoulli trial for each element of the object with the respective probabilities and collects all the keys of the successes.

`for var i = 0; i < 5; i += 1 t;`

Example output:

`[ 'b' ][ 'a', 'b' ][ 'b' ][][ 'a', 'b' ]`

Takes an array and a fixed probability, does one Bernoulli trial for each element in the array with the defined uniform probability, and collects all the successes.

`for var i = 0; i < 5; i += 1 tmultiple'a' 'b' 'c' 04;`

Example output:

`[ 'a' ][ 'a', 'b', 'c' ][][ 'b', 'c' ][ 'b' ]`

By virtue of being repeated, independent Bernoulli trials with constant probability; the number of picks from the array follows a Binomial distribution `B(ary.length, p)`

.

Gets an integer in the range `start`

to (and including) `end`

with uniform probability.
Equivalent to `single`

on the array `[start, start+1, ... , end]`

, but more efficient.

Cluster picks {1, 2, ..., max} elements uniformly from the array with probability `p`

, or it picks none at all with probability `1-p`

.

This is essentially a uniform distribution within a uniform distribution. It's uniform in that we either pick or don't pick with probability `p`

, and if we pick, then how many we pick is uniformly distributed in the defined range. This creates the clusters, rather than true randomness.

`for var i = 0; i < 5; i += 1 t;`

Example output:

`[ 2, 1 ][ 4, 1, 5 ][ 1 ][][ 3, 1, 4 ][ 2 ]`

`$ npm install trials`

MIT-Licensed. See LICENSE file for details.