コード例 #1
0
ファイル: test.py プロジェクト: martinosorb/ising_sampling
    def test_rbm_fim(self):
        j = np.random.normal(0, 1)
        visbias = np.random.normal()
        hidbias = np.random.normal()

        model = IsingModel(2)
        model.import_rbm01(1, 1, [visbias], [hidbias], [[j]])

        z = (np.exp(visbias) + np.exp(hidbias) +
             np.exp(visbias + hidbias + j) + 1)

        def f(x):
            return x / z * (1 - x / z)
        exp0 = np.exp(visbias + hidbias + j)
        exp1 = np.exp(visbias) + exp0
        exp2 = np.exp(hidbias) + exp0

        varvis = f(exp1)
        varhid = f(exp2)
        varprod = f(exp0)
        cov_vishid = exp0 / z - exp1 * exp2 / z ** 2
        cov_visprod = exp0 / z * (1 - exp1 / z)
        cov_hidprod = exp0 / z * (1 - exp2 / z)

        sample = model.sample(20000)
        fim = model.fisher_information(sample, model.fimfunction_rbm)

        self.assertAlmostEqual(fim[0, 0], varvis, places=2)
        self.assertAlmostEqual(fim[1, 1], varhid, places=2)
        self.assertAlmostEqual(fim[2, 2], varprod, places=2)
        self.assertAlmostEqual(fim[1, 0], cov_vishid, places=2)
        self.assertAlmostEqual(fim[2, 0], cov_visprod, places=2)
        self.assertAlmostEqual(fim[1, 2], cov_hidprod, places=2)
コード例 #2
0
ファイル: test.py プロジェクト: martinosorb/ising_sampling
    def test_physical(self):
        n = 35
        h = -0.5
        j = 1 / n
        model = IsingModel(n)

        # disordered phase, should be .5 on average
        beta = 1
        model.import_uniform01(beta * h, beta * j)
        sample = from_shaped_iter(model.sample(5000), bool, [5000, n])[200:]
        self.assertAlmostEqual(np.mean(sample), .5, places=1)

        # ordered phase, sol can be 0 or 1
        beta = 16
        model.import_uniform01(beta * h, beta * j)
        sample = from_shaped_iter(model.sample(2000), bool, [2000, n])[200:]
        self.assertAlmostEqual(abs(2 * np.mean(sample) - 1), 1, places=2)
コード例 #3
0
ファイル: test.py プロジェクト: martinosorb/ising_sampling
 def test_probabilities_onlyfields(self):
     h = [np.random.normal()]
     j_matrix = [[0]]
     model = IsingModel(1)
     model.import_ising01(h, j_matrix)
     res = from_shaped_iter(model.sample(30000), bool, (30000, 1))
     p1 = 1 / (1 + np.exp(-h[0]))
     obs_prob = np.mean(res, axis=0)[0]
     self.assertAlmostEqual(p1, obs_prob, places=2)
コード例 #4
0
ファイル: test.py プロジェクト: martinosorb/ising_sampling
 def test_probabilities_onlyinter(self):
     h = [0, 0]
     j = np.random.normal()
     j_matrix = [[0, j], [j, 0]]
     model = IsingModel(2)
     model.import_ising01(h, j_matrix)
     res = from_shaped_iter(model.sample(30000), bool, (30000, 2))
     prod = res[:, 0] * res[:, 1]
     p1 = np.mean(prod)
     self.assertAlmostEqual(p1, 1 / (3 * np.exp(-j) + 1), places=2)
コード例 #5
0
ファイル: test.py プロジェクト: martinosorb/ising_sampling
 def test_input_data(self):
     with self.assertRaises(ValueError):
         model = IsingModel(3)
         model.import_ising01([0, 0, 0], [[0, 0], [0, 0]])
     with self.assertRaises(ValueError):
         model = IsingModel(2)
         model.import_ising01([0, 0, 0], [[0, 0], [0, 0]])
     with self.assertRaises(ValueError):
         model = IsingModel(0)
     with self.assertRaises(ValueError):
         model = IsingModel(2)
         list(model.sample(-1))
コード例 #6
0
ファイル: main.py プロジェクト: martinosorb/ising_sampling
def sample_e_with_beta(beta):
    model = IsingModel(numspin)
    model.import_uniform01(beta * h, beta * j)
    sampled_states = model.sample(n)

    states = np.empty([n, numspin], dtype=bool)
    energies = np.empty(n)

    for i, state in enumerate(sampled_states):
        states[i] = state
        energies[i] = model.hamiltonian(state)

    np.save(resdir + "states_" + "beta" + str(beta) + "_n" +
            str(numspin) + ".npy", states)
    np.save(resdir + "energies_" + "beta" + str(beta) + "_n" +
            str(numspin) + ".npy", energies)
コード例 #7
0
ファイル: test.py プロジェクト: martinosorb/ising_sampling
 def test_shape_null(self):
     model = IsingModel(1)
     model.import_ising01([0], [[0]])
     res = from_shaped_iter(model.sample(1), bool, (1, 1))
     self.assertEqual(res.shape[0], 1)
     self.assertEqual(res.shape[1], 1)
コード例 #8
0
ファイル: test.py プロジェクト: martinosorb/ising_sampling
 def test_res_shapes(self):
     model = IsingModel(2)
     model.import_ising01([0, 0], [[0, 0], [0, 0]])
     res = from_shaped_iter(model.sample(3), bool, (3, 2))
     self.assertEqual(len(res[0]), 2)
     self.assertEqual(len(res[:, 0]), 3)
コード例 #9
0
import numpy as np
from time import time


# from pycallgraph import PyCallGraph
# from pycallgraph.output import GraphvizOutput

# with PyCallGraph(output=GraphvizOutput()):
numspin = 30
n = 1000

np.random.seed(56426481)
h = np.random.normal(size=numspin)
j = np.random.normal(size=(numspin, numspin))
j += j.T
j[np.diag_indices_from(j)] = np.zeros(numspin)
# np.random.seed()

ntrials = 20

t = time()
for _ in range(10):
    model = IsingModel(numspin)
    model.import_ising01(h, j)

    for x in model.sample(n):
        pass
t = time() - t
print('Time taken, ' + str(ntrials) + ' trials:')
print(str(t) + ' seconds.')
コード例 #10
0
from time import time

numspin = 300
n = 100
seed = np.random.choice(1000)

j0 = np.random.random()
h0 = np.random.normal()

j = np.ones((numspin, numspin)) * j0
h = np.ones(numspin) * h0
j[np.diag_indices_from(j)] = np.zeros(numspin)

model_full = IsingModel(numspin)
model_full.import_ising01(h, j)
np.random.seed(seed)

t = time()
for x in model_full.sample(n):
    pass
print(time() - t)

model_mf = IsingModel(numspin)
model_mf.import_uniform01(h0, j0)
np.random.seed(seed)

t = time()
for x in model_mf.sample(n):
    pass
print(time() - t)