diff options
author | Jaron Kent-Dobias <jaron@kent-dobias.com> | 2021-01-15 16:29:59 +0100 |
---|---|---|
committer | Jaron Kent-Dobias <jaron@kent-dobias.com> | 2021-01-15 16:29:59 +0100 |
commit | 199b129c08242be6a2726aae3c9918ca2f2484f7 (patch) | |
tree | 1c80eb9ebac19f3d861beda350542d9ac1ed7b83 /dynamics.hpp | |
parent | 136fcddcd38d0b8f3b40faf7c1cb7365d9b2a753 (diff) | |
download | code-199b129c08242be6a2726aae3c9918ca2f2484f7.tar.gz code-199b129c08242be6a2726aae3c9918ca2f2484f7.tar.bz2 code-199b129c08242be6a2726aae3c9918ca2f2484f7.zip |
More changes.
Diffstat (limited to 'dynamics.hpp')
-rw-r--r-- | dynamics.hpp | 18 |
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}; } |