src/core/random-variable.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Mon, 18 Feb 2008 00:18:45 +0100
changeset 2427 9245ec163111
parent 2424 217a447122a6
child 2433 3a98e1db7f80
permissions -rw-r--r--
split checker from ParamSpec.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     2
//
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     3
// Copyright (c) 2006 Georgia Tech Research Corporation
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     4
//
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     5
// This program is free software; you can redistribute it and/or modify
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     6
// it under the terms of the GNU General Public License version 2 as
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     7
// published by the Free Software Foundation;
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     8
//
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     9
// This program is distributed in the hope that it will be useful,
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    12
// GNU General Public License for more details.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    13
//
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    14
// You should have received a copy of the GNU General Public License
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    15
// along with this program; if not, write to the Free Software
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    16
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    17
//
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    18
// Author: Rajib Bhattacharjea<raj.b@gatech.edu>
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    19
//
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    20
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    21
#ifndef __random_variable_h__
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    22
#define __random_variable_h__
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    23
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    24
#include <vector>
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    25
#include <algorithm>
676
0cf407300fa6 Fixed the problems that were found by Mathieu Lacage in the first
Emmanuelle Laprise
parents: 675
diff changeset
    26
#include <stdint.h>
2409
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2408
diff changeset
    27
#include <istream>
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2408
diff changeset
    28
#include <ostream>
2384
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
    29
#include "value.h"
2409
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2408
diff changeset
    30
#include "class-value-helper.h"
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    31
396
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
    32
