from netket import legacy as nk # 1D Lattice g = nk.graph.Hypercube(length=20, n_dim=1, pbc=True) # Hilbert space of spins on the graph hi = nk.hilbert.Spin(s=1 / 2, N=g.n_nodes) # Ising spin hamiltonian ha = nk.operator.Ising(hilbert=hi, graph=g, h=1.0) # RBM Spin Machine # Paremeterizing phase and amplitude separately ma = nk.machine.RbmSpinPhase(alpha=1, hilbert=hi) ma.init_random_parameters(seed=1234, sigma=0.01) # Metropolis Local Sampling sa = nk.sampler.MetropolisLocal(machine=ma) # Optimizer op = nk.optimizer.Sgd(learning_rate=0.1) # Stochastic reconfiguration sr = nk.optimizer.SR(diag_shift=0.1) # ground-state optimization gs = nk.VMC(hamiltonian=ha, sampler=sa, optimizer=op, n_samples=1000, sr=sr) gs.run(n_iter=300, out="test")
# Hilbert space of spins on the graph # with total Sz equal to 0 hi = nk.hilbert.Spin(s=1 / 2, N=g.n_nodes, total_sz=0) # Heisenberg hamiltonian ha = nk.operator.Heisenberg(hilbert=hi) # Symmetric RBM Spin Machine ma = nk.machine.JastrowSymm(hilbert=hi, automorphisms=g, dtype=float) ma.init_random_parameters(seed=1234, sigma=0.01) # Metropolis Exchange Sampling # Notice that this sampler exchanges two neighboring sites # thus preservers the total magnetization sa = nk.sampler.MetropolisExchange(machine=ma) # Optimizer op = nk.optimizer.Sgd(ma, learning_rate=0.05) # Stochastic reconfiguration gs = nk.VMC( hamiltonian=ha, sampler=sa, optimizer=op, n_samples=1000, sr=nk.optimizer.SR(diag_shift=0.1, lsq_solver="QR"), ) gs.run(out="test", n_iter=300)
# Hilbert space of spins on the graph hi = nk.hilbert.Spin(s=1 / 2) ** L ha = nk.operator.Ising(hilbert=hi, graph=g, h=1.0) alpha = 1 ma = nk.machine.JaxRbm(hi, alpha, dtype=float) ma.init_random_parameters(seed=1232) # Jax Sampler sa = nk.sampler.MetropolisLocal(machine=ma, n_chains=32) # Using Sgd op = nk.optimizer.Sgd(ma, learning_rate=0.1) # Create the optimization driver gs = nk.VMC( hamiltonian=ha, sampler=sa, optimizer=op, n_samples=1000, sr=None, n_discard_per_chain=100, ) # The first iteration is slower because of start-up jit times gs.run(out="test", n_iter=2) gs.run(out="test", n_iter=300)
# Custom Hamiltonian operator ha = nk.operator.LocalOperator(hi) for mat, site in zip(mats, sites): ha += nk.operator.LocalOperator(hi, mat, site) # Restricted Boltzmann Machine ma = nk.machine.RbmSpin(hi, alpha=1, automorphisms=g) ma.init_random_parameters(seed=1234, sigma=0.01) # Exchange Sampler randomly exchange up to next-to-nearest neighbours sa = nk.sampler.MetropolisExchange(machine=ma, n_chains=16, d_max=2) # Optimizer opt = nk.optimizer.Sgd(ma, learning_rate=0.02) # Stochastic reconfiguration sr = nk.optimizer.SR(ma, diag_shift=0.1) # Variational Monte Carlo gs = nk.VMC( hamiltonian=op, sampler=sa, optimizer=opt, sr=sr, n_samples=4000, n_discard_per_chain=5, ) vmc.run(n_iter=300, out="test")
# Boson Hilbert Space hi = nk.hilbert.Fock(N=g.n_nodes, n_max=3, n_bosons=8) # Bose Hubbard Hamiltonian ha = nk.operator.BoseHubbard(hilbert=hi, graph=g, U=4.0) # RBM Machine with one-hot encoding, real parameters, and symmetries ma = nk.machine.RbmMultiVal(hilbert=hi, alpha=1, dtype=float, automorphisms=g) ma.init_random_parameters(seed=1234, sigma=0.01) # Sampler using Hamiltonian moves, thus preserving the total number of particles sa = nk.sampler.MetropolisHamiltonian(machine=ma, hamiltonian=ha, batch_size=16) # Stochastic gradient descent optimization op = nk.optimizer.Sgd(ma, 0.05) # Variational Monte Carlo sr = nk.optimizer.SR(ma, diag_shift=0.1) vmc = nk.VMC( hamiltonian=ha, sampler=sa, optimizer=op, n_samples=4000, n_discard_per_chain=0, sr=sr, ) vmc.run(n_iter=300, out="test")
# 1D Lattice g = nk.graph.Hypercube(length=20, n_dim=1, pbc=True) # Hilbert space of spins on the graph hi = nk.hilbert.Spin(s=1 / 2, N=g.n_nodes) # Ising spin hamiltonian ha = nk.operator.Ising(hilbert=hi, graph=g, h=1.0) # Jastrow Machine ma = nk.machine.Jastrow(hilbert=hi) ma.init_random_parameters(seed=1234, sigma=0.01) # Metropolis Local Sampling sa = nk.sampler.MetropolisLocal(machine=ma) # Optimizer op = nk.optimizer.Sgd(ma, learning_rate=0.1) # Stochastic reconfiguration gs = nk.VMC( hamiltonian=ha, sampler=sa, optimizer=op, n_samples=1000, sr=nk.optimizer.SR(ma, diag_shift=0.1), ) gs.run(n_iter=300, out="test")