Пример #1
0
def makeCircuit6(graph, n, edges, cedges, gammasbetas, p):
    cgraph = nx.complement(graph)
    ans = ClassicalRegister(n)
    sol = QuantumRegister(n)
    QAOA = QuantumCircuit(sol, ans)
    r = 2

    for j in range(p):

        for i in range(n):
            QAOA.u1(-gammasbetas[j], i)

        for l in range(r):
            for i in range(n):
                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(gammasbetas[p+j]/r),nbrs ,1)
                    gate = MCMT(RXGate(2 * gammasbetas[l + j] / r), nbrs, 1)
                    QAOA.append(gate, nbs)
                else:
                    #QAOA.rx(gammasbetas[p+j]/r,i)
                    QAOA.rx(2 * gammasbetas[l + j] / r, i)
                for nbr in cgraph[i]:
                    QAOA.x(nbr)

    return QAOA
Пример #2
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
Пример #3
0
def makeCircuit8(graph, n, edges, cedges, gammasbetas, p, orderings):
    cgraph = nx.complement(graph)
    ans = ClassicalRegister(n)
    sol = QuantumRegister(n)
    QAOA = QuantumCircuit(sol, ans)

    k = 1
    #dickestate
    for i in range(n - 1, n - k - 1, -1):
        QAOA.x(i)
    for l in range(n, k, -1):
        scs(l, k, QAOA, n)
    for l in range(k, 1, -1):
        scs(l, l - 1, QAOA, n)

    for j in range(p):
        for i in range(n):
            QAOA.u1(-gammasbetas[j], i)

        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(gammasbetas[p + j]), nbrs, 1)
                QAOA.append(gate, nbs)
            else:
                QAOA.rx(gammasbetas[p + j], i)
            for nbr in cgraph[i]:
                QAOA.x(nbr)

    return QAOA
Пример #4
0
def makeCircuit5(graph, n, edges, cedges, gammasbetas, p):
    cgraph = nx.complement(graph)
    ans = ClassicalRegister(n)
    sol = QuantumRegister(n)
    QAOA = QuantumCircuit(sol, ans)
    k = 1
    #dickestate
    for i in range(n - 1, n - k - 1, -1):
        QAOA.x(i)
    for l in range(n, k, -1):
        scs(l, k, QAOA, n)
    for l in range(k, 1, -1):
        scs(l, l - 1, QAOA, n)
    #mixer and phaseseparation
    for j in range(p):
        for i in range(n):
            QAOA.u1(-gammasbetas[j], i)
        for i in range(n):
            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(gammasbetas[p + j]), nbrs, 1)
                QAOA.append(gate, nbs)
            #else:
            #warum habe ich das ausgeklammert?  Testen ob es besser ist?
            #QAOA.rx(gammasbetas[p+j],i)
            for nbr in cgraph[i]:
                QAOA.x(nbr)

    return QAOA