summaryrefslogtreecommitdiff
path: root/dynamics.hpp
diff options
context:
space:
mode:
authorJaron Kent-Dobias <jaron@kent-dobias.com>2021-01-15 16:29:59 +0100
committerJaron Kent-Dobias <jaron@kent-dobias.com>2021-01-15 16:29:59 +0100
commit199b129c08242be6a2726aae3c9918ca2f2484f7 (patch)
tree1c80eb9ebac19f3d861beda350542d9ac1ed7b83 /dynamics.hpp
parent136fcddcd38d0b8f3b40faf7c1cb7365d9b2a753 (diff)
downloadcode-199b129c08242be6a2726aae3c9918ca2f2484f7.tar.gz
code-199b129c08242be6a2726aae3c9918ca2f2484f7.tar.bz2
code-199b129c08242be6a2726aae3c9918ca2f2484f7.zip
More changes.
Diffstat (limited to 'dynamics.hpp')
-rw-r--r--dynamics.hpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/dynamics.hpp b/dynamics.hpp
index 85eef71..b373659 100644
--- a/dynamics.hpp
+++ b/dynamics.hpp
@@ -92,26 +92,26 @@ Vector<Scalar> randomVector(unsigned N, Distribution d, Generator& r) {
}
template <class Scalar, int p, class Distribution, class Generator>
-std::tuple<double, Vector<Scalar>> langevin(const Tensor<Scalar, p>& J, const Vector<Scalar>& z0, double T, double γ, unsigned N, Distribution d, Generator& r) {
+std::tuple<double, Vector<Scalar>> metropolis(const Tensor<Scalar, p>& J, const Vector<Scalar>& z0,
+ std::function<double(const Tensor<Scalar, p>&, const Vector<Scalar>&)>& energy,
+ double T, double γ, unsigned N, Distribution d, Generator& r) {
Vector<Scalar> z = z0;
- double W;
- std::tie(W, std::ignore) = WdW(J, z);
+ double E = energy(J, z);
std::uniform_real_distribution<double> D(0, 1);
for (unsigned i = 0; i < N; i++) {
- Vector<Scalar> zNewTmp = z + randomVector<Scalar>(z.size(), d, r);
+ Vector<Scalar> zNewTmp = z + γ * randomVector<Scalar>(z.size(), d, r);
Vector<Scalar> zNew = normalize(zNewTmp);
- double WNew;
- std::tie(WNew, std::ignore) = WdW(J, zNew);
+ double ENew = energy(J, zNew);
- if (exp((W - WNew) / T) > D(r)) {
+ if (E - ENew > T * log(D(r))) {
z = zNew;
- W = WNew;
+ E = ENew;
}
}
- return {W, z};
+ return {E, z};
}