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']
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']
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']