summaryrefslogtreecommitdiff
path: root/lib/finite_states.h
blob: 08eff30715811281794c30621a3b522cd910af4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

#pragma once

#include <cmath>
#include <functional>
#include <array>

#define FINITE_STATES

// must have N_STATES, states[N_STATES], and state_to_ind defined before
// invoking header

std::array<std::array<std::array<double, N_STATES>, N_STATES>, N_STATES> J_probs;
std::array<std::array<double, N_STATES>, N_STATES> H_probs;

template <class X_t>
void initialize_probs(std::function <double(X_t, X_t)> J, std::function <double(X_t)> H, double T) {
  for (q_t i = 0; i < N_STATES; i++) {
    for (q_t j = 0; j < N_STATES; j++) {
      for (q_t k = 0; k < N_STATES; k++) {
        J_probs[i][j][k] = 1.0 - exp(-(J(states[i], states[k]) - J(states[j], states[k])) / T);
      }
    }
  }
  for (q_t i = 0; i < N_STATES; i++) {
    for (q_t j = 0; j < N_STATES; j++) {
      H_probs[i][j] = 1.0 - exp(-(H(states[i]) - H(states[j])) / T);
    }
  }
}