[Ns-developers] Random Variables API changes

Gustavo Carneiro gjcarneiro at gmail.com
Tue Jan 20 10:09:11 PST 2009


2009/1/20 Tom Henderson <tomh at tomh.org>

>
> >-----Original Message-----
> >From: Gustavo Carneiro [mailto:gjcarneiro at gmail.com]
> >Sent: Tuesday, January 20, 2009 09:19 AM
> >To: 'Raj Bhattacharjea'
> >Cc: 'Tom Henderson', 'NS3 Developers Mailing List'
> >Subject: Re: [Ns-developers] Random Variables API changes
> >
> >2009/1/20 Raj Bhattacharjea <raj.b at gatech.edu>
> >
> >> On Tue, Jan 20, 2009 at 11:40 AM, Raj Bhattacharjea <raj.b at gatech.edu>
> >> wrote:
> >> > quick ideas that need to be looked at.  The biggest of these is a
> >> > change like the following:
> >> >
> >> > - UniformVariable::GetSingleValue (0, N)
> >> > + UniformVariable().GetValue (0, N)
> >> >
> >> > I had to do this in one place to make things compile, but seems a bit
> >>
> >> I forgot I had to do this in several places, or things similar to
> >> this.  The affected files are:
> >>
> >> src/devices/csma/backoff.cc
> >> src/mobility/random-direction-2d-mobility-model.cc
> >> src/routing/olsr/olsr-agent-impl.cc
> >>
> >> I'm sure the maintainers of these would have their preferred
> >> implementation.
> >
> >
> >I wonder what is the rationale for the removal of GetSingleValue?  It
> seems
> >to me that keeping a single static UniformVariable global variable is just
> a
> >pointless API change, as it is surely equivalent to previous code, while
> >keeping one UniformVariable per OLSR instance sounds like a memory waste
> if
> >no reason for the change is known.
> >
> >I think there is probably a good reason for the API change and, not that I
> >don't trust you, but I would like to know what that reason is.  Was the
> >previous GetSingleValue usage pattern incorrect?
>
> Here is the background on this proposed change:
> http://mailman.isi.edu/pipermail/ns-developers/2008-September/004732.html
>
> My understanding is that the recommended way would be for users to create
> their own random variables, but if there is some reason they don't want to
> do that, they could draw from a common stream; the first stream generated by
> the RNG.  This stream would only provide Uniform(a,b) random variables,
> presumably via static functions or else via some global object.


>From the email:

* remove the GetSingleValue function from RandomVariable classes

The GetSingleValue function allows for potential non-independence as
it draws values from a single RNG stream for different random
variables.  Each random variable should have its own RNG stream.


>From that text it sounds like either a temporary RV instance or a single
global RV for all OLSR instances is not recommended.  But I am partially
guessing.  Under which conditions does "Each random variable should have its
own RNG stream" hold true?  Without reading the source code I can't be 100%
sure.

Basically I believe the Changes.html files should contain an answer to the
following question: "how to migrate code using the old GetSingleValue to new
API?".  The sooner that question is answered, the sooner ns-3's own code can
be correctly fixed, let alone 3rd party code.

So, in the OLSR example, OLSR agent would have the choice of a per-agent
> UniformVariable generator, or could access the (global) first stream.  But,
> I didn't think that we were talking about using anonymous temporary
> variables for this purpose.


I have no idea what a "stream" is and I don't care :-)  I thought we were
supposed to do everything via XxxVariable classes, not via RNG streams.

Thanks,

-- 
Gustavo J. A. M. Carneiro
INESC Porto, Telecommunications and Multimedia Unit
"The universe is always one step beyond logic." -- Frank Herbert


More information about the Ns-developers mailing list