def Qmax_cut(self, w: List[List[int]], ans_set)->List: qubitOp, offset = max_cut.get_operator(w) # mapping Ising Hamiltonian to Quadratic Program qp = QuadraticProgram() qp.from_ising(qubitOp, offset) qp.to_docplex()#.prettyprint() # solving Quadratic Program using exact classical eigensolver exact = MinimumEigenOptimizer(NumPyMinimumEigensolver()) result = exact.solve(qp) return result
def calculate(self, G, cost_matrix, starting_node=0): # Create nodes array for the TSP solver in Qiskit coords = [] for node in G.nodes: coords.append(G.nodes[node]['pos']) tsp_instance = tsp.TspData(name="TSP", dim=len(G.nodes), coord=coords, w=cost_matrix) qubitOp, offset = tsp.get_operator(tsp_instance) backend = Aer.get_backend('qasm_simulator') quantum_instance = QuantumInstance(backend) optimizer = COBYLA(maxiter=300, rhobeg=3, tol=1.5) # Define Minimum Eigen Solvers minimum_eigen_solver = QAOA(quantum_instance=quantum_instance, optimizer=optimizer, operator=qubitOp) #minimum_eigen_solver = VQE(quantum_instance=quantum_instance, optimizer=optimizer, operator=qubitOp) exact_mes = NumPyMinimumEigensolver() # Create the optimizers so we can plug our Quadratic Program minimum_eigen_optimizer = MinimumEigenOptimizer(minimum_eigen_solver) #vqe = MinimumEigenOptimizer(vqe_mes) exact = MinimumEigenOptimizer(exact_mes) rqaoa = RecursiveMinimumEigenOptimizer( min_eigen_optimizer=minimum_eigen_optimizer, min_num_vars=1, min_num_vars_optimizer=exact) # Create QUBO based on qubitOp from the TSP qp = QuadraticProgram() qp.from_ising(qubitOp, offset, linear=True) result = rqaoa.solve(qp) if (tsp.tsp_feasible(result.x)): z = tsp.get_tsp_solution(result.x) print('solution:', z) return z else: print('no solution:', result.x) return []
def calculate(self, G, cost_matrix, starting_node = 0): # Create nodes array for the TSP solver in Qiskit coords = [] for node in G.nodes: coords.append(G.nodes[node]['pos']) tsp_instance = tsp.TspData(name = "TSP", dim = len(G.nodes), coord = coords, w = cost_matrix) qubitOp, offset = tsp.get_operator(tsp_instance) print("Qubits needed: ", qubitOp.num_qubits) #print(qubitOp.print_details()) #backend = Aer.get_backend('statevector_simulator') backend = Aer.get_backend('qasm_simulator') # Create QUBO based on qubitOp from the TSP qp = QuadraticProgram() qp.from_ising(qubitOp, offset, linear=True) admm_params = ADMMParameters( rho_initial=1001, beta=1000, factor_c=900, maxiter=100, three_block=True, tol=1.e-6) qubo_optimizer = MinimumEigenOptimizer(QAOA(quantum_instance=backend)) convex_optimizer = CobylaOptimizer() admm = ADMMOptimizer(params=admm_params, qubo_optimizer=qubo_optimizer, continuous_optimizer=convex_optimizer) quantum_instance = QuantumInstance(backend) result = admm.solve(qp) print(result)
ax=default_axes, pos=pos) edge_labels = nx.get_edge_attributes(G2, 'weight') nx.draw_networkx_edge_labels(G2, pos, font_color='b', edge_labels=edge_labels) qubitOp, offset = tsp.get_operator(ins) print('Offset:', offset) print('Ising Hamiltonian:') print(qubitOp.print_details()) qp = QuadraticProgram() qp.from_ising(qubitOp, offset, linear=True) qp.to_docplex().prettyprint() result = exact.solve(qp) print(result) ee = NumPyMinimumEigensolver(qubitOp) result = ee.run() # print('energy:', result.eigenvalue.real) # print('tsp objective:', result.eigenvalue.real + offset) x = sample_most_likely(result.eigenstate) print('feasible:', tsp.tsp_feasible(x)) z = tsp.get_tsp_solution(x) print('solution:', z) print('solution objective:', tsp.tsp_value(z, ins.w))