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)
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