[Developers] MCMC not working in ADMB10
Johnoel Ancheta
johnoel at hawaii.edu
Fri Nov 19 10:59:13 PST 2010
Thanks Dave,
I'll add valgrind to the automated testing (buildbot).
JOhnoel
On 11/19/10 7:07 AM, dave fournier wrote:
> The old better_rand function saves its state in static variables.
> this is the old C approach. the problem is that you can't have two
> different
> random number generators using this code. the general approach is to take
> all the static variables and put them in a class. then different
> instances of the
> class are different random generators with distinct states.
>
> For people adding code to ADMB there is the follwong rule of thumb.
> Whenever
> you use new in a constructor you need to write a destructor with delete.
>
> If you had run the example with valgrind it would have picked this up
> immediately.
>
>
> ==10191== 1,137,337,344 bytes in 227,832 blocks are definitely lost in
> loss record 16 of 16
> ==10191== at 0x4C27939: operator new[](unsigned long)
> (vg_replace_malloc.c:305)
> ==10191== by 0x5464B6:
> random_number_generator::random_number_generator(int) (rngen.cpp:70)
> ==10191== by 0x463D1A: better_rand(long&) (bet_rand.cpp:147)
> ==10191== by 0x4772C7: bounded_multivariate_normal(int, dvector
> const&, dvector const&, dmatrix&, long&, double const&) (monte.cpp:81)
> ==10191== by 0x45D655: function_minimizer::mcmc_routine(int, int,
> double, int) (xxmcmc.cpp:703)
>
>
> destructor should be something like
>
> random_number_generator::~random_number_generator()
> {
> delete [] mt;
> mt=0; // not necessary but habit.
> }
>
>
> _______________________________________________
> Developers mailing list
> Developers at admb-project.org
> http://lists.admb-project.org/mailman/listinfo/developers
More information about the Developers
mailing list