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))
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))
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)
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)
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)