def test_scipy_optimizer():
    def test_cost_function(x, nshots):
        noise = 1 / np.sqrt(nshots) * np.random.randn()
        out = (np.cos(x[0]) * np.sin(x[1]) + noise, 1 / np.sqrt(nshots))
        return out

    x0 = [0, -1]
    res = scipy_optimizer(test_cost_function, x0, nshots=10000)
    print(res)
    assert np.allclose(res['fun'], -1, rtol=1.1)
    assert np.allclose(res['x'], [0, -np.pi / 2], rtol=1.5, atol=0.5)
def test_qaoa_on_WFSim():
    params = FourierParams.linear_ramp_from_hamiltonian(hamiltonian,
                                                        n_steps=10,
                                                        q=2)
    p0 = params.raw()
    sim = WavefunctionSimulator()
    cost_fun = QAOACostFunctionOnWFSim(hamiltonian=hamiltonian,
                                       params=params,
                                       sim=sim,
                                       return_standard_deviation=True,
                                       noisy=False)

    with local_qvm():
        out = scipy_optimizer(cost_fun, p0, epsilon=1e-3)
        print(out)
def test_parameter_infos():
    params = ExtendedParams.linear_ramp_from_hamiltonian(hamiltonian,
                                                         n_steps=2)
    print(params)
    p0 = params.raw()
    print(p0)
    sim = WavefunctionSimulator()
    cost_fun = QAOACostFunctionOnWFSim(hamiltonian=hamiltonian,
                                       params=params,
                                       sim=sim,
                                       scalar_cost_function=True,
                                       nshots=1,
                                       noisy=False)
    with local_qvm():
        out = scipy_optimizer(cost_fun, p0, epsilon=1e-3)
        print(out)
def test_vqe_on_WFSim():
    sim = WavefunctionSimulator()
    cost_fun = PrepareAndMeasureOnWFSim(
        prepare_ansatz=prepare_ansatz,
        make_memory_map=lambda p: {"params": p},
        hamiltonian=hamiltonian,
        sim=sim,
        return_standard_deviation=True,
        noisy=False)

    with local_qvm():
        out = scipy_optimizer(cost_fun, p0, epsilon=1e-3)
        print(out)
        wf = sim.wavefunction(prepare_ansatz, {"params": out['x']})
    assert np.allclose(np.abs(wf.amplitudes**2), [0, 0, 0, 1],
                       rtol=1.5,
                       atol=0.01)
    assert np.allclose(out['fun'], -1.3)
    assert out['success']
예제 #5
0
def test_vqe_on_QVM_QubitPlaceholders():
    qubit_mapping = {q0: 0, q1: 1}
    p0 = [3.1, -1.5, 0, 0]  # make it easier when sampling
    qvm = get_qc("2q-qvm")
    with local_qvm():
        cost_fun = PrepareAndMeasureOnQVM(
            prepare_ansatz=prepare_ansatz,
            make_memory_map=lambda p: {"params": p},
            hamiltonian=hamiltonian,
            qvm=qvm,
            scalar_cost_function=False,
            base_numshots=50,
            enable_logging=True,
            qubit_mapping=qubit_mapping)
        out = scipy_optimizer(cost_fun, p0, epsilon=1e-2, nshots=4)
        print(out)
        print(cost_fun.log)
    assert np.allclose(out['fun'], -4, rtol=1.1)
    assert out['success']
예제 #6
0
def test_vqe_on_WFSim_QubitPlaceholders():
    qubit_mapping = get_default_qubit_mapping(prepare_ansatz)
    sim = WavefunctionSimulator()
    cost_fun = PrepareAndMeasureOnWFSim(
        prepare_ansatz=prepare_ansatz,
        make_memory_map=lambda p: {"params": p},
        hamiltonian=hamiltonian,
        sim=sim,
        scalar_cost_function=False,
        noisy=False,
        qubit_mapping=qubit_mapping)

    with local_qvm():
        out = scipy_optimizer(cost_fun, p0, epsilon=1e-3)
        print(out)
        prog = address_qubits(prepare_ansatz, qubit_mapping=qubit_mapping)
        wf = sim.wavefunction(prog, {"params": out['x']})
    print(wf.probabilities())
    assert np.allclose(np.abs(wf.amplitudes**2), [0, 0, 0, 1],
                       rtol=1.5,
                       atol=0.01)
    assert np.allclose(out['fun'], -4)
    assert out['success']