def simulate(size, ansatz_name, minimizer, repeats, hamiltonian_idx, max_meas, samples, h, eig): H, qc, ansatz_, initial_params = \ core.interface.create_and_convert(ansatz_name, h) if minimizer == 'nelder-mead': vqe = vqe_nelder_mead(samples=samples, H=H, fatol=0, xatol=0) tol_para = 1e-3 max_same_para = 3 callback = cb.restart(max_same_para, tol_para) elif minimizer == 'bayes': n_calls = int(round(max_meas/samples)) vqe = vqe_bayes(n_calls=n_calls) def callback(*args, **kwargs): pass if ansatz_name == 'multi_particle': initial_params = [(-1.0, 1.0)]*(size - 1) elif ansatz_name == 'one_particle_ucc': initial_params = [(-3.0, 3.0)] * (size - 1) else: raise RuntimeError("Don't know that ansatz.") else: raise RuntimeError('Bad minimizer') result = vqe_eig.smallest(H, qc, initial_params, vqe, ansatz_, samples, callback=callback, max_meas=max_meas) result.correct = eig return result
def simulate(ansatz_name, size, hamiltonian_idx, samples, n_calls, repeats, h, eig): intervall = [(-3.0, 3.0)]*(size-1) H, qc, ansatz_,_ = core.interface.create_and_convert(ansatz_name, h) vqe = vqe_bayes(n_calls=n_calls) result = vqe_eig.smallest(H, qc, intervall, vqe, ansatz_, samples, return_all=True) result.correct = eig return result
def simulate(ansatz_name, size, hamiltonian_idx, samples, n_calls, repeats, h, eig): # TODO: create VQE-object here! (not multiprocess safe) # TODO: run e.g. smallest here and return result. interval = [(-1.0, 1.0)] * (size - 1) H, qc, ansatz_, _ = core.interface.create_and_convert(ansatz_name, h) vqe = vqe_bayes(n_calls=n_calls) result = vqe_eig.smallest(H, qc, interval, vqe, ansatz_, samples) result.correct = eig return result
def simulate(size, hamiltonian_idx, V, max_meas, samples, h, eig): H, qc, ansatz_, initial_params = \ core.interface.create_and_convert('multi_particle', h) vqe = vqe_nelder_mead(samples=samples, H=H, fatol=0, xatol=0) tol_para = 1e-3 max_same_para = 3 callback = cb.restart(max_same_para, tol_para) result = vqe_eig.smallest(H, qc, initial_params, vqe, ansatz_, samples, callback=callback, max_meas=max_meas) result.correct = eig return result
def simulate(ansatz_name, size, hamiltonian_idx, samples, repeats, h, eig): # TODO: create VQE-object here! (not multiprocess safe) # TODO: run e.g. smallest here and return result. H, qc, ansatz_, initial_params = core.interface.create_and_convert( ansatz_name, h) vqe = vqe_nelder_mead(samples=samples, H=H) max_fun_evals = 200 result = vqe_eig.smallest(H, qc, initial_params, vqe, ansatz_, samples, max_meas=samples * max_fun_evals) result.correct = eig return result
def simulate(size, hamiltonian_idx, V, max_meas, samples, h, eig): H, qc, ansatz_, initial_params = \ core.interface.create_and_convert('multi_particle', h) n_calls = int(round(max_meas / samples)) vqe = vqe_bayes(n_calls=n_calls) def callback(*args, **kwargs): pass initial_params = [(-1.0, 1.0)] * (size - 1) result = vqe_eig.smallest(H, qc, initial_params, vqe, ansatz_, samples, callback=callback) result.correct = eig return result
from pyquil import get_qc from core import vqe_eig from core import ansatz from core import callback as cb import numpy as np from core import matrix_to_op samples = 5000 sweep_params = 30 qc = get_qc('3q-qvm') j, V = 1, 1 h = lipkin_quasi_spin.hamiltonian(j, V)[0] # plot = liveplot.Liveplot() # vqe_analysis.sweep_parameters(h, qc, new_version=True, samples=None, # num_para=sweep_params, start=-3, stop=3, callback= # plot.plotline, plot=False) energies = vqe_eig.smallest(matrix_to_op.multi_particle(h), qc, init_params.ones(h.shape[0]), ansatz_=ansatz.multi_particle(h.shape[0]), samples=samples, fatol=1e-1 * 16 / np.sqrt(samples), return_all_data=True, callback=cb.merge_callbacks( cb.scatter(), cb.stop_if_stuck_x_times(2))) print(energies)