コード例 #1
0
ファイル: optimus_ibm.py プロジェクト: jmalliaros/Optimus-CDL
def run_IBM(H=None,
            backend=None,
            num_samples=100,
            qaoa_steps=3,
            variables=None):

    num_vars = len(list(H.linear))

    qubit_op, offset = get_ising_opt_qubitops(H, variables)

    if backend == None:
        backend = BasicAer.get_backend('qasm_simulator')
    quantum_instance = QuantumInstance(backend)

    spsa = SPSA(max_trials=10)
    qaoa = QAOA(qubit_op, spsa, qaoa_steps)
    result = qaoa.run(quantum_instance)

    circ = qaoa.get_optimal_circuit()
    q = circ.qregs[0]
    c = ClassicalRegister(num_vars, 'c')
    circ.cregs.append(c)
    circ.measure(q, c)

    job = execute(circ, backend, shots=num_samples, memory=True)

    return job.result().get_counts(circ)
コード例 #2
0
def libraryoptimize(qubo,
                    edges,
                    cedges,
                    n,
                    p,
                    plotoptangles=False,
                    modulo=False):
    if (qubo == "qubo1"):
        H = makeNPMatrix1(edges, cedges, n)
    if (qubo == "qubo2"):
        H = makeNPMatrix2(edges, cedges, n)
    if (qubo == "qubo3"):
        H = makeNPMatrix2(edges, cedges, n)

    optimizer = COBYLA()
    qaoa_mes = QAOA(H,
                    p=p,
                    optimizer=optimizer,
                    quantum_instance=Aer.get_backend('statevector_simulator'))
    results = qaoa_mes.run()
    qc1 = qaoa_mes.get_optimal_circuit()
    print(type(results.optimal_parameters))
    print(type(results.optimal_parameters.items()))
    i = 0
    for key, value in results.optimal_parameters.items():
        if (i == 0):
            gamma = value
            i += 1
        else:
            beta = value
    print("beta", beta)
    print("gamma", gamma)
    print('optimal params:      ', results.optimal_parameters)
    print('optimal value:       ', results.optimal_value)
    qcl = qaoa_mes.get_optimal_circuit()
    optgammasbetas = []
    isgamma = 0
    for key, value in results.optimal_parameters.items():
        if (modulo):
            if (isgamma < p):
                optgammasbetas.append(value % (2 * math.pi))
                isgamma += 1
            else:
                optgammasbetas.append(value % (math.pi))
        else:
            optgammasbetas.append(value)

    if (plotoptangles):
        plottheoptangles(optgammasbetas, p)
    if (qubo == "qubo1"):
        qc = makeCircuit1(n, edges, cedges, optgammasbetas, p)
    if (qubo == "qubo2"):
        qc = makeCircuit2(n, edges, cedges, optgammasbetas, p)
    if (qubo == "qubo3"):
        qc = makeCircuit3(n, edges, cedges, optgammasbetas, p)

    ans = ClassicalRegister(n)
    sol = QuantumRegister(n)
    QAOA2 = QuantumCircuit(sol, ans)
    QAOA2.append(qc1, range(n))
    return qc, optgammasbetas