Public Attributes | Static Public Attributes | Protected Attributes | List of all members
o2scl::mcmc_para_base< func_t, measure_t, data_t, vec_t > Class Template Reference

A generic MCMC simulation class. More...

#include <mcmc_para.h>

Public Member Functions

Basic usage
virtual int mcmc (size_t nparams, vec_t &low, vec_t &high, std::vector< func_t > &func, std::vector< measure_t > &meas)
 Perform an MCMC simulation. More...
 
Proposal distribution
virtual void set_proposal (o2scl::prob_cond_mdim< vec_t > &p)
 Set the proposal distribution.
 
virtual void unset_proposal ()
 Go back to random-walk Metropolis with a uniform distribution.
 

Public Attributes

size_t max_iters
 If non-zero, the maximum number of MCMC iterations (default 0)
 
std::string prefix
 Prefix for output filenames.
 
size_t n_threads
 Number of OpenMP threads.
 
std::vector< ubvectorinitial_points
 Initial points in parameter space. More...
 
Output quantities
std::vector< size_t > n_accept
 The number of Metropolis steps which were accepted in each thread (summed over all walkers)
 
std::vector< size_t > n_reject
 The number of Metropolis steps which were rejected in each thread (summed over all walkers)
 
Settings
bool aff_inv
 If true, use affine-invariant Monte Carlo.
 
double step_fac
 Stepsize factor (default 10.0)
 
size_t n_warm_up
 Number of warm up steps (successful steps not iterations) (default 0) More...
 
int user_seed
 If non-zero, use as the seed for the random number generator (default 0)
 
int verbose
 Output control (default 0)
 
size_t max_bad_steps
 Maximum number of failed steps when generating initial points with affine-invariant sampling (default 1000)
 
size_t n_walk
 Number of walkers for affine-invariant MC or 1 otherwise (default 1)
 
bool err_nonconv
 If true, call the error handler if msolve() or msolve_de() does not converge (default true)
 
bool always_accept
 If true, accept all steps.
 
double ai_initial_step
 Initial step fraction for affine-invariance sampling walkers (default 0.1)
 

Static Public Attributes

static const int mcmc_done =-10
 Integer to indicate completion.
 
static const int mcmc_skip =-20
 Integer to indicate rejection.
 

Protected Member Functions

Interface customization
virtual int mcmc_init ()
 Initializations before the MCMC.
 
virtual void mcmc_cleanup ()
 Cleanup after the MCMC.
 
virtual void best_point (vec_t &best, double w_best, data_t &dat)
 Function to run for the best point.
 

Protected Attributes

double max_time
 Time in seconds (default is 0)
 
std::ofstream scr_out
 The screen output file.
 
std::vector< rng_gslrg
 Random number generators.
 
o2scl::prob_cond_mdim< vec_t > * prop_dist
 Proposal distribution.
 
bool pd_mode
 If true, then use the user-specified proposal distribution.
 
bool warm_up
 If true, we are in the warm up phase.
 
std::vector< vec_t > current
 Current points in parameter space for each walker and each OpenMP thread. More...
 
std::vector< data_t > data_arr
 Data array. More...
 
std::vector< bool > switch_arr
 Data switch array for each walker and each OpenMP thread. More...
 
std::vector< std::vector< size_t > > ret_value_counts
 Return value counters, one vector for each OpenMP thread.
 
std::vector< size_t > curr_walker
 Index of the current walker. More...
 
MPI properties
int mpi_rank
 The MPI processor rank.
 
int mpi_nprocs
 The MPI number of processors.
 
double mpi_start_time
 The MPI starting time.
 

Detailed Description

template<class func_t, class measure_t, class data_t, class vec_t = ubvector>
class o2scl::mcmc_para_base< func_t, measure_t, data_t, vec_t >

This class performs a Markov chain Monte Carlo simulation of a user-specified function using OpenMP and/or MPI. Either the Metropolis-Hastings algorithm with a user-specified proposal distribution or the affine-invariant sampling method of Goodman and Weare can be used.

By default, the Metropolis-Hastings algorithm is executed with a simple walk, with steps in each dimension of size $ (\mathrm{high} - \mathrm{low})/\mathrm{step\_fac} $ with the denominator specified in step_fac.

