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< ubvector > | initial_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_gsl > | rg |
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. | |
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 with the denominator specified in step_fac.
The function type is a template type, func_t
, which should be of the form
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 , the limits of the distribution for
.
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.
Definition at line 107 of file mcmc_para.h.
|
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.
|
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.
|
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.
|
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.
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.
size_t o2scl::mcmc_para_base< func_t, measure_t, data_t, vec_t >::n_warm_up |
warm_up
, which is a boolean local variable in some functions not an int. Definition at line 254 of file mcmc_para.h.
|
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.
Documentation generated with Doxygen. Provided under the
GNU Free Documentation License (see License Information).