./
mcmc_multi__define.pro
mcmc_multi is a subclass of the mcmc class to create markov chain monte carlo simulations on multiple chains simultaneously.
One of IDL's principal weaknesses is that, since it is an interpreted scripting language, it is much slower than compiled languages for repetitive tasks like looping. The mcmc_multi class tries to mitigate this problem by vectorizing the mcmc code. In this class, multiple chains are run simultaneously and, assuming that the code which generates and evaluates trial links is vectorized well, this may be substantially faster than running one long mcmc chain.
To use this class, the user must supply ARRAYS for the seed and data variables when initializing the object. Each element in the array represents the seed/data for a particular chain. The final set of chains fetched from the getChain method will have nchain columns and nstep rows.
As with the mcmc class, the user must also override the logTargetDistribution and selectTrial methods in a subclass of mcmc_multi. These methods have the same signatures as in a normal mcmc object, but the inputs and outputs must now be arrays, not scalars. These objects should be written in a vectorized fashion, otherwise mcmc_multi will probably have no speed bost over mcmc.
Some quick testing showed that mcmc_multi was about a factor of 2 slower than mcmc when run using only 1 chain, but was 10x faster when comparing 100 chains to 1 chain with 100x as many steps.
Class description for mcmc_multi
Inheritance
Fields in mcmc
- NSTEP 0L
- SEED ptr_new()
- NFAIL 0L
- NSUCCESS 0L
- DATA ptr_new()
- CHAIN ptr_new()
- LOGF ptr_new()
- THIN 0L
Author information
- History
October 2009: Written by Chris Beaumont, adapted from the mcmc class. December 2009: Added tracking of maximum posterior
Routines
mcmc_multi::runRun all of the chains
result = mcmc_multi::getPeak( [value=value])Return the chain link which have the maximum target distribution value
result = mcmc_multi::getNSuccess( [nfail=nfail])This function returns the numbers of accepted and, optionally, rejected trial links for each chain during the run
result = mcmc_multi::init(seed, nstep, data [, thin=thin])Initialize the mcmc_multi object
mcmc_multi::cleanupFree memory when we are finished
mcmc_multi__definedefine the mcmc_multi data structure
Routine details
topmcmc_multi::run
statistics
mcmc_multi::run
Run all of the chains
mcmc_multi_common: Holds the seed variable for calls to randomu
topmcmc_multi::getPeak
result = mcmc_multi::getPeak( [value=value])
Return the chain link which have the maximum target distribution value
Keywords
- value in optional
The value of the maximum target distribution
topmcmc_multi::getNSuccess
result = mcmc_multi::getNSuccess( [nfail=nfail])
This function returns the numbers of accepted and, optionally, rejected trial links for each chain during the run
Return value
The number of accepted links in each chain during the run. An array.
Keywords
- nfail in optional
A named variable to hold the number of rejected links for each chain during the run. An array
topmcmc_multi::init
statistics INPTUS: seed: An array of starting seed links, one for each chain nstep: The number of desired links for each chain data: An array of any relevant data, one for each chain
result = mcmc_multi::init(seed, nstep, data [, thin=thin])
Initialize the mcmc_multi object
Parameters
- seed
- nstep
- data
Keywords
- thin in optional
If set to a non-negative integer, save only every THINth links in the chain. Helpful for saving space with long chains
File attributes
| Modifcation date: | Tue Oct 12 15:38:51 2010 |
| Lines: | 223 |
![[attach.png]](idldoc-resources/attach.png)