Class mcmc_para_table (o2scl)¶
-
template<class
func_t
, classfill_t
, classdata_t
, classvec_t
= ubvector>
classo2scl
::
mcmc_para_table
: public o2scl::mcmc_para_base<func_t, std::function<int(const ubvector&, double, size_t, int, bool, data_t&)>, data_t, ubvector>¶ A generic MCMC simulation class writing data to a o2scl::table_units object.
This class performs a MCMC simulation and stores the results in a o2scl::table_units object. The user must specify the column names and units in set_names_units() before mcmc() is called.
The function add_line is the measurement function of type
measure_t
in the parent. The overloaded function mcmc() in this class works a bit differently in that it takes a function object (typefill_t
) of the formwhich should store any auxillary values stored in the data object toint fill_func(const vec_t &pars, double log_weight, std::vector<double> &line, data_t &dat);
line
, in order to be added to the table.The output table will contain the parameters, the logarithm of the function (called “log_wgt”) and a multiplying factor called “mult”. This “fill” function is called only when a step is accepted and the multiplier for that row is set to 1. If a future step is rejected, then the multiplier is increased by one, rather than adding the same row to the table again.
There is some output which occurs in addition to the output from o2scl::mcmc_para_base depending on the value of o2scl::mcmc_para_base::verbose . If there is a misalignment between the number of columns in the table and the number of data points in any line, then some debugging information is sent to
cout
. When verbose is 2 or larger, … (FIXME)- Idea for Future:
Verbose output may need improvement
- Idea for Future:
Use reorder_table() and possibly reblock() to create a full post-processing function.
- Note
This class is experimental.
Settings
-
bool
table_sequence
¶ If true, ensure sure walkers and OpenMP threads are written to the table with equal spacing between rows (default true)
-
size_t
file_update_iters
¶ Iterations between file updates (default 0 for no file updates)
-
double
file_update_time
¶ Time between file updates (default 0.0 for no file updates)
-
size_t
table_prealloc
¶ Number of rows to allocate for the table before the MCMC run.
-
int
table_io_chunk
¶ The number of tables to combine before I/O (default 1)
-
bool
store_rejects
¶ If true, store MCMC rejections in the table.
-
void
write_files
(bool sync_write = false)¶ Write MCMC tables to files.
-
mcmc_para_table
()¶
Basic usage
-
void
set_names_units
(std::vector<std::string> names, std::vector<std::string> units)¶ Set the table names and units.
-
void
initial_points_file_last
(std::string fname, size_t n_param_loc, size_t offset = 5)¶ Read initial points from the last points recorded in file named
fname
.The values of o2scl::mcmc_para_base::n_walk and o2scl::mcmc_para_base::n_threads, must be set to their correct values before calling this function. This function requires that a table is present in
fname
which stores parameters in a block of columns and has columns namedmult
,thread
,walker
, andlog_wgt
. This function does not double check that the columns in the file associated with the parameters have the correct names.
-
void
initial_points_file_dist
(std::string fname, size_t n_param_loc, size_t offset = 5)¶ Read initial points from file named
fname
, distributing across the chain if necessary.The values of o2scl::mcmc_para_base::n_walk and o2scl::mcmc_para_base::n_threads, must be set to their correct values before calling this function. This function requires that a table is present in
fname
which stores parameters in a block of columns. This function does not double check that the columns in the file associated with the parameters have the correct names.
-
void
initial_points_file_best
(std::string fname, size_t n_param_loc, double thresh = 1.0e-6, size_t offset = 5)¶ Read initial points from the best points recorded in file named
fname
.The values of o2scl::mcmc_para_base::n_walk and o2scl::mcmc_para_base::n_threads, must be set to their correct values before calling this function. This function requires that a table is present in
fname
which stores parameters in a block of columns and contains a separate column namedlog_wgt
. This function does not double check that the columns in the file associated with the parameters have the correct names.
-
int
mcmc_fill
(size_t n_params_local, vec_t &low, vec_t &high, std::vector<func_t> &func, std::vector<fill_t> &fill)¶ Perform an MCMC simulation.
Perform an MCMC simulation over
n_params
parameters starting at initial pointinit
, limiting the parameters to be betweenlow
andhigh
, usingfunc
as the objective function and calling the measurement functionmeas
at each MC point.
-
std::shared_ptr<o2scl::table_units<>>
get_table
()¶ Get the output table.
Set the output table.
-
void
get_chain_sizes
(std::vector<size_t> &chain_sizes)¶ Determine the chain sizes.
- Idea for Future:
This algorithm could be improved by started from the end of the table and going backwards instead of starting from the front of the table and going forwards.
-
void
read_prev_results
(o2scl_hdf::hdf_file &hf, size_t n_param_loc, std::string name = "")¶ Read previous results (number of threads and walkers must be set first)
- Note
By default, this tries to obtain the initial points for the next call to mcmc() by the previously accepted point in the table.
- Note
This function requires a table correctly stored with the right column order
-
void
critical_extra
(size_t i_thread)¶ Additional code to execute inside the OpenMP critical section.
-
int
add_line
(const vec_t &pars, double log_weight, size_t walker_ix, int func_ret, bool mcmc_accept, data_t &dat, size_t i_thread, fill_t &fill)¶ A measurement function which adds the point to the table.
-
void
mcmc_cleanup
()¶ Perform cleanup after an MCMC simulation.
-
void
ac_coeffs
(size_t icol, std::vector<double> &ac_coeff_avg, int loc_verbose = 0)¶ Compute autocorrelation coefficient for column with index
icol
averaging over all walkers and all threads.
-
void
reorder_table
()¶ Reorder the table by thread and walker index.
-
void
reblock
(size_t n_blocks)¶ Reaverage the data into blocks of a fixed size in order to avoid autocorrelations.
This function is useful to remove autocorrelations to the table so long as the autocorrelation length is shorter than the block size. This function does not compute the autocorrelation length to check that this is the case.
- Note
The number of blocks
n_blocks
must be larger than the current table size. This function expects to find a column named “mult” which contains the multiplicity of each column, as is the case after a call to mcmc_para_base::mcmc().
Protected Types
-
typedef std::function<int(const vec_t&, double, size_t, int, bool, data_t&)>
internal_measure_t
¶ Measurement functor type for the parent.
-
typedef mcmc_para_base<func_t, internal_measure_t, data_t, vec_t>
parent_t
¶ Type of parent class.
Protected Functions
-
int
mcmc_init
()¶ MCMC initialization function.
This function sets the column names and units.
Protected Attributes
-
std::vector<std::string>
col_names
¶ Column names.
-
std::vector<std::string>
col_units
¶ Column units.
-
size_t
n_params
¶ Number of parameters.
-
std::shared_ptr<o2scl::table_units<>>
table
¶ Main data table for Markov chain.
-
std::vector<int>
walker_accept_rows
¶ For each walker, record the last row in the table which corresponds to an accept.
-
std::vector<int>
walker_reject_rows
¶ For each walker, record the last row in the table which corresponds to an reject.
-
size_t
last_write_iters
¶ Total number of MCMC acceptances over all threads at last file write() (default 0)
-
double
last_write_time
¶ Time at last file write() (default 0.0)
-
bool
prev_read
¶ If true, previous results have been read.
This is set to
true
by read_prev_results() and set back tofalse
after mcmc_init() is called.