DREAM Example 1: sample from a custom defined probability distribution.
#endif
srand((int) time(nullptr));
cout << "\n" << "---------------------------------------------------------------------------------------------------\n";
cout << std::scientific; cout.precision(5);
cout << "EXAMPLE 1: make your own probability distribution\n"
<< " sample from the Gaussian distribution: f(x) = exp(-x^2)\n"
<< " ignoring scaling constants, using 3000 samples\n"
<< " See the comments in example_dream_01.cpp\n\n";
int num_dimensions = 1, num_chains = 30;
int num_burnup_iterations = 200;
int num_collect_iterations = 1000;
state.setState(initial_chains);
[&](const std::vector<double> &candidates, std::vector<double> &values)->
void{
std::transform(candidates.begin(), candidates.end(), values.begin(),
[&](double x)->double{ return std::exp(-x*x); });
},
[&](const std::vector<double>&)->bool{ return true; },
state,
);
std::vector<double> mean, variance;
state.getHistoryMeanVariance(mean, variance);
cout << "Using regular form:\n"
<< " mean:" << setw(13) << std::fixed << mean[0]
<< " error:" << setw(12) << std::scientific << std::abs(mean[0]) << "\n"
<< " variance:" << setw(13) << std::fixed << variance[0]
<< " error:" << setw(12) << std::scientific << std::abs(variance[0] - 0.5) << "\n";
state.setState(initial_chains);
(num_burnup_iterations, num_collect_iterations,
[&](const std::vector<double> &candidates, std::vector<double> &values)->
void{
std::transform(candidates.begin(), candidates.end(), values.begin(),
[&](double x)->double{ return -x*x; });
},
[&](const std::vector<double>&)->bool{ return true; },
state,
);
state.getHistoryMeanVariance(mean, variance);
cout << "Using logarithm form:\n"
<< " mean:" << setw(13) << std::fixed << mean[0]
<< " error:" << setw(12) << std::scientific << std::abs(mean[0]) << "\n"
<< " variance:" << setw(13) << std::fixed << variance[0]
<< " error:" << setw(12) << std::scientific << std::abs(variance[0] - 0.5) << "\n";
cout << "\n" << "---------------------------------------------------------------------------------------------------\n";
#ifndef __TASMANIAN_DOXYGEN_SKIP