ForceAnnealing_goodresults
        ForceAnnealing_tocheck
      
      
        
          | Last change
 on this file since df855a was             3f9eba, checked in by Frederik Heber <heber@…>, 15 years ago | 
        
          | 
New classes for random number generation.
 we use boost::random as a basis. It implements a lot of pseudo-random engines
and various distributions. However, everything is templated and there are no
base classes to store prototypes of the instances in a map. We need these
such that we are able to offer the user at run-time every choice possible.
Hence, we need to encapsulate all engines, distributions and (engine,
distribution) tuples: RandomNumber..._Encapsulation classes.
each with an abstract base class as the interface: RandomNumber... classes.
RandomNumberGeneratorFactory is then a singleton that contains all the
Maps and tables:
from string (user input is string) to enum (storing enum is more efficient
that a lengthy string)
from enum to instance (of the abstract class).
RandomNumberGeneratorFactory is a singleton to allow for global control of
what kind of numbers are generated, hence there are also two new Actions:
The user in the end only uses two classes: RandomNumberGeneratorFactory
and RandomNumberGenerator. The first only for obtaining a specific variant
of the latter and the latter to generate the numbers (operator() is passed
on to boost::variate_generator::operator()).
There is a unit test on the RandomNumberGeneratorFactory that checks some
of the table entries and whether one of the RandomNumberGenerator is
working (uniform_smallint so far).
 
Details:
 As there are ~25 engines and ~15 distributions this makes an enormous amount
of possible combinations. To automatically construct these, we use some
stuff from boost::preprocessor in order to generate enums, tables and maps
automatically just from a sequence of the typenames.
we have be-friended the unit test a lot to allow for easier testing, e.g.
we need access to internal ..._type to test whether their type is correct.
cleanUp() purges the instance of RandomNumberGeneratorFactory.
in RandomNumber..._Encapsulation::name() functions are only used for the
unit tests.
this all resides in its own subfolder RandomNumbers. So far, it is completely
independent of everything else.
 | 
        
          | 
              
Property                 mode
 set to                 100644 | 
        
          | File size:
            404 bytes | 
      
      
| Line |  | 
|---|
| 1 | /* | 
|---|
| 2 | * SetRandomNumbersEngineAction.hpp | 
|---|
| 3 | * | 
|---|
| 4 | *  Created on: Jan 01, 2011 | 
|---|
| 5 | *      Author: heber | 
|---|
| 6 | */ | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef SETRANDOMNUMBERSENGINEACTION_HPP | 
|---|
| 9 | #define SETRANDOMNUMBERSENGINEACTION_HPP | 
|---|
| 10 |  | 
|---|
| 11 | // include config.h | 
|---|
| 12 | #ifdef HAVE_CONFIG_H | 
|---|
| 13 | #include <config.h> | 
|---|
| 14 | #endif | 
|---|
| 15 |  | 
|---|
| 16 |  | 
|---|
| 17 | #include "Actions/Action.hpp" | 
|---|
| 18 |  | 
|---|
| 19 | #include "SetRandomNumbersEngineAction.def" | 
|---|
| 20 | #include "Action_impl_header.hpp" | 
|---|
| 21 |  | 
|---|
| 22 | #endif // SETRANDOMNUMBERSENGINEACTION_HPP | 
|---|
       
      
  Note:
 See   
TracBrowser
 for help on using the repository browser.