/**
2217
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents: 1872
diff changeset
    33
 * \ingroup core
396
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
    34
 * \defgroup randomvariable Random Variable Distributions
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
    35
 *
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
    36
 */
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
    37
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    38
namespace ns3{
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    39
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
    40
class RandomVariableBase;
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    41
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    42
/**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    43
 * \brief The basic RNG for NS-3.
396
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
    44
 * \ingroup randomvariable
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    45
 *
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    46
 * Note: The underlying random number generation method used
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    47
 * by NS-3 is the RngStream code by Pierre L'Ecuyer at
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    48
 * the University of Montreal.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    49
 * 
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    50
 * NS-3 has a rich set of  random number generators.
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
    51
 * Class RandomVariableBase defines the base class functionalty
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    52
 * required for all random number generators.  By default, the underlying
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    53
 * generator is seeded with the time of day, and then deterministically
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    54
 * creates a sequence of seeds for each subsequent generator that is created.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    55
 * The rest of the documentation outlines how to change this behavior.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    56
 */
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
    57
class RandomVariable
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
    58
{ 
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    59
public:
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    60
  RandomVariable();
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
    61
  RandomVariable(const RandomVariable&o);
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
    62
  RandomVariable &operator = (const RandomVariable &o);
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
    63
  ~RandomVariable();
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    64
  
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    65
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    66
   * \brief Returns a random double from the underlying distribution
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    67
   * \return A floating point random value
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    68
   */
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
    69
  double GetValue (void) const;
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    70
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    71
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    72
   * \brief Returns a random integer integer from the underlying distribution
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    73
   * \return  Integer cast of ::GetValue()
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    74
   */
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
    75
  uint32_t GetIntValue (void) const;
364
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
    76
  
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    77
  /**
364
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
    78
   * \brief Get the internal state of the RNG
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
    79
   *
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
    80
   * This function is for power users who understand the inner workings
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
    81
   * of the underlying RngStream method used.  It returns the internal
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
    82
   * state of the RNG via the input parameter.
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
    83
   * \param seed Output parameter; gets overwritten with the internal state of
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
    84
   * of the RNG.
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    85
   */
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
    86
  void GetSeed(uint32_t seed[6]) const;
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    87
  
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    88
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    89
   * \brief Set seeding behavior
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    90
   * 
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    91
   * Specify whether the POSIX device /dev/random is to
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    92
   * be used for seeding.  When this is used, the underlying
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    93
   * generator is seeded with data from /dev/random instead of
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    94
   * being seeded based upon the time of day.  For this to be effective,
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    95
   * it must be called before the creation of the first instance of a 
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
    96
   * RandomVariableBase or subclass.  Example:
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    97
   * \code
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    98
   * RandomVariable::UseDevRandom();
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    99
   * UniformVariable x(2,3);  //these are seeded randomly
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   100
   * ExponentialVariable y(120); //etc
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   101
   * \endcode
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   102
   * \param udr True if /dev/random desired.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   103
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   104
  static  void UseDevRandom(bool udr = true);
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   105
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   106
   /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   107
   * \brief Use the global seed to force precisely reproducible results.
360
7bffd987426c Fixed major memory bug and docs in RandomVariable
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 346
diff changeset
   108
   *
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   109
   * It is often desirable to create a simulation that uses random
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   110
   * numbers, while at the same time is completely reproducible.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   111
   * Specifying this set of six random seeds initializes the
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   112
   * random number generator with the specified seed.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   113
   * Once this is set, all generators will produce fixed output
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   114
   * from run to run.  This is because each time a new generator is created,
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   115
   * the underlying RngStream deterministically creates a new seed based upon
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   116
   * the old one, hence a "stream" of RNGs.  Example:
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   117
   * \code
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   118
   * RandomVariable::UseGlobalSeed(...);
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   119
   * UniformVariable x(2,3);     //these will give the same output everytime
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   120
   * ExponentialVariable y(120); //as long as the seed stays the same
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   121
   * \endcode
423
76a580dfb0f7 Removed the unnecessary Seed classes
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 420
diff changeset
   122
   * \param s0
76a580dfb0f7 Removed the unnecessary Seed classes
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 420
diff changeset
   123
   * \param s1
76a580dfb0f7 Removed the unnecessary Seed classes
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 420
diff changeset
   124
   * \param s2
76a580dfb0f7 Removed the unnecessary Seed classes
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 420
diff changeset
   125
   * \param s3
76a580dfb0f7 Removed the unnecessary Seed classes
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 420
diff changeset
   126
   * \param s4
76a580dfb0f7 Removed the unnecessary Seed classes
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 420
diff changeset
   127
   * \param s5
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   128
   * \return True if seed is valid.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   129
   */ 
423
76a580dfb0f7 Removed the unnecessary Seed classes
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 420
diff changeset
   130
  static void UseGlobalSeed(uint32_t s0, uint32_t s1, uint32_t s2, 
76a580dfb0f7 Removed the unnecessary Seed classes
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 420
diff changeset
   131
                            uint32_t s3, uint32_t s4, uint32_t s5);
364
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   132
  
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   133
  /**
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   134
   * \brief Set the run number of this simulation
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   135
   *
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   136
   * These RNGs have the ability to give independent sets of trials for a fixed
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   137
   * global seed.  For example, suppose one sets up a simulation with
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   138
   * RandomVariables with a given global seed.  Suppose the user wanted to
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   139
   * retry the same simulation with different random values for validity,
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   140
   * statistical rigor, etc.  The user could either change the global seed and
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   141
   * re-run the simulation, or could use this facility to increment all of the
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   142
   * RNGs to a next substream state.  This predictably advances the internal
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   143
   * state of all RandomVariables n steps.  This should be called immediately
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   144
   * after the global seed is set, and before the creation of any
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   145
   * RandomVariables.  For example:
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   146
   * \code
423
76a580dfb0f7 Removed the unnecessary Seed classes
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 420
diff changeset
   147
   * RandomVariable::UseGlobalSeed(1,2,3,4,5,6);
364
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   148
   * int N = atol(argv[1]); //read in run number from command line
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   149
   * RandomVariable::SetRunNumber(N);
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   150
   * UniformVariable x(0,10);
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   151
   * ExponentialVariable y(2902);
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   152
   * \endcode
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   153
   * In this example, N could successivly be equal to 1,2,3, etc. and the user
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   154
   * would continue to get independent runs out of the single simulation.  For
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   155
   * this simple example, the following might work:
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   156
   * \code
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   157
   * ./simulation 0
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   158
   * ...Results for run 0:...
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   159
   *
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   160
   * ./simulation 1
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   161
   * ...Results for run 1:...
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   162
   * \endcode
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   163
   */
9df87117d468 RandomVariable API in line with Michelle's comments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 360
diff changeset
   164
  static void SetRunNumber(uint32_t n);
2384
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   165
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   166
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   167
  RandomVariable (PValue value);
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   168
  operator PValue () const;
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   169
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   170
private:
2384
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   171
  friend class RandomVariableValue;
2409
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2408
diff changeset
   172
  friend std::ostream &operator << (std::ostream &os, const RandomVariable &var);
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2408
diff changeset
   173
  friend std::istream &operator >> (std::istream &os, RandomVariable &var);
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2408
diff changeset
   174
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   175
  RandomVariableBase *m_variable;
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   176
protected:
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   177
  RandomVariable (const RandomVariableBase &variable);
2384
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   178
  RandomVariableBase *Peek (void) const;
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   179
};
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   180
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   181
/**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   182
 * \brief The uniform distribution RNG for NS-3.
396
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   183
 * \ingroup randomvariable
1872
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   184
 *
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   185
 * This class supports the creation of objects that return random numbers
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   186
 * from a fixed uniform distribution.  It also supports the generation of 
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   187
 * single random numbers from various uniform distributions.
1872
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   188
 *
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   189
 * The low end of the range is always included and the high end
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   190
 * of the range is always excluded.
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   191
 * \code
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   192
 * UniformVariable x(0,10);
1872
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   193
 * x.GetValue();  //will always return numbers [0,10)
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   194
 * UniformVariable::GetSingleValue(100,1000); //returns a value [100,1000)
592
f7e4beac3e31 fix dox warnings
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 442
diff changeset
   195
 * \endcode
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   196
 */
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   197
class UniformVariable : public RandomVariable 
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   198
{
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   199
public:
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   200
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   201
   * Creates a uniform random number generator in the
1872
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   202
   * range [0.0 .. 1.0).
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   203
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   204
  UniformVariable();
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   205
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   206
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   207
   * Creates a uniform random number generator with the specified range
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   208
   * \param s Low end of the range
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   209
   * \param l High end of the range
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   210
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   211
  UniformVariable(double s, double l);
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   212
public:
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   213
  /**
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   214
   * \param s Low end of the range
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   215
   * \param l High end of the range
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   216
   * \return A uniformly distributed random number between s and l
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   217
   */
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   218
  static double GetSingleValue(double s, double l);
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   219
};
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   220
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   221
/**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   222
 * \brief A random variable that returns a constant
396
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   223
 * \ingroup randomvariable
360
7bffd987426c Fixed major memory bug and docs in RandomVariable
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 346
diff changeset
   224
 *
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   225
 * Class ConstantVariableImpl defines a random number generator that
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   226
 * returns the same value every sample.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   227
 */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   228
class ConstantVariable : public RandomVariable { 
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   229
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   230
public:
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   231
  /**
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   232
   * Construct a ConstantVariableImpl RNG that returns zero every sample
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   233
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   234
  ConstantVariable();
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   235
  
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   236
  /**
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   237
   * Construct a ConstantVariableImpl RNG that returns the specified value
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   238
   * every sample.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   239
   * \param c Unchanging value for this RNG.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   240
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   241
  ConstantVariable(double c);
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   242
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   243
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   244
   * \brief Specify a new constant RNG for this generator.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   245
   * \param c New constant value for this RNG.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   246
   */
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   247
  void SetConstant(double c);
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   248
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   249
};
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   250
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   251
/**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   252
 * \brief Return a sequential list of values
396
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   253
 * \ingroup randomvariable
360
7bffd987426c Fixed major memory bug and docs in RandomVariable
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 346
diff changeset
   254
 *
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   255
 * Class SequentialVariable defines a random number generator that
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   256
 * returns a sequential sequence.  The sequence monotonically
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   257
 * increases for a period, then wraps around to the low value 
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   258
 * and begins monotonicaly increasing again.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   259
 */
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   260
class SequentialVariable : public RandomVariable 
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   261
{
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   262
public:
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   263
  /**
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   264
   * \brief Constructor for the SequentialVariableImpl RNG.
360
7bffd987426c Fixed major memory bug and docs in RandomVariable
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 346
diff changeset
   265
   *
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   266
   * The four parameters define the sequence.  For example
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   267
   * SequentialVariableImpl(0,5,1,2) creates a RNG that has the sequence
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   268
   * 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 0, 0 ...
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   269
   * \param f First value of the sequence.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   270
   * \param l One more than the last value of the sequence.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   271
   * \param i Increment between sequence values
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   272
   * \param c Number of times each member of the sequence is repeated
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   273
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   274
  SequentialVariable(double f, double l, double i = 1, uint32_t c = 1);
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   275
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   276
  /**
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   277
   * \brief Constructor for the SequentialVariableImpl RNG.
360
7bffd987426c Fixed major memory bug and docs in RandomVariable
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 346
diff changeset
   278
   *
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   279
   * Differs from the first only in that the increment parameter is a
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   280
   * random variable
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   281
   * \param f First value of the sequence.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   282
   * \param l One more than the last value of the sequence.
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   283
   * \param i Reference to a RandomVariableBase for the sequence increment
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   284
   * \param c Number of times each member of the sequence is repeated
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   285
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   286
  SequentialVariable(double f, double l, const RandomVariable& i, uint32_t c = 1);
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   287
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   288
};
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   289
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   290
/**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   291
 * \brief Exponentially Distributed random var
396
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   292
 * \ingroup randomvariable
1872
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   293
 *
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   294
 * This class supports the creation of objects that return random numbers
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   295
 * from a fixed exponential distribution.  It also supports the generation of 
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   296
 * single random numbers from various exponential distributions.
1872
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   297
 *
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   298
 * The probability density function of an exponential variable 
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   299
 * is defined over the interval [0, +inf) as:
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   300
 * \f$ \alpha  e^{-\alpha x} \f$
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   301
 * where \f$ \alpha = \frac{1}{mean} \f$ 
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   302
 *
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   303
 * The bounded version is defined over the internal [0,+inf) as:
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   304
 * \f$ \left\{ \begin{array}{cl} \alpha  e^{-\alpha x} & x < bound \\ bound & x > bound \end{array}\right. \f$
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   305
 * 
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   306
 * \code
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   307
 * ExponentialVariableImpl x(3.14);
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   308
 * x.GetValue();  //will always return with mean 3.14
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   309
 * ExponentialVariableImpl::GetSingleValue(20.1); //returns with mean 20.1
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   310
 * ExponentialVariableImpl::GetSingleValue(108); //returns with mean 108
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   311
 * \endcode
360
7bffd987426c Fixed major memory bug and docs in RandomVariable
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 346
diff changeset
   312
 *
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   313
 */
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   314
class ExponentialVariable : public RandomVariable 
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   315
{ 
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   316
public:
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   317
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   318
   * Constructs an exponential random variable  with a mean
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   319
   * value of 1.0.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   320
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   321
  ExponentialVariable();
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   322
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   323
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   324
   * \brief Constructs an exponential random variable with a specified mean
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   325
   * \param m Mean value for the random variable
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   326
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   327
  explicit ExponentialVariable(double m);
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   328
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   329
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   330
   * \brief Constructs an exponential random variable with spefified
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   331
   * \brief mean and upper limit.
360
7bffd987426c Fixed major memory bug and docs in RandomVariable
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 346
diff changeset
   332
   *
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   333
   * Since exponential distributions can theoretically return unbounded values,
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   334
   * it is sometimes useful to specify a fixed upper limit.  Note however when
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   335
   * the upper limit is specified, the true mean of the distribution is 
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   336
   * slightly smaller than the mean value specified.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   337
   * \param m Mean value of the random variable
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   338
   * \param b Upper bound on returned values
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   339
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   340
  ExponentialVariable(double m, double b);
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   341
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   342
  /**
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   343
   * \param m The mean of the distribution from which the return value is drawn
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   344
   * \param b The upper bound value desired, beyond which values get clipped
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   345
   * \return A random number from an exponential distribution with mean m
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   346
   */
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   347
  static double GetSingleValue(double m, double b=0);
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   348
};
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   349
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   350
/**
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   351
 * \brief ParetoVariableImpl distributed random var
396
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   352
 * \ingroup randomvariable
1872
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   353
 *
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   354
 * This class supports the creation of objects that return random numbers
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   355
 * from a fixed pareto distribution.  It also supports the generation of 
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   356
 * single random numbers from various pareto distributions.
1872
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   357
 *
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   358
 * The probability density function is defined over the range [\f$x_m\f$,+inf) as:
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   359
 * \f$ k \frac{x_m^k}{x^{k+1}}\f$ where \f$x_m > 0\f$ is called the location 
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   360
 * parameter and \f$ k > 0\f$ is called the pareto index or shape.
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   361
 * 
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   362
 * The parameter \f$ x_m \f$ can be infered from the mean and the parameter \f$ k \f$
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   363
 * with the equation \f$ x_m = mean \frac{k-1}{k},  k > 1\f$.
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   364
 *
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   365
 * \code
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   366
 * ParetoVariableImpl x(3.14);
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   367
 * x.GetValue();  //will always return with mean 3.14
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   368
 * ParetoVariableImpl::GetSingleValue(20.1); //returns with mean 20.1
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   369
 * ParetoVariableImpl::GetSingleValue(108); //returns with mean 108
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   370
 * \endcode
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   371
 */
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   372
class ParetoVariable : public RandomVariable
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   373
{
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   374
public:
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   375
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   376
   * Constructs a pareto random variable with a mean of 1 and a shape
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   377
   * parameter of 1.5
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   378
   */
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   379
  ParetoVariable ();
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   380
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   381
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   382
   * Constructs a pareto random variable with specified mean and shape
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   383
   * parameter of 1.5
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   384
   * \param m Mean value of the distribution
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   385
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   386
  explicit ParetoVariable(double m);
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   387
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   388
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   389
   * Constructs a pareto random variable with the specified mean value and
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   390
   * shape parameter.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   391
   * \param m Mean value of the distribution
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   392
   * \param s Shape parameter for the distribution
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   393
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   394
  ParetoVariable(double m, double s);
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   395
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   396
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   397
   * \brief Constructs a pareto random variable with the specified mean
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   398
   * \brief value, shape (alpha), and upper bound.
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   399
   *
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   400
   * Since pareto distributions can theoretically return unbounded values,
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   401
   * it is sometimes useful to specify a fixed upper limit.  Note however
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   402
   * when the upper limit is specified, the true mean of the distribution
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   403
   * is slightly smaller than the mean value specified.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   404
   * \param m Mean value
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   405
   * \param s Shape parameter
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   406
   * \param b Upper limit on returned values
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   407
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   408
  ParetoVariable(double m, double s, double b);
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   409
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   410
  /**
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   411
   * \param m The mean value of the distribution from which the return value
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   412
   * is drawn.
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   413
   * \param s The shape parameter of the distribution from which the return
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   414
   * value is drawn.
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   415
   * \param b The upper bound to which to restrict return values
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   416
   * \return A random number from a Pareto distribution with mean m and shape
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   417
   * parameter s.
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   418
   */
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   419
  static double GetSingleValue(double m, double s, double b=0);
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   420
};
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   421
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   422
/**
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   423
 * \brief WeibullVariableImpl distributed random var
396
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   424
 * \ingroup randomvariable
1872
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   425
 *
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   426
 * This class supports the creation of objects that return random numbers
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   427
 * from a fixed weibull distribution.  It also supports the generation of 
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   428
 * single random numbers from various weibull distributions.
1872
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   429
 *
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   430
 * The probability density function is defined over the interval [0, +inf]
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   431
 * as: \f$ \frac{k}{\lambda}\left(\frac{x}{\lambda}\right)^{k-1}e^{-\left(\frac{x}{\lambda}\right)^k} \f$
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   432
 * where \f$ k > 0\f$ is the shape parameter and \f$ \lambda > 0\f$  is the scale parameter. The
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   433
 * specified mean is related to the scale and shape parameters by the following relation:
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   434
 * \f$ mean = \lambda\Gamma\left(1+\frac{1}{k}\right) \f$ where \f$ \Gamma \f$ is the Gamma function.
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   435
 */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   436
class WeibullVariable : public RandomVariable {
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   437
public:
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   438
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   439
   * Constructs a weibull random variable  with a mean
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   440
   * value of 1.0 and a shape (alpha) parameter of 1
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   441
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   442
  WeibullVariable();
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   443
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   444
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   445
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   446
   * Constructs a weibull random variable with the specified mean
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   447
   * value and a shape (alpha) parameter of 1.5.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   448
   * \param m mean value of the distribution
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   449
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   450
   WeibullVariable(double m) ;
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   451
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   452
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   453
   * Constructs a weibull random variable with the specified mean
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   454
   * value and a shape (alpha).
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   455
   * \param m Mean value for the distribution.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   456
   * \param s Shape (alpha) parameter for the distribution.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   457
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   458
  WeibullVariable(double m, double s);
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   459
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   460
   /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   461
   * \brief Constructs a weibull random variable with the specified mean
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   462
   * \brief value, shape (alpha), and upper bound.
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   463
   * Since WeibullVariableImpl distributions can theoretically return unbounded values,
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   464
   * it is sometimes usefull to specify a fixed upper limit.  Note however
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   465
   * that when the upper limit is specified, the true mean of the distribution
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   466
   * is slightly smaller than the mean value specified.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   467
   * \param m Mean value for the distribution.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   468
   * \param s Shape (alpha) parameter for the distribution.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   469
   * \param b Upper limit on returned values
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   470
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   471
  WeibullVariable(double m, double s, double b);
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   472
  /**
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   473
   * \param m Mean value for the distribution.
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   474
   * \param s Shape (alpha) parameter for the distribution.
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   475
   * \param b Upper limit on returned values
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   476
   * \return Random number from a distribution specified by m,s, and b
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   477
   */
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   478
  static double GetSingleValue(double m, double s, double b=0);
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   479
};
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   480
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   481
/**
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   482
 * \brief Class NormalVariableImpl defines a random variable with a
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   483
 * normal (Gaussian) distribution.
1872
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   484
 * \ingroup randomvariable
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   485
 * 
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   486
 * This class supports the creation of objects that return random numbers
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   487
 * from a fixed normal distribution.  It also supports the generation of 
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   488
 * single random numbers from various normal distributions.
1872
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   489
 *
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   490
 * The density probability function is defined over the interval (-inf,+inf)
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   491
 * as: \f$ \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{s\sigma^2}}\f$
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   492
 * where \f$ mean = \mu \f$ and \f$ variance = \sigma^2 \f$
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   493
 *
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   494
 */
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   495
class NormalVariable : public RandomVariable
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   496
{
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   497
public:
420
32ebc6582692 Fixed NormalVariable::INFINITE_VALUE
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 397
diff changeset
   498
   static const double INFINITE_VALUE;
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   499
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   500
   * Constructs an normal random variable  with a mean
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   501
   * value of 0 and variance of 1.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   502
   */ 
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   503
  NormalVariable();
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   504
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   505
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   506
   * \brief Construct a normal random variable with specified mean and variance
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   507
   * \param m Mean value
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   508
   * \param v Variance
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   509
   * \param b Bound.  The NormalVariableImpl is bounded within +-bound.
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   510
   */ 
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   511
  NormalVariable(double m, double v, double b = INFINITE_VALUE);
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   512
  /**
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   513
   * \param m Mean value
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   514
   * \param v Variance
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   515
   * \param b Bound.  The NormalVariableImpl is bounded within +-bound.
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   516
   * \return A random number from a distribution specified by m,v, and b.
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   517
   */ 
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   518
  static double GetSingleValue(double m, double v, double b = INFINITE_VALUE);
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   519
};
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   520
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   521
/**
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   522
 * \brief EmpiricalVariableImpl distribution random var
396
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   523
 * \ingroup randomvariable
360
7bffd987426c Fixed major memory bug and docs in RandomVariable
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 346
diff changeset
   524
 *
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   525
 * Defines a random variable  that has a specified, empirical 
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   526
 * distribution.  The distribution is specified by a
1872
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   527
 * series of calls to the CDF member function, specifying a
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   528
 * value and the probability that the function value is less than
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   529
 * the specified value.  When values are requested,
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   530
 * a uniform random variable is used to select a probabililty,
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   531
 * and the return value is interpreted linerarly between the
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   532
 * two appropriate points in the CDF
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   533
 */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   534
class EmpiricalVariable : public RandomVariable {
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   535
public:
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   536
  /**
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   537
   * Constructor for the EmpiricalVariableImpl random variables.
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   538
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   539
  explicit EmpiricalVariable();
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   540
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   541
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   542
   * \brief Specifies a point in the empirical distribution
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   543
   * \param v The function value for this point
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   544
   * \param c Probability that the function is less than or equal to v
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   545
   */
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   546
  void CDF(double v, double c);  // Value, prob <= Value
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   547
protected:
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   548
  EmpiricalVariable (const RandomVariableBase &variable);
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   549
};
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   550
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   551
/**
396
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   552
 * \brief Integer-based empirical distribution
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   553
 * \ingroup randomvariable
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   554
 *
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   555
 * Defines an empirical distribution where all values are integers.
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   556
 * Indentical to EmpiricalVariableImpl, but with slightly different
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   557
 * interpolation between points.
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   558
 */
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   559
class IntEmpiricalVariable : public EmpiricalVariable 
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   560
{
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   561
public:
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   562
  IntEmpiricalVariable();
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   563
};
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   564
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   565
/**
396
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   566
 * \brief a non-random variable
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   567
 * \ingroup randomvariable
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   568
 *
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   569
 * Defines a random variable  that has a specified, predetermined
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   570
 * sequence.  This would be useful when trying to force
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   571
 * the RNG to return a known sequence, perhaps to
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   572
 * compare NS-3 to some other simulator
7b4349cd88bc add a randomvariable group
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 364
diff changeset
   573
 */
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   574
class DeterministicVariable : public RandomVariable
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   575
{
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   576
public:
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   577
  /**
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   578
   * \brief Constructor
360
7bffd987426c Fixed major memory bug and docs in RandomVariable
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 346
diff changeset
   579
   *
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   580
   * Creates a generator that returns successive elements of the d array
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   581
   * on successive calls to ::Value().  Note that the d pointer is copied
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   582
   * for use by the generator (shallow-copy), not its contents, so the 
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   583
   * contents of the array d points to have to remain unchanged for the use 
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   584
   * of DeterministicVariableImpl to be meaningful.
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   585
   * \param d Pointer to array of random values to return in sequence
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   586
   * \param c Number of values in the array
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   587
   */
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   588
  explicit DeterministicVariable(double* d, uint32_t c);
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   589
};
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   590
438
515bb5663cf3 Randomvariable Lognormal added
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 423
diff changeset
   591
515bb5663cf3 Randomvariable Lognormal added
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 423
diff changeset
   592
/**
515bb5663cf3 Randomvariable Lognormal added
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 423
diff changeset
   593
 * \brief Log-normal Distributed random var
515bb5663cf3 Randomvariable Lognormal added
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 423
diff changeset
   594
 * \ingroup randomvariable
1872
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   595
 *
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   596
 * LogNormalVariableImpl defines a random variable with log-normal
438
515bb5663cf3 Randomvariable Lognormal added
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 423
diff changeset
   597
 * distribution.  If one takes the natural logarithm of random
515bb5663cf3 Randomvariable Lognormal added
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 423
diff changeset
   598
 * variable following the log-normal distribution, the obtained values
515bb5663cf3 Randomvariable Lognormal added
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 423
diff changeset
   599
 * follow a normal distribution.
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   600
 *  This class supports the creation of objects that return random numbers
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   601
 * from a fixed lognormal distribution.  It also supports the generation of
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   602
 * single random numbers from various lognormal distributions.
1872
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   603
 *
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   604
 * The probability density function is defined over the interval [0,+inf) as:
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   605
 * \f$ \frac{1}{x\sigma\sqrt{2\pi}} e^{-\frac{(ln(x) - \mu)^2}{2\sigma^2}}\f$
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   606
 * where \f$ mean = e^{\mu+\frac{\sigma^2}{2}} \f$ and 
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   607
 * \f$ variance = (e^{\sigma^2}-1)e^{2\mu+\sigma^2}\f$
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   608
 *
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   609
 * The \f$ \mu \f$ and \f$ \sigma \f$ parameters can be calculated from the mean
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   610
 * and standard deviation with the following equations:
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   611
 * \f$ \mu = ln(mean) - \frac{1}{2}ln\left(1+\frac{stddev}{mean^2}\right)\f$, and,
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   612
 * \f$ \sigma = \sqrt{ln\left(1+\frac{stddev}{mean^2}\right)}\f$
438
515bb5663cf3 Randomvariable Lognormal added
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 423
diff changeset
   613
 */
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   614
class LogNormalVariable : public RandomVariable 
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   615
{
438
515bb5663cf3 Randomvariable Lognormal added
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 423
diff changeset
   616
public:
515bb5663cf3 Randomvariable Lognormal added
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 423
diff changeset
   617
  /**
1872
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   618
   * \param mu mu parameter of the lognormal distribution
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   619
   * \param sigma sigma parameter of the lognormal distribution
438
515bb5663cf3 Randomvariable Lognormal added
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 423
diff changeset
   620
   */
515bb5663cf3 Randomvariable Lognormal added
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 423
diff changeset
   621
  LogNormalVariable (double mu, double sigma);
515bb5663cf3 Randomvariable Lognormal added
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 423
diff changeset
   622
515bb5663cf3 Randomvariable Lognormal added
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 423
diff changeset
   623
  /**
1872
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   624
   * \param mu mu parameter of the underlying normal distribution
4dfb2a623722 bug 109: improve the doxygen documentation for RandomVariable
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1806
diff changeset
   625
   * \param sigma sigma parameter of the underlying normal distribution
442
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   626
   * \return A random number from the distribution specified by mu and sigma
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   627
   */
96d3e7dc8bb2 Added static RNGs, like ExponentialVariable::GetSingleValue(mean)
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 438
diff changeset
   628
  static double GetSingleValue(double mu, double sigma);
438
515bb5663cf3 Randomvariable Lognormal added
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 423
diff changeset
   629
};
515bb5663cf3 Randomvariable Lognormal added
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 423
diff changeset
   630
942
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   631
/**
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   632
 * \brief Triangularly Distributed random var
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   633
 * \ingroup randomvariable
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   634
 * 
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   635
 * This distribution is a triangular distribution.  The probablility density
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   636
 * is in the shape of a triangle.
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   637
 */
2383
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   638
class TriangularVariable : public RandomVariable 
a0e0ec096169 bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2217
diff changeset
   639
{
942
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   640
public:
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   641
  /**
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   642
   * Creates a triangle distribution random number generator in the
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   643
   * range [0.0 .. 1.0), with mean of 0.5
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   644
   */
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   645
  TriangularVariable();
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   646
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   647
  /**
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   648
   * Creates a triangle distribution random number generator with the specified
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   649
   * range
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   650
   * \param s Low end of the range
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   651
   * \param l High end of the range
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   652
   * \param mean mean of the distribution
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   653
   */
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   654
  TriangularVariable(double s, double l, double mean);
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   655
  /**
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   656
   * \param s Low end of the range
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   657
   * \param l High end of the range
1250
243eb985ad00 fix dox warning
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 942
diff changeset
   658
   * \param mean mean of the distribution
942
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   659
   * \return A triangularly distributed random number between s and l
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   660
   */
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   661
  static double GetSingleValue(double s, double l, double mean);
b65368bf40f9 Added Triangularly distributed random variables
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 676
diff changeset
   662
};
438
515bb5663cf3 Randomvariable Lognormal added
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 423
diff changeset
   663
2409
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2408
diff changeset
   664
std::ostream &operator << (std::ostream &os, const RandomVariable &var);
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2408
diff changeset
   665
std::istream &operator >> (std::istream &os, RandomVariable &var);
2384
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   666
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   667
2409
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2408
diff changeset
   668
class RandomVariableValue : public Value {};
2410
88dc7d4a6731 introduce top-level ParamSpec for bindings.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2409
diff changeset
   669
class RandomVariableParamSpec : public ParamSpec {};
2384
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   670
2408
04fe819b3ad1 rework param-spec-helper code to avoid having to deal with pointers to member functions et al.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2384
diff changeset
   671
template <typename T1>
2424
217a447122a6 split initial value from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2410
diff changeset
   672
Ptr<ParamSpec> MakeRandomVariableParamSpec (T1 a1);
2408
04fe819b3ad1 rework param-spec-helper code to avoid having to deal with pointers to member functions et al.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2384
diff changeset
   673
template <typename T1, typename T2>
2424
217a447122a6 split initial value from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2410
diff changeset
   674
Ptr<ParamSpec> MakeRandomVariableParamSpec (T1 a1, T2 a2);
2408
04fe819b3ad1 rework param-spec-helper code to avoid having to deal with pointers to member functions et al.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2384
diff changeset
   675
2427
9245ec163111 split checker from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2424
diff changeset
   676
Ptr<AttributeChecker> MakeRandomVariableChecker (void);
2384
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   677
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   678
}//namespace ns3
2384
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   679
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   680
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   681
namespace ns3 {
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   682
2408
04fe819b3ad1 rework param-spec-helper code to avoid having to deal with pointers to member functions et al.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2384
diff changeset
   683
template <typename T1>
2424
217a447122a6 split initial value from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2410
diff changeset
   684
Ptr<ParamSpec> MakeRandomVariableParamSpec (T1 a1)
2384
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   685
{
2410
88dc7d4a6731 introduce top-level ParamSpec for bindings.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2409
diff changeset
   686
  return MakeClassValueHelperParamSpec<RandomVariable, 
2424
217a447122a6 split initial value from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2410
diff changeset
   687
    RandomVariableValue, RandomVariableParamSpec> (a1);
2384
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   688
}
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   689
2408
04fe819b3ad1 rework param-spec-helper code to avoid having to deal with pointers to member functions et al.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2384
diff changeset
   690
template <typename T1, typename T2>
2424
217a447122a6 split initial value from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2410
diff changeset
   691
Ptr<ParamSpec> MakeRandomVariableParamSpec (T1 a1, T2 a2)
2408
04fe819b3ad1 rework param-spec-helper code to avoid having to deal with pointers to member functions et al.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2384
diff changeset
   692
{
2410
88dc7d4a6731 introduce top-level ParamSpec for bindings.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2409
diff changeset
   693
  return MakeClassValueHelperParamSpec<RandomVariable, 
2424
217a447122a6 split initial value from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2410
diff changeset
   694
    RandomVariableValue,RandomVariableParamSpec> (a1, a2);
2408
04fe819b3ad1 rework param-spec-helper code to avoid having to deal with pointers to member functions et al.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2384
diff changeset
   695
}
04fe819b3ad1 rework param-spec-helper code to avoid having to deal with pointers to member functions et al.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2384
diff changeset
   696
04fe819b3ad1 rework param-spec-helper code to avoid having to deal with pointers to member functions et al.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2384
diff changeset
   697
2384
500ada6a4874 add Value support to RandomVariable.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2383
diff changeset
   698
} // namespace ns3
346
4a76f247e7dc Add random number files, base class Application
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   699
#endif