summaryrefslogtreecommitdiff
path: root/hadamard_pt.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'hadamard_pt.hpp')
-rw-r--r--hadamard_pt.hpp25
1 files changed, 14 insertions, 11 deletions
diff --git a/hadamard_pt.hpp b/hadamard_pt.hpp
index f07c9ec..593f1f2 100644
--- a/hadamard_pt.hpp
+++ b/hadamard_pt.hpp
@@ -1,8 +1,8 @@
#pragma once
#include "hadamard_mcmc.hpp"
-#include <list>
#include <execution>
+#include <list>
void swap(MCMC& s1, MCMC& s2) {
std::swap(s1.M, s2.M);
@@ -29,7 +29,8 @@ public:
ParallelMeasurement& B;
std::vector<Measurement*>& As;
- PT(double β₀, double β₁, unsigned N, unsigned n, ParallelMeasurement& B, std::vector<Measurement*>& As)
+ PT(double β₀, double β₁, unsigned N, unsigned n, ParallelMeasurement& B,
+ std::vector<Measurement*>& As)
: B(B), As(As) {
Ms.reserve(N);
for (unsigned i = 0; i < N; i++) {
@@ -38,9 +39,7 @@ public:
}
}
- double T(unsigned i) {
- return 1 / Ms[Ms.size() - i - 1].β;
- }
+ double T(unsigned i) { return 1 / Ms[Ms.size() - i - 1].β; }
bool step(unsigned i, unsigned j, bool dry = false) {
double Δβ = Ms[i].β - Ms[j].β;
@@ -69,7 +68,8 @@ public:
std::vector<unsigned> nd(Ms.size(), 0);
for (unsigned i = 0; i < n; i++) {
- std::for_each(std::execution::par_unseq, Ms.begin(), Ms.end(), [m, ε](MCMC& M) {M.tune(m, ε);});
+ std::for_each(std::execution::par_unseq, Ms.begin(), Ms.end(),
+ [m, ε](MCMC& M) { M.tune(m, ε); });
for (unsigned k = 0; k < m * Ms.size(); k++) {
unsigned j = rng.uniform((unsigned)0, (unsigned)(Ms.size() - 2));
@@ -104,14 +104,16 @@ public:
for (signed i = 0; i < f_keep.size() - 1; i++) {
for (unsigned j = f_keep[i]; j < f_keep[i + 1]; j++) {
- f[j] = f[f_keep[i]] + (f[f_keep[i + 1]] - f[f_keep[i]]) / (Ms[f_keep[i+1]].β - Ms[f_keep[i]].β) * (Ms[j].β - Ms[f_keep[i]].β);
+ f[j] = f[f_keep[i]] + (f[f_keep[i + 1]] - f[f_keep[i]]) /
+ (Ms[f_keep[i + 1]].β - Ms[f_keep[i]].β) *
+ (Ms[j].β - Ms[f_keep[i]].β);
}
}
std::vector<double> η(Ms.size() - 1);
for (unsigned i = 0; i < Ms.size() - 1; i++) {
- η[η.size() - i - 1] = sqrt((f[i + 1] - f[i])) / (1 / Ms[i].β - 1 / Ms[i+1].β);
+ η[η.size() - i - 1] = sqrt((f[i + 1] - f[i])) / (1 / Ms[i].β - 1 / Ms[i + 1].β);
}
double C = 0;
@@ -135,11 +137,11 @@ public:
double err = 0;
for (unsigned i = 0; i < T1.size(); i++) {
- err += fabs(T1[i] - 1/ Ms[Ms.size() - i - 2].β);
+ err += fabs(T1[i] - 1 / Ms[Ms.size() - i - 2].β);
Ms[Ms.size() - i - 2].β = 1 / T1[i];
}
- if (err / T1.size() * Ms.size() / (1/Ms.front().β - 1/Ms.back().β) < ε2) {
+ if (err / T1.size() * Ms.size() / (1 / Ms.front().β - 1 / Ms.back().β) < ε2) {
return f;
}
@@ -149,7 +151,8 @@ public:
void run(unsigned n, unsigned m, bool dry = false) {
for (unsigned i = 0; i < n; i++) {
- std::for_each(std::execution::par_unseq, Ms.begin(), Ms.end(), [m, dry](MCMC& M) {M.run(m, dry);});
+ std::for_each(std::execution::par_unseq, Ms.begin(), Ms.end(),
+ [m, dry](MCMC& M) { M.run(m, dry); });
for (unsigned j = 0; j < Ms.size(); j++) {
unsigned k = rng.uniform((unsigned)0, (unsigned)(Ms.size() - 2));
this->step(k, k + 1, dry);