Exemplo n.º 1
0
    def get_tw_costs(N):
        G, gamma, beta = get_test_problem(N, p=3, d=3)

        composer = QtreeQAOAComposer(graph=G, gamma=gamma, beta=beta)
        composer.energy_expectation_lightcone(list(G.edges())[0])
        tn = QtreeTensorNet.from_qtree_gates(composer.circuit)
        opt = OrderingOptimizer()
        peo, _ = opt.optimize(tn)
        tw = opt.treewidth
        mems, flops = tn.simulation_cost(peo)
        print('Max memory=', max(mems), 'Total flops=', sum(flops),
              'Treewidth=', tw)
        return tw, max(mems), sum(flops)
Exemplo n.º 2
0
def test_qtree_smoke():
    G, gamma, beta = get_test_problem()

    composer = QtreeQAOAComposer(
        graph=G, gamma=[np.pi/3], beta=[np.pi/4])
    composer.ansatz_state()

    print(composer.circuit)
    assert composer.circuit
    assert composer.n_qubits == G.number_of_nodes()

    composer = QtreeQAOAComposer(
        graph=G, gamma=[np.pi/3], beta=[np.pi/4])
    composer.energy_expectation_lightcone(list(G.edges())[0])

    print(composer.circuit)
    assert composer.circuit
    assert composer.n_qubits == G.number_of_nodes()
Exemplo n.º 3
0
    def add_two_nodes_to_leafs(graph):
        """ Works in-place """
        leaves = [n for n in graph.nodes() if graph.degree(n) <= 1]
        n = graph.number_of_nodes()
        for leaf in leaves:
            graph.add_edges_from([(leaf, n + 1), (leaf, n + 2)])
            n += 2

    graph = nx.Graph()
    graph.add_edges_from([(0, 1)])
    for i in range(n):
        add_two_nodes_to_leafs(graph)
    return graph


D = 6
G = bethe_lattice(D)

for p in range(1, D + 1):
    print(f'{p=}, {G.number_of_nodes()=}')
    gamma, beta = [0.1] * p, [0.2] * p
    composer = QtreeQAOAComposer(graph=G, gamma=gamma, beta=beta)
    composer.energy_expectation_lightcone((0, 1))
    tn = QtreeTensorNet.from_qtree_gates(composer.circuit)
    print(f'{tn.get_line_graph().number_of_nodes()=}')

    opt = OrderingOptimizer()
    peo, tn = opt.optimize(tn)
    treewidth = opt.treewidth
    print(f"{treewidth=}")