예제 #1
0
def test_qaoa_energy_vs_qiskit(test_problem):
    G, gamma, beta = test_problem
    print('no_zz', G.number_of_nodes(), G.number_of_edges(), len(gamma))
    sim = QAOAQtreeSimulator(QtreeQAOAComposer)
    with prof.timing('QTensor energy time'):
        E = sim.energy_expectation(G, gamma=gamma, beta=beta)
    assert E

    gamma, beta = -np.array(gamma) * 2 * np.pi, np.array(beta) * np.pi
    with prof.timing('Qiskit energy time'):
        qiskit_E = simulate_qiskit_amps(G, gamma, beta)
    assert np.isclose(E, qiskit_E)
예제 #2
0
def test_qaoa_energy_multithread():
    G, gamma, beta = get_test_problem()
    sim = QAOAQtreeSimulator(QtreeQAOAComposer)
    res = sim.energy_expectation_parallel(G,
                                          gamma=gamma,
                                          beta=beta,
                                          n_processes=4)
    print('result parallel', res)
    assert res
    res_1 = sim.energy_expectation(G, gamma=gamma, beta=beta)
    print('result serial', res_1)
    assert res_1 - res < 1e-6
예제 #3
0
def test_default_qaoa_energy_vs_qiskit(test_problem):
    G, gamma, beta = test_problem
    print('default', G.number_of_nodes(), G.number_of_edges(), len(gamma))
    sim = QAOAQtreeSimulator(DefaultQAOAComposer)
    with prof.timing('QTensor energy time'):
        E = sim.energy_expectation(G, gamma=gamma, beta=beta)
    assert E

    gamma, beta = -np.array(gamma) * 2 * np.pi, np.array(beta) * np.pi
    with prof.timing('Qiskit energy time'):
        qiskit_E = simulate_qiskit_amps(G, gamma, beta, shots=QISKIT_SHOTS)
    assert np.isclose(E, qiskit_E, rtol=REL_MARGIN)
예제 #4
0
def qaoa_energy_sim(nodes,
                    seed,
                    degree,
                    p,
                    graph_type,
                    max_time,
                    max_tw,
                    ordering_algo,
                    backend,
                    n_processes,
                    profile,
                    composer_type='default'):
    np.random.seed(seed)
    random.seed(seed)
    if graph_type == 'random_regular':
        G = nx.random_regular_graph(degree, nodes, seed=seed)
    elif graph_type == 'erdos_renyi':
        G = nx.erdos_renyi_graph(nodes, degree / (nodes - 1), seed=seed)
    else:
        raise Exception('Unsupported graph type')
    gamma, beta = [np.pi / 3] * p, [np.pi / 2] * p

    optimizer = get_ordering_algo(ordering_algo)

    Backend = choose_backend(backend)
    backend_obj = Backend()
    if profile:
        backend_obj = PerfBackend(print=False)
        backend_obj.backend = Backend()

    sim = QAOAQtreeSimulator(DefaultQAOAComposer,
                             bucket_backend=backend_obj,
                             optimizer=optimizer)
    start = time.time()
    if n_processes == 1:
        result = sim.energy_expectation(G, gamma, beta)
        if profile:
            print('Profiling results')
            backend_obj.gen_report()
    else:
        result = sim.energy_expectation_parallel(G,
                                                 gamma,
                                                 beta,
                                                 n_processes=n_processes)
    end = time.time()
    print(f"Simutation time: {end - start}")
    print(result)
예제 #5
0
def test_qtree_energy():
    G, gamma, beta = get_test_problem(16, 2, d=3)

    sim = QAOAQtreeSimulator(QtreeQAOAComposer)
    E = sim.energy_expectation(G=G, gamma=gamma, beta=beta)

    print('Energy', E)
    assert np.imag(E) < 1e-6

    E = np.real(E)

    Ed = G.number_of_edges()
    C = (Ed - E) / 2

    print("Edges", Ed)
    print("Cost", C)
    assert E
예제 #6
0
def test_qaoa_energy_feynman():
    G, gamma, beta = get_test_problem(10, 3, 3)
    sim = QAOAQtreeSimulator(QtreeQAOAComposer)
    res = sim.energy_expectation(G, gamma=gamma, beta=beta)
    print('result simple simulator', res)

    sim = FeynmanQAOASimulator(QtreeQAOAComposer)
    sim.optimizer = TreeTrimSplitter(max_tw=13, tw_bias=0)
    res_1 = sim.energy_expectation(G, gamma=gamma, beta=beta)
    print('result feynman simulator', res_1)
    assert np.isclose(res, res_1)
예제 #7
0
from qtensor.optimisation.Optimizer import OrderingOptimizer
from qtensor.optimisation.TensorNet import QtreeTensorNet
from qtensor import QtreeQAOAComposer
from qtensor import QAOAQtreeSimulator
from qtensor import PerfNumpyBackend
from qtensor import QAOA_energy
import networkx as nx
import numpy as np

G = nx.random_regular_graph(4, 20)
gamma, beta = [np.pi / 3], [np.pi / 2]

composer = QtreeQAOAComposer(graph=G, gamma=gamma, beta=beta)
composer.ansatz_state()

backend = PerfNumpyBackend(print=True)
sim = QAOAQtreeSimulator(composer, bucket_backend=backend)
sim.simulate(composer.circuit)
print(sim.bucket_backend)
print(backend._profile_results)
print(backend.gen_report())