Inductive Solutions, Inc.
380 Rector Place, Suite 4A, New York, New York 10280

Email  Telephone: +1 (212)945.0630   Fax: +1 (212)945.0367

 

Home

Products and Services
Software Products
Recommended Books

Bibliography and White Papers
Free Downloads

Links

 

 

RunRandom

RUNRANDOM is a random number simulation tool and C/C++ library based on algorithms that generate multi-dimensional sequences of quasi-random and pseudo-random numbers.  These numbers can be used in various simulation applications, from the evaluation of derivative securities (via generating interest rates and stock price scenarios) to evolutionary programming and stochastic optimization (via genetic algorithms). 

RUNRANDOM Features

  • Provides quasi-random generators based on versions of FAURE-NIEDERREITER, SOBOL', TEZUKA-FAURE-NIEDERREITER, and RICHTMEYER
  • Provides pseudo-random generators based on versions of LECUYER, and KNUTH
  • Provides Microsoft Excel utilities to view random vectors
  • Provides a fast transformation to generate normal variates
  • As much as 5,000 dimensions

Benefits

  • Quasi-random numbers may perform an order of magnitude better than the more conventional pseudo random numbers
  • Computation is very fast
  • The RUNRANDOM C/C++ Library is available for your custom applications

License

The standard single user license is for Microsoft Windows.  Other licensing plans for other platforms are also available. Contact us about versions for other operating systems (such as Linux or Solaris), about site licenses, or about academic discounts.

Background: Computer-Generated Random Numbers

How can one assess the future?  One way is to simulate a large number of alternative future scenarios by computer and seeing what the most likely scenario is by averaging all future scenarios together.  This is the idea behind the Monte Carlo simulation method. 

Computer generated numbers are not really random but only appear so when subjected to certain statistical tests.  Quasi-random numbers are based on properties of prime numbers and prime polynomial fields (an application of number theory). They are also called low discrepancy sequences because when they are generated, they fill in rectangular regions very evenly and uniformly. Pseudo random numbers do not have this property: their strength is that when they are generated, sequences of numbers have minimal correlation with each other. Simple pseudo random number generators are the ones that are included in many systems (e.g., via a rand() function).  They probably should not be trusted unless their autocorrelation properties are known.

Many theoretical and empirical results indicate that simulations based on quasi random numbers converge an order of magnitude faster than simulations based on pseudo random numbers. 

(More formally, for N simulations, the error associated with pseudo random simulations is proportional to .  For quasi random numbers, this error is proportional to .  This means that a simulation based on 10,000 pseudo random numbers may be as accurate as a simulation based on only 100 quasi random numbers: consequently, we can may be able to get the same answer with less work.)

The RUNRANDOM library provides an easy way to incorporate different types of quasi and pseudo random generators into your simulation applications.  RUNRANDOM generates multivariate uniform random variables and multivariate zero-mean unit variance normal random variables (via a very fast approximation to the inverse normal distribution).  These numbers are accessed in memory (via a vector object) or by reading a file.

RUNRANDOM provides 6 different generators and comes with a tool to display samples of these numbers and for timing analysis.  Here are some extracts of the RUNRANDOM tool output.  For example, the first 6 vectors of a Uniform and Normal 3-dimensional RICHTMEYER sequence are

U[1] U[2] U[3]   N[1] N[2] N[3]
0 0 0   -8.5 -8.5 -8.5
0.828427 0.464102 0.472136   0.947968 -0.09011 -0.0699
0.242641 0.196152 0.708204   -0.69783 -0.85545 0.548145
0.656854 0.928203 0.944272   0.403893 1.462539 1.591682
0.071068 0.660254 0.18034   -1.46788 0.413157 -0.91407
0.485281 0.392305 0.416408   -0.0369 -0.27332 -0.21109

This sequence generates random vectors based on prime numbers. Note that the first vector is the zero vector.  (RUNRANDOM can skip several vectors of numbers use by changing the SKIP parameter; in this and the following examples, SKIP is set to zero.)

The first 6 vectors of a Uniform and Normal 3-dimensional SOBOL' sequence look like this:

U[1] U[2] U[3]   N[1] N[2] N[3]
0 0 0   -8.5 -8.5 -8.5
0.5 0.5 0.75   0 0 0.67449
0.75 0.25 0.3125   0.67449 -0.67449 -0.48878
0.25 0.75 0.5625   -0.67449 0.67449 0.157311
0.375 0.375 0.875   -0.31864 -0.31864 1.150349
0.875 0.875 0.125   1.150349 1.150349 -1.15035

Note that these numbers appear "less random" than the other sequence, and that they fill in the space "more evenly." 

A related method is the FAURE-NIEDERREITER sequence.  The first 6 vectors of a Uniform and Normal 3-dimensional sequence look like this:

U[1] U[2] U[3]   N[1] N[2] N[3]
0.333333 0.333333 0.333333   -0.43073 -0.43073 -0.43073
0.666667 0.666667 0.666667   0.430727 0.430727 0.430727
0.111111 0.444444 0.777778   -1.22064 -0.13971 0.76471
0.444444 0.777778 0.111111   -0.13971 0.76471 -1.22064
0.777778 0.111111 0.444444   0.76471 -1.22064 -0.13971
0.222222 0.888889 0.555556   -0.76471 1.22064 0.13971

The TEZUKA-FAURE-NIEDERREITER sequence is a generalization of the above sequence. The first 6 vectors of a Uniform and Normal 3-dimensional look like this:

U[1] U[2] U[3]   N[1] N[2] N[3]
0.333333 0.5 0.625   -0.43073 0 0.318639
0.666667 1 0.875   0.430727 6.022185 1.150349
0.111111 0.576923 0.906593   -1.22064 0.194028 1.320065
0.444444 0.730769 0.159341   -0.13971 0.615141 -0.99717
0.777778 0.192308 0.434066   0.76471 -0.86942 -0.16603
0.222222 0.807692 0.478022   -0.76471 0.869424 -0.05512

Purchase Student Version

 

(c) 2006 Inductive Solutions, Inc. All rights reserved.