Exemplo n.º 1
0
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
Exemplo n.º 4
0
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
Exemplo n.º 6
0
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)