Example #1
0
def makeCircuit9(graph, n, edges, cedges, gammasbetas, p, orderings):
    cgraph = nx.complement(graph)
    ans = ClassicalRegister(n)
    sol = QuantumRegister(n)
    QAOA = QuantumCircuit(sol, ans)
    for j in range(p):
        if (j != 0):

            for i in range(n):

                QAOA.u1(-gammasbetas[j - 1], i)
                QAOA.barrier()

        for i in orderings[j]:

            nbrs = 0
            nbs = []
            for nbr in cgraph[i]:
                QAOA.x(nbr)
                nbrs += 1
                nbs.append(nbr)

            nbs.append(i)
            if (nbrs != 0):
                gate = MCMT(RXGate(2 * gammasbetas[p - 1 + j]), nbrs, 1)
                QAOA.append(gate, nbs)
            else:
                QAOA.rx(2 * gammasbetas[p - 1 + j], i)
            for nbr in cgraph[i]:
                QAOA.x(nbr)
            QAOA.barrier()
    return QAOA
Example #2
0
def makeCircuit3(n, edges, cedges, gammasbetas, p):
    ans = ClassicalRegister(n)
    sol = QuantumRegister(n)
    QAOA = QuantumCircuit(sol, ans)

    for i in range(n):
        QAOA.h(i)
    QAOA.barrier()
    for j in range(p):
        for i in range(n):
            QAOA.u1(-gammasbetas[j], i)
        for edge in cedges:
            k = edge[0]
            l = edge[1]
            #warum scheint das vorzeichen hier egal zu sein?
            QAOA.cu1(2 * gammasbetas[j], l, k)
    #warum beta und nicht 2*beta?
        QAOA.barrier()
        QAOA.rx(-2 * gammasbetas[p + j], range(n))
        QAOA.barrier()

    return QAOA