The function type is a template type, func_t, which should be of the form

int f(size_t num_of_parameters, const vec_t &parameters,
double &log_pdf, data_t &dat)

which computes log_pdf, the natural logarithm of the function value, for any point in parameter space (any point between low and high ).

If the function being simulated returns mcmc_skip then the point is automatically rejected. After each acceptance or rejection, a user-specified "measurement" function (of type measure_t ) is called, which can be used to store the results. In order to stop the simulation, either this function or the probability distribution being simulated should return the value mcmc_done .

A generic proposal distribution can be specified in set_proposal(). To go back to the default random walk method, one can call the function unset_proposal().

If aff_inv is set to true and the number of walkers, n_walk is set to a number larger than 1, then affine-invariant sampling is used. For affine-invariant sampling, the variable step_fac represents the value of $ a $, the limits of the distribution for $ z $.

In order to store data at each point, the user can store this data in any object of type data_t . If affine-invariant sampling is used, then each chain has it's own data object. The class keeps twice as many copies of these data object as would otherwise be required, in order to avoid copying of data objects in the case that the steps are accepted or rejected.

Note
This class is experimental.

Definition at line 107 of file mcmc_para.h.

Member Function Documentation

◆ mcmc()

template<class func_t, class measure_t, class data_t, class vec_t = ubvector>
virtual int o2scl::mcmc_para_base< func_t, measure_t, data_t, vec_t >::mcmc ( size_t  nparams,
vec_t &  low,
vec_t &  high,
std::vector< func_t > &  func,
std::vector< measure_t > &  meas 
)
inlinevirtual

Perform an MCMC simulation over nparams parameters starting at initial point init, limiting the parameters to be between low and high, using func as the objective function and calling the measurement function meas at each MC point.

Definition at line 344 of file mcmc_para.h.

Member Data Documentation

◆ curr_walker

template<class func_t, class measure_t, class data_t, class vec_t = ubvector>
std::vector<size_t> o2scl::mcmc_para_base< func_t, measure_t, data_t, vec_t >::curr_walker
protected

This quantity has to be a vector because different threads may have different values for the current walker during the initialization phase for the affine sampling algorithm.

Definition at line 210 of file mcmc_para.h.

◆ current

template<class func_t, class measure_t, class data_t, class vec_t = ubvector>
std::vector<vec_t> o2scl::mcmc_para_base< func_t, measure_t, data_t, vec_t >::current
protected

This is an array of size n_threads times n_walk initial guesses, indexed by thread_index*n_walk+walker_index .

Definition at line 148 of file mcmc_para.h.

◆ data_arr

template<class func_t, class measure_t, class data_t, class vec_t = ubvector>
std::vector<data_t> o2scl::mcmc_para_base< func_t, measure_t, data_t, vec_t >::data_arr
protected

This is an array of size 2 times n_threads times n_walk . The two copies of data objects are indexed by i_copy*n_walk*n_threads+thread_index*n_walk+walker_index

Definition at line 157 of file mcmc_para.h.

◆ initial_points

template<class func_t, class measure_t, class data_t, class vec_t = ubvector>
std::vector<ubvector> o2scl::mcmc_para_base< func_t, measure_t, data_t, vec_t >::initial_points

To fully specify all of the initial points, this should be a vector of size n_walk times n_threads .

Definition at line 333 of file mcmc_para.h.

◆ n_warm_up

template<class func_t, class measure_t, class data_t, class vec_t = ubvector>
size_t o2scl::mcmc_para_base< func_t, measure_t, data_t, vec_t >::n_warm_up
Note
Not to be confused with warm_up, which is a boolean local variable in some functions not an int.

Definition at line 254 of file mcmc_para.h.

◆ switch_arr

template<class func_t, class measure_t, class data_t, class vec_t = ubvector>
std::vector<bool> o2scl::mcmc_para_base< func_t, measure_t, data_t, vec_t >::switch_arr
protected

This is an array of size n_threads times n_walk initial guesses, indexed by thread_index*n_walk+walker_index .

Definition at line 164 of file mcmc_para.h.


The documentation for this class was generated from the following file:

Documentation generated with Doxygen. Provided under the GNU Free Documentation License (see License Information).