mirror of
https://github.com/nasa/trick.git
synced 2025-01-02 11:26:43 +00:00
19025d77ad
Reorganized. Created a new top level include directory that will hold all of Trick's header files. Moved all of the Trick headers to this directory. Created a libexec directory that holds all of the executables that users don't need to execute directly. Changed all of the executables remaining in bin to start with "trick-". In the sim_services directories changed all source files to find the Trick headers in their new location. Since all of the include files are gone in sim_services, removed the src directories as well, moving all of the source files up a level. Moved the makefiles, docs, man, and other architecture independent files into a top level share directory. Renamed lib_${TRICK_HOST_CPU} to lib64 or lib depending on the platform we're currently on. refs #63
185 lines
5.9 KiB
C++
185 lines
5.9 KiB
C++
/*
|
|
PURPOSE: (Monte carlo structures)
|
|
REFERENCE: (Trick Users Guide)
|
|
ASSUMPTIONS AND LIMITATIONS: (None)
|
|
PROGRAMMERS: ((Keith Vetter) (LinCom) (7/2003))
|
|
*/
|
|
|
|
#ifndef MONTEVARRANDOM_HH
|
|
#define MONTEVARRANDOM_HH
|
|
|
|
#include <string>
|
|
|
|
#include "trick/MonteVar.hh"
|
|
#include "trick/rand_generator.h"
|
|
#include "trick/StlRandomGenerator.hh"
|
|
|
|
namespace Trick {
|
|
|
|
/**
|
|
* A variable whose values are taken from a random distribution.
|
|
*
|
|
* @author Alex Lin
|
|
* @author Donna Panter
|
|
* @author Derek Bankieris
|
|
*
|
|
* @date August 2010
|
|
*/
|
|
class MonteVarRandom : public Trick::MonteVar {
|
|
|
|
public:
|
|
///@brief Random number generation engine type.
|
|
///
|
|
///@details Used for TR1 and C++11 random number generation facilities
|
|
///
|
|
///@note: Values for this type must match those of StlRandomGenerator::StlEngine
|
|
///
|
|
enum StlEngine {
|
|
NO_ENGINE = 0, /**< -- This selection causes the Trick hand coded fallback algorithms to be used */
|
|
|
|
TRICK_DEFAULT_ENGINE = 1, /**< -- std::ranlux_base_01 for TR1, std::mt19937 for _HAVE_STD_RANDOM */
|
|
|
|
#ifdef _HAVE_TR1_RANDOM
|
|
RANLUX_BASE_01_ENGINE = 2, /**< -- TR1 only std::ranlux_base_01 Engine, note: replaced for c++11 */
|
|
RANLUX_64_BASE_01_ENGINE = 3, /**< -- TR1 only std::ranlux64_base_01 Engine, note: replaced for c++11 */
|
|
#endif
|
|
|
|
#ifdef _HAVE_STL_RANDOM
|
|
// NOTE: MINSTD_RAND_ENGINE and MT19937_ENGINE return out of canonical range
|
|
// for (at least) GCC 4.4.7,so are not provided for _HAVE_TR1_RANDOM
|
|
|
|
MINSTD_RAND_ENGINE = 2, /**< -- std::minstd_rand Minimal Standard Linear Congruential Engine */
|
|
MT19937_ENGINE = 3, /**< -- std::mt19937 Mersenne Twister Engine */
|
|
|
|
MT19937_64_ENGINE = 4, /**< -- std::mt19937_64 64 bit Mersenne Twister Engine. Not available TR1 */
|
|
|
|
RANLUX_24_BASE_ENGINE = 5, /**< -- std::ranlux24_base Engine */
|
|
RANLUX_44_BASE_ENGINE = 6, /**< -- std::ranlux48_base Engine */
|
|
|
|
RANLUX_24_ENGINE = 7, /**< -- std::ranlux24 Engine */
|
|
RANLUX_44_ENGINE = 8, /**< -- std::ranlux48 Engine */
|
|
|
|
KNUTH_B_ENGINE = 9 /**< -- std::knuth_b Engine */
|
|
#endif
|
|
};
|
|
|
|
/** A random distribution. */
|
|
enum Distribution {
|
|
GAUSSIAN = TRICK_GSL_GAUSS, /**< Gaussian distribution */
|
|
FLAT = TRICK_GSL_FLAT, /**< flat distribution */
|
|
POISSON = TRICK_GSL_POISSON /**< Poisson distribution */
|
|
};
|
|
|
|
protected:
|
|
/** Engine. */
|
|
StlEngine engineType; /**< trick_units(--) STL C++11 random number generation engine enum */
|
|
|
|
/** Distribution. */
|
|
Distribution distribution; /**< \n trick_units(--) */
|
|
|
|
/** Random distribution structure. */
|
|
TRICK_GSL_RANDIST randist; /**< \n trick_units(**) */
|
|
|
|
StlRandomGenerator* stlGenPtr; /**< trick_units(**) STL pseudo-random number generator */
|
|
|
|
public:
|
|
/**
|
|
* Constructs a MonteVarRandom with the given name, distribution, and units.
|
|
*
|
|
* @param name the fully qualified name of the simulation variable to which this MonteVarRandom refers
|
|
* @param distribution this variable's distribution
|
|
* @param unit this variable's units
|
|
* @param engine this variables's pseudo-random number 'engine'. Defaulted to NO_ENGINE (use Trick algorithms)
|
|
*/
|
|
MonteVarRandom(std::string name, Distribution distribution, std::string unit = "", StlEngine engine = MonteVarRandom::NO_ENGINE);
|
|
|
|
/**
|
|
* Destructor
|
|
*/
|
|
~MonteVarRandom();
|
|
|
|
/**
|
|
* Sets the seed.
|
|
*
|
|
* @param seed the seed
|
|
*/
|
|
void set_seed(unsigned long seed);
|
|
|
|
/**
|
|
* Sets the standard deviation.
|
|
*
|
|
* @param sigma the standard deviation
|
|
*/
|
|
void set_sigma(double sigma);
|
|
|
|
/**
|
|
* Sets the sigma range for the Trick RNG.
|
|
*
|
|
* @param sigma_range the range for the output random number
|
|
*/
|
|
void set_sigma_range(int sigma_range);
|
|
|
|
/**
|
|
* Sets the mean.
|
|
*
|
|
* @param mu the mean
|
|
*/
|
|
void set_mu(double mu);
|
|
|
|
/**
|
|
* Sets the minimum.
|
|
*
|
|
* @param min the minimum
|
|
*/
|
|
void set_min(double min);
|
|
|
|
/**
|
|
* Sets the maximum.
|
|
*
|
|
* @param max the maximum
|
|
*/
|
|
void set_max(double max);
|
|
|
|
/**
|
|
* Sets the relativity of the minimum.
|
|
*
|
|
* @param relativity the relativity
|
|
*/
|
|
void set_min_is_relative(bool relativity);
|
|
|
|
/**
|
|
* Sets the relativity of the maximum.
|
|
*
|
|
* @param relativity the relativity
|
|
*/
|
|
void set_max_is_relative(bool relativity);
|
|
|
|
/**
|
|
* Sets the Uniform Random number generator option.
|
|
*
|
|
* @param uniform the RNG option
|
|
*/
|
|
void set_uniform_generator(uniform_generator uniform);
|
|
|
|
/**
|
|
* @return value of the absolute minimum, taking into account all options (relative or absolute input)
|
|
*/
|
|
double get_absolute_min() const { return (randist.rel_min) ? (randist.mu + randist.min) : randist.min; }
|
|
|
|
/**
|
|
* @return value of the absolute maximum, taking into account all options (relative or absolute input)
|
|
*/
|
|
double get_absolute_max() const { return (randist.rel_max) ? (randist.mu + randist.max) : randist.max; }
|
|
|
|
protected:
|
|
virtual std::string get_next_value();
|
|
|
|
/**
|
|
* updates the STL randomization subobject when settings are changed, maintaining consistency
|
|
*/
|
|
void updateStlRandom();
|
|
};
|
|
|
|
};
|
|
#endif
|