Suppose one wants to draw numbers according to a
distribution that is not offered in Swarm. For example, the
Beta distribution is a distribution that has two parameters.
The Beta distribution can take on almost any unimodal shape,
ranging from uniform, to highly skewed to the left or right (see
Law and Kelton, p. 166). The Beta distribution can be produced
by taking two draws from a particular Gamma distribution and
transforming them. For example, one can first create the
` gammaDist1` and then put it to use:

- initializeRNGs { [randomGenerator setStateFromSeed: 34733]; gammaDist1= [GammaDist create: self setGenerator: randomGenerator setAlpha: 2 setBeta: 1]; return self; } -(double) getBetaVariateAlpha1: (double) alpha1 Alpha2: (double) alpha2 { double y1, y2; y1=[gammaDist1 getSampleWithAlpha: alpha1 withBeta: 1]; y2=[gammaDist1 getSampleWithAlpha: alpha2 withBeta: 1]; return y1/(y1+y2); } |

With these methods defined, then the code must simply
execute the ` initializeRNGs` and then grab a
Beta variate by specifying the two parameters, alpha1 and
alpha2:

id gammaDist1; double aDrawFromBeta; [self initializeRNGs]; aDrawFromBeta = [self getBetaVariateAlpha1: .8 Alpha2: 2 ]; |