classes ACG discunif lognormal poisson MCellRan4 erlang negexp repick MLCG geometric normal uniform binomial hypergeo play weibullRandom
Random()
Random(seed)
Random(seed, size)
This class is an interface to the RNG class from the gnu c++ class library. As of version 5.2, a cryptographic quality RNG class wrapper for mcell_ran4 was added and is available with the MCellRan4 method. The current default random generator is ACG .
Note that multiple instances of the Random class will produce different streams of random numbers only if their seeds are different.
One can switch distributions at any time but if the distribution is stationary then it is more efficient to use r.repick() to avoid constructor/destructor overhead.
prints 20 random numbers ranging in value between 30 and 50.objref r r = new Random() for i=1,10 print r.uniform(30, 50) // not as efficient as for i=1,10 print r.repick() // this
Random
r.ACG()
r.ACG(seed)
r.ACG(seed, size)
Random
r.MLCG()
r.MLCG(seed1)
r.MLCG(seed1, seed2)
Random
highindex = r.MCellRan4()
highindex = r.MCellRan4(highindex)
objref r, vec, g1, g2, hist r = new Random() index = r.MCellRan4() r.uniform(0, 2) vec = new Vector(1000) g1 = new Graph() g2 = new Graph() g1.size(0, 1000, 0, 2) g2.size(0, 2, 0, 150) proc doit() { g1.erase() g2.erase() vec.setrand(r) hist = vec.histogram(0, 2, 0.2) vec.line(g1) hist.line(g2, .2) g1.flush g2.flush } doit() variable_domain(&index, 0, 2^32-1) xpanel("MCellRan4 test") xbutton("Sample", "doit()") xpvalue("Original index", &index, 1, "r.MCellRan4(index) doit()") xpanel()
Random
r.repick()
Random
r.play(&var)
(but with no interpreter overhead). This is similar in concept to play . Play may be called several times for different variables and each variable will get an independent random value but with the same distribution. To disconnect the Random object from its list of variables, either the variables or the Random object must be destroyed.var = r.repick()
// run the single script // use the PointProcessManager to select IClamp // set dur of IClamp[0] to 100 // open a new Voltage Graph objref r r = new Random() r.poisson(.01) r.play(&IClamp[0].amp) //open a RunControl // press Init&Run several times
Random
r.uniform(low, high)
objref r, vec, g1, g2, hist r = new Random() r.uniform(0, 2) vec = new Vector(1000) vec.setrand(r) hist = vec.histogram(0, 2, 0.2) g1 = new Graph() g2 = new Graph() g1.size(0, 1000, 0, 2) g2.size(0, 2, 0, 150) vec.plot(g1) hist.plot(g2, .2)
Random
r.discunif(low, high)
Random
r.normal(mean, variance)
objref r, g, hist, vec r = new Random() r.normal(-1, .5) vec = new Vector() vec.indgen(-3, 2, .1) // x-axis for plot hist = new Vector(vec.size()) g = new Graph() g.size(-3, 2, 0, 50) hist.plot(g, vec) for(i=0; i<500; i=i+1){ x = r.repick() print i, x j = int((x+3)*10) // -3 to 2 -> 0 to 50 if (j >= 0) { hist.x[j] = hist.x[j]+1 } g.flush() doNotify() }
Random
r.lognormal(mean, variance)
objref r, g, hist, xvec r = new Random() r.lognormal(5,2) n=20 xvec = new Vector(n*3) // bins look like discrete spikes for i=0,n-1 { xvec.x[3*i] = i-.1 xvec.x[3*i+1] = i xvec.x[3*i+2] = i+.1 } hist = new Vector(xvec.size()) g = new Graph() g.size(0, 15, 0, 120) hist.plot(g, xvec) for(i=0; i<500; i=i+1){ x = r.repick() print i, x j = int(x) j = 3*j+1 if (j >= hist.size()) { // don't let any off the edge j = hist.size() -1 } hist.x[j] = hist.x[j]+1 g.flush() doNotify() }
Random
r.poisson(mean)
objref r, g, hist, xvec r = new Random() r.poisson(3) n=20 xvec = new Vector(n*3) for i=0,n-1 { xvec.x[3*i] = i-.1 xvec.x[3*i+1] = i xvec.x[3*i+2] = i+.1 } hist = new Vector(xvec.size()) g = new Graph() g.size(0, 15, 0, 120) hist.plot(g, xvec) for(i=0; i<500; i=i+1){ x = r.repick() print i, x j = int(x) j = 3*j+1 if (j >= hist.size()) { j = hist.size() -1 } hist.x[j] = hist.x[j]+1 g.flush() doNotify() }
Random
r.binomial(N,p)
P(n, N, p) = p * P(n-1, N-1, p) + (1 - p) * P(n, N-1, p)
objref r, hist, g r = new Random() r.binomial(20, .5) g = new Graph() g.size(0, 20, 0, 100) hist = new Vector(20) hist.plot(g) for(i=0; i<500; i=i+1){ j = r.repick() hist.x[j] = hist.x[j]+1 g.flush() doNotify() }
Random
r.geometric(mean)
objref r, hist, g r = new Random() r.geometric(.8) hist = new Vector(1000) proc sample() { hist = new Vector(1000) hist.setrand(r) hist = hist.histogram(0,100,1) hist.plot(g) } g = new Graph() g.size(0,40,0,200) sample() xpanel("Resample") xbutton("Resample", "sample()") xpanel()
Random
r.hypergeo(mean,variance)
Random
r.negexp(mean)
objref r, hist, g r = new Random() r.negexp(2.5) hist = new Vector(1000) proc sample() { hist = new Vector(1000) hist.setrand(r) hist = hist.histogram(0,20,.1) hist.plot(g, .1) } g = new Graph() g.size(0,20,0,50) sample() xpanel("Resample") xbutton("Resample", "sample()") xpanel()
Random
r.erlang(mean,variance)
Random
r.weibull(alpha,beta)