def grover_circuit(): """ Builds a QuantumCircuit of the qiskit aqua implementation of grover's algorithm with set parameters. Args: Returns: Resuling circuit of the qiskit aqua implementation of Grover's algorithm after adding measures on every qubit. """ sat_cnf = """ c Example DIMACS 3-sat p cnf 3 5 -1 -2 -3 0 1 -2 3 0 1 2 -3 0 1 -2 -3 0 -1 2 3 0 """ # backend = Aer.get_backend('aer_simulator') oracle = SAT(sat_cnf) grv = Grover(oracle) circ = grv.construct_circuit() return add_measures(circ)
def get_circuit(**kwargs): oracle_string = kwargs[ "oracle"] # input is binary String of a truth table, like '1000': A & B = 0 => f(x*) = 1 oracle = TruthTableOracle(oracle_string) grover = Grover(oracle) grover_circuit = grover.construct_circuit(measurement=True) return grover_circuit
def grover_general_logicalexpression_qiskit(oracle_string: str) -> QuantumCircuit: from qiskit.aqua.algorithms import Grover from qiskit.aqua.components.oracles import LogicalExpressionOracle # input is logical expression, like '(A | B) & (A | ~B) & (~A | B)' oracle = LogicalExpressionOracle(oracle_string) grover = Grover(oracle) grover_circuit = grover.construct_circuit(measurement=True) return grover_circuit
def grover_general_truthtable_qiskit(oracle_string: str) -> QuantumCircuit: from qiskit.aqua.algorithms import Grover from qiskit.aqua.components.oracles import TruthTableOracle # input is binary String of a truth table, like '1000': A & B = 0 => f(x*) = 1 oracle = TruthTableOracle(oracle_string) grover = Grover(oracle) grover_circuit = grover.construct_circuit(measurement=True) return grover_circuit
def test_construct_circuit(self): """Test construct_circuit""" oracle = QuantumCircuit(2) oracle.cz(0, 1) grover = Grover(oracle=oracle, good_state=["11"]) constructed = grover.construct_circuit(1) grover_op = GroverOperator(oracle) expected = QuantumCircuit(2) expected.compose(grover_op.state_preparation, inplace=True) expected.compose(grover_op, inplace=True) self.assertTrue(Operator(constructed).equiv(Operator(expected)))
return resultingAction """ Starting here... first we'll give the opening message """ print( "Grover is an AI who's decisions are based on the result of running the Grover algorithm." ) print( "He tends to cheat more on bad days, when there's more noise in the quantum computer..." ) print() """ Get the data from the quantum computer """ expression = 'a & b' oracle = LogicalExpressionOracle(expression, optimization=True) grover = Grover(oracle) grover_compiled = grover.construct_circuit(measurement=True) # Load our saved IBMQ accounts and get the backend print("Loading account...") provider = IBMQ.load_account() provider = IBMQ.get_provider(hub='ibm-q') device = provider.get_backend('ibmq_ourense') #device = least_busy(provider.backends(simulator=False)) print("Selected device: ", device) job = execute(grover_compiled, backend=device, shots=1024) job_monitor(job, interval=2) """ Now we can process the for our RNG stuff """ print("Computing probabilities...")
QuantumRegister, Aer) import math import matplotlib.pyplot as plt from qiskit.aqua import QuantumInstance, run_algorithm from qiskit.aqua.algorithms import Grover from qiskit.aqua.components.oracles import LogicalExpressionOracle, TruthTableOracle from qiskit.compiler import transpile input_3sat = ''' c example DIMACS-CNF 3-SAT p cnf 3 1 1 -2 -3 0 ''' oracle = LogicalExpressionOracle(input_3sat) # cir = oracle.construct_circuit() # print(cir) grover = Grover(oracle) circuit = grover.construct_circuit() circuit.draw(filename="3-sat.png") # cir.draw(filename="3-sat_diffusion_operator.png") # cir.draw(filename="circuit.png") backend = BasicAer.get_backend('qasm_simulator') quantum_instance = QuantumInstance(backend, shots=1024) result = grover.run(quantum_instance) print(result['result']) plt.bar(result['measurement'].keys(), result['measurement'].values()) grover_compiled = transpile(result['circuit'], backend=backend, optimization_level=3) plt.show()