A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
rng-seed-manager.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2012 Mathieu Lacage
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 *
17 */
18
19#ifndef RNG_SEED_MANAGER_H
20#define RNG_SEED_MANAGER_H
21
22#include <stdint.h>
23
24/**
25 * \file
26 * \ingroup randomvariable
27 * ns3::RngSeedManager declaration.
28 */
29
30namespace ns3
31{
32
33/**
34 * \ingroup randomvariable
35 *
36 * Manage the seed number and run number of the underlying
37 * random number generator, and automatic assignment of stream numbers.
38 */
40{
41 public:
42 /**
43 * \brief Set the seed.
44 *
45 * This sets the global initial seed which will be used all
46 * subsequently instantiated RandomVariableStream objects.
47 *
48 * \code
49 * RngSeedManager::SetSeed(15);
50 * UniformVariable x(2,3); // These will give the same output every time
51 * ExponentialVariable y(120); // as long as the seed stays the same.
52 * \endcode
53 * \param [in] seed The seed value to use.
54 *
55 * \note While the underlying RNG takes six integer values as a seed;
56 * it is sufficient to set these all to the same integer, so we provide
57 * a simpler interface here that just takes one integer.
58 */
59 static void SetSeed(uint32_t seed);
60
61 /**
62 * \brief Get the current seed value which will be used by all
63 * subsequently instantiated RandomVariableStream objects.
64 *
65 * \return The seed value.
66 *
67 * This returns the current seed value.
68 */
69 static uint32_t GetSeed();
70
71 /**
72 * \brief Set the run number of simulation.
73 *
74 * \code
75 * RngSeedManager::SetSeed(12);
76 * int N = atol(argv[1]); // Read in run number from command line.
77 * RngSeedManager::SetRun(N);
78 * UniformVariable x(0,10);
79 * ExponentialVariable y(2902);
80 * \endcode
81 * In this example, \c N could successively be equal to 1,2,3, _etc._
82 * and the user would continue to get independent runs out of the
83 * single simulation. For this simple example, the following might work:
84 * \code
85 * ./simulation 0
86 * ...Results for run 0:...
87 *
88 * ./simulation 1
89 * ...Results for run 1:...
90 * \endcode
91 *
92 * \param [in] run The run number.
93 */
94 static void SetRun(uint64_t run);
95 /**
96 * \brief Get the current run number.
97 * \returns The current run number
98 * \see SetRun
99 */
100 static uint64_t GetRun();
101
102 /**
103 * Get the next automatically assigned stream index.
104 * \returns The next stream index.
105 */
106 static uint64_t GetNextStreamIndex();
107};
108
109/** Alias for compatibility. */
111
112} // namespace ns3
113
114#endif /* RNG_SEED_MANAGER_H */
Manage the seed number and run number of the underlying random number generator, and automatic assign...
static void SetRun(uint64_t run)
Set the run number of simulation.
static void SetSeed(uint32_t seed)
Set the seed.
static uint64_t GetNextStreamIndex()
Get the next automatically assigned stream index.
static uint64_t GetRun()
Get the current run number.
static uint32_t GetSeed()
Get the current seed value which will be used by all subsequently instantiated RandomVariableStream o...
Every class exported by the ns3 library is enclosed in the ns3 namespace.
RngSeedManager SeedManager
Alias for compatibility.