示例#1
0
 def test_mf_hamiltonian(self):
     h = np.random.normal()
     j = np.random.normal()
     j_matrix = [[0, j], [j, 0]]
     h_vector = [h, h]
     full_model = IsingModel(2)
     mf_model = IsingModel(2)
     full_model.import_ising01(h_vector, j_matrix)
     mf_model.import_uniform01(h, j)
     state = np.random.choice([True, False], size=2)
     self.assertAlmostEqual(full_model.hamiltonian(state),
                            mf_model.hamiltonian(state))
示例#2
0
    def test_diff_mf(self):
        h = np.random.normal()
        j = np.random.normal()
        model = IsingModel(2)
        model.import_uniform01(h, j)

        spins = np.random.choice([True, False], size=2)
        spin = np.random.choice([0, 1])
        spins[spin] = True
        pos_energy = model.hamiltonian(spins)
        spins[spin] = False
        neg_energy = model.hamiltonian(spins)
        p = neg_energy - pos_energy

        self.assertAlmostEqual(p, model.energydiff(spins, spin))
示例#3
0
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)
示例#4
0
    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)
示例#5
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)