def test_vqc(method, options, compile, filename): """Performs a VQE circuit minimization test.""" def myloss(parameters, circuit, target): circuit.set_parameters(parameters) state = circuit().tensor return 1 - np.abs(np.dot(np.conj(target), state)) nqubits = 6 nlayers = 4 # Create variational circuit c = models.Circuit(nqubits) for l in range(nlayers): c.add((gates.RY(q, theta=0) for q in range(nqubits))) c.add((gates.CZ(q, q+1) for q in range(0, nqubits-1, 2))) c.add((gates.RY(q, theta=0) for q in range(nqubits))) c.add((gates.CZ(q, q+1) for q in range(1, nqubits-2, 2))) c.add(gates.CZ(0, nqubits-1)) c.add((gates.RY(q, theta=0) for q in range(nqubits))) # Optimize starting from a random guess for the variational parameters np.random.seed(0) x0 = np.random.uniform(0, 2*np.pi, 2*nqubits*nlayers + nqubits) data = np.random.normal(0, 1, size=2**nqubits) # perform optimization best, params, _ = optimize(myloss, x0, args=(c, data), method=method, options=options, compile=compile) if filename is not None: utils.assert_regression_fixture(params, filename)
def test_qaoa_optimization(method, options, trotter, filename): h = hamiltonians.XXZ(3, trotter=trotter) qaoa = models.QAOA(h) initial_p = [0.05, 0.06, 0.07, 0.08] best, params = qaoa.minimize(initial_p, method=method, options=options) if filename is not None: utils.assert_regression_fixture(params, filename)
def test_scheduling_optimization(method, options, messages, trotter, filename): """Test optimization of s(t).""" h0 = hamiltonians.X(3, trotter=trotter) h1 = hamiltonians.TFIM(3, trotter=trotter) sp = lambda t, p: (1 - p) * np.sqrt(t) + p * t adevp = models.AdiabaticEvolution(h0, h1, sp, dt=1e-1) best, params = adevp.minimize([0.5, 1], method=method, options=options, messages=messages) if filename is not None: utils.assert_regression_fixture(params, filename)
def test_vqe(method, options, compile, filename): """Performs a VQE circuit minimization test.""" import qibo original_backend = qibo.get_backend() if method == "sgd" or compile: qibo.set_backend("matmuleinsum") else: qibo.set_backend("custom") original_threads = get_threads() if method == 'parallel_L-BFGS-B': if 'GPU' in qibo.get_device(): # pragma: no cover pytest.skip("unsupported configuration") qibo.set_threads(1) nqubits = 6 layers = 4 circuit = Circuit(nqubits) for l in range(layers): for q in range(nqubits): circuit.add(gates.RY(q, theta=1.0)) for q in range(0, nqubits - 1, 2): circuit.add(gates.CZ(q, q + 1)) for q in range(nqubits): circuit.add(gates.RY(q, theta=1.0)) for q in range(1, nqubits - 2, 2): circuit.add(gates.CZ(q, q + 1)) circuit.add(gates.CZ(0, nqubits - 1)) for q in range(nqubits): circuit.add(gates.RY(q, theta=1.0)) hamiltonian = XXZ(nqubits=nqubits) np.random.seed(0) initial_parameters = np.random.uniform(0, 2 * np.pi, 2 * nqubits * layers + nqubits) v = VQE(circuit, hamiltonian) best, params = v.minimize(initial_parameters, method=method, options=options, compile=compile) if method == "cma": # remove `outcmaes` folder import shutil shutil.rmtree("outcmaes") if filename is not None: utils.assert_regression_fixture(params, filename) qibo.set_backend(original_backend) qibo.set_threads(original_threads)
def test_tfim_model_hamiltonian(model, kwargs, filename, numpy): """Test pre-coded Hamiltonian models generate the proper matrices.""" kwargs["numpy"] = numpy H = model(**kwargs) matrix = np.array(H.matrix).ravel().real utils.assert_regression_fixture(matrix, filename)