MOA 12.03
Real Time Analytics for Data Streams

Public Member Functions  
MTRandom ()  
The default constructor for an instance of MTRandom.  
MTRandom (boolean compatible)  
This version of the constructor can be used to implement identical behaviour to the original C code version of this algorithm including exactly replicating the case where the seed value had not been set prior to calling genrand_int32.  
MTRandom (long seed)  
This version of the constructor simply initialises the class with the given 64 bit seed value.  
MTRandom (byte[] buf)  
This version of the constructor initialises the class with the given byte array.  
MTRandom (int[] buf)  
This version of the constructor initialises the class with the given integer array.  
final synchronized void  setSeed (long seed) 
This method resets the state of this instance using the 64 bits of seed data provided.  
final void  setSeed (byte[] buf) 
This method resets the state of this instance using the byte array of seed data provided.  
final synchronized void  setSeed (int[] buf) 
This method resets the state of this instance using the integer array of seed data provided.  
Static Public Member Functions  
static int[]  pack (byte[] buf) 
This simply utility method can be used in cases where a byte array of seed data is to be used to repeatedly reseed the random number sequence.  
Protected Member Functions  
final synchronized int  next (int bits) 
This method forms the basis for generating a pseudo random number sequence from this class. 
A Java implementation of the MT19937 (Mersenne Twister) pseudo random number generator algorithm based upon the original C code by Makoto Matsumoto and Takuji Nishimura (see http://www.math.sci.hiroshimau.ac.jp/~mmat/MT/emt.html for more information.
As a subclass of java.util.Random this class provides a single canonical method next() for generating bits in the pseudo random number sequence. Anyone using this class should invoke the public inherited methods (nextInt(), nextFloat etc.) to obtain values as normal. This class should provide a dropin replacement for the standard implementation of java.util.Random with the additional advantage of having a far longer period and the ability to use a far larger seed value.
This is not a cryptographically strong source of randomness and should not be used for cryptographic systems or in any other situation where true random numbers are required.
This software is licensed under the CCGNU LGPL.
Definition at line 84 of file MTRandom.java.
moa.clusterers.streamkm.MTRandom.MTRandom  (  ) 
The default constructor for an instance of MTRandom.
This invokes the noargument constructor for java.util.Random which will result in the class being initialised with a seed value obtained by calling System.currentTimeMillis().
Definition at line 123 of file MTRandom.java.
moa.clusterers.streamkm.MTRandom.MTRandom  (  boolean  compatible  ) 
This version of the constructor can be used to implement identical behaviour to the original C code version of this algorithm including exactly replicating the case where the seed value had not been set prior to calling genrand_int32.
If the compatibility flag is set to true, then the algorithm will be seeded with the same default value as was used in the original C code. Furthermore the setSeed() method, which must take a 64 bit long value, will be limited to using only the lower 32 bits of the seed to facilitate seamless migration of existing C code into Java where identical behaviour is required.
Whilst useful for ensuring backwards compatibility, it is advised that this feature not be used unless specifically required, due to the reduction in strength of the seed value.
compatible  Compatibility flag for replicating original behaviour. 
Definition at line 145 of file MTRandom.java.
moa.clusterers.streamkm.MTRandom.MTRandom  (  long  seed  ) 
This version of the constructor simply initialises the class with the given 64 bit seed value.
For a better random number sequence this seed value should contain as much entropy as possible.
seed  The seed value with which to initialise this class. 
Definition at line 158 of file MTRandom.java.
moa.clusterers.streamkm.MTRandom.MTRandom  (  byte[]  buf  ) 
This version of the constructor initialises the class with the given byte array.
All the data will be used to initialise this instance.
buf  The nonempty byte array of seed information. 
NullPointerException  if the buffer is null. 
IllegalArgumentException  if the buffer has zero length. 
Definition at line 171 of file MTRandom.java.
moa.clusterers.streamkm.MTRandom.MTRandom  (  int[]  buf  ) 
This version of the constructor initialises the class with the given integer array.
All the data will be used to initialise this instance.
buf  The nonempty integer array of seed information. 
NullPointerException  if the buffer is null. 
IllegalArgumentException  if the buffer has zero length. 
Definition at line 185 of file MTRandom.java.
final synchronized int moa.clusterers.streamkm.MTRandom.next  (  int  bits  )  [protected] 
This method forms the basis for generating a pseudo random number sequence from this class.
If given a value of 32, this method behaves identically to the genrand_int32 function in the original C code and ensures that using the standard nextInt() function (inherited from Random) we are able to replicate behaviour exactly.
Note that where the number of bits requested is not equal to 32 then bits will simply be masked out from the top of the returned integer value. That is to say that:
mt.setSeed(12345); int foo = mt.nextInt(16) + (mt.nextInt(16) << 16);
will not give the same result as
mt.setSeed(12345); int foo = mt.nextInt(32);
bits  The number of significant bits desired in the output. 
Definition at line 315 of file MTRandom.java.
static int [] moa.clusterers.streamkm.MTRandom.pack  (  byte[]  buf  )  [static] 
This simply utility method can be used in cases where a byte array of seed data is to be used to repeatedly reseed the random number sequence.
By packing the byte array into an integer array first, using this method, and then invoking setSeed() with that; it removes the need to repack the byte array each time setSeed() is called.
If the length of the byte array is not a multiple of 4 then it is implicitly padded with zeros as necessary. For example:
byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }
becomes
int[] { 0x04030201, 0x00000605 }
Note that this method will not complain if the given byte array is empty and will produce an empty integer array, but the setSeed() method will throw an exception if the empty integer array is passed to it.
buf  The nonnull byte array to be packed. 
NullPointerException  if the given byte array is null. 
Definition at line 379 of file MTRandom.java.
Referenced by moa.clusterers.streamkm.MTRandom.setSeed().
final void moa.clusterers.streamkm.MTRandom.setSeed  (  byte[]  buf  ) 
This method resets the state of this instance using the byte array of seed data provided.
Note that calling this method is equivalent to calling "setSeed(pack(buf))" and in particular will result in a new integer array being generated during the call. If you wish to retain this seed data to allow the pseudo random sequence to be restarted then it would be more efficient to use the "pack()" method to convert it into an integer array first and then use that to reseed the instance. The behaviour of the class will be the same in both cases but it will be more efficient.
buf  The nonempty byte array of seed information. 
NullPointerException  if the buffer is null. 
IllegalArgumentException  if the buffer has zero length. 
Definition at line 259 of file MTRandom.java.
final synchronized void moa.clusterers.streamkm.MTRandom.setSeed  (  int[]  buf  ) 
This method resets the state of this instance using the integer array of seed data provided.
This is the canonical way of resetting the pseudo random number sequence.
buf  The nonempty integer array of seed information. 
NullPointerException  if the buffer is null. 
IllegalArgumentException  if the buffer has zero length. 
Definition at line 272 of file MTRandom.java.
final synchronized void moa.clusterers.streamkm.MTRandom.setSeed  (  long  seed  ) 
This method resets the state of this instance using the 64 bits of seed data provided.
Note that if the same seed data is passed to two different instances of MTRandom (both of which share the same compatibility state) then the sequence of numbers generated by both instances will be identical.
If this instance was initialised in 'compatibility' mode then this method will only use the lower 32 bits of any seed value passed in and will match the behaviour of the original C code exactly with respect to state initialisation.
seed  The 64 bit value used to initialise the random number generator state. 
Definition at line 225 of file MTRandom.java.