# -*- coding: utf-8 -*- """ Created on Sep 14 17:42:42 2024 @author: tuema """ print('HSK qiskit Exercises') #--------------------------------------------------------------------------- #imports #qiskit from qiskit import QuantumCircuit,QuantumRegister,ClassicalRegister,transpile from qiskit.providers.basic_provider import BasicSimulator from qiskit.visualization import plot_histogram from qiskit.circuit.library.standard_gates import XGate, ZGate #math import numpy as np #ploting import matplotlib.pyplot as plt #---------------------------------------------------------------------------- #definitions and initialization begin set_list = [] pi = np.pi n=5 iterat = int(round((pi/4)*np.sqrt(n-1))) print('iterat', iterat) q = QuantumRegister(n) cr =ClassicalRegister(n) qc = QuantumCircuit(q,cr) CtrlXGate = XGate().control(n-1) #Die Quantenschaltung für das Oracle: #Die Markierung erfolgt durch X Gates #die für die nicht markierten Bits gesetzt werden #Dies liegt an der Big Endian-Little Endian Problematik def add_reflect_oracle(circuit, s_list): for i in range(0,len(s_list)): if s_list[i] == 0: circuit.x(i) circuit.h(n-1) circuit.append(CtrlXGate,q) circuit.h(n-1) for i in range(0,len(s_list)): if s_list[i] == 0: circuit.x(i) qc.barrier() # Die Quantenschaltung für den Grover-Operator: # Sie führt die Verstärkung der Amplitudendifferenzen durch def add_reflect_s(circuit): for i in range(n): circuit.h(i) for i in range(n): circuit.x(i) qc.barrier() circuit.h(n-1) circuit.append(CtrlXGate,q) circuit.h(n-1) qc.barrier() for i in range(n): circuit.x(i) for i in range(n): circuit.h(i) qc.barrier() #---------------------------------------------------------------------------- #definitions and initialization end print('\nInitialising Circuit...\n') ### Initialisation ### #Mark desired state #example 0110 set_list = [0,1,1,0] for i in range(n): qc.h(i) qc.barrier() # print('\nPreparing Oracle circuit....\n') ### Oracle ### #amplify for i in range(iterat): add_reflect_oracle(qc, set_list) add_reflect_s(qc) ### Measurment ### for i in range(n-1): qc.measure(i,i) #--------------------------------------------------------------------------- #draw qc.draw("mpl") plt.show() #--------------------------------------------------------------------------- #execute simulation sim_backend = BasicSimulator() job = sim_backend.run(transpile(qc, sim_backend), shots=1024) result = job.result() counts = result.get_counts(qc) #--------------------------------------------- #--------------------------------------------- #--------------------------------------------------------------------------- #plot legend = ['1024 shots'] plot_histogram([counts], legend=legend, color=['midnightblue'], title="Grover" ) plt.show() #--------------------------------------------------------------------------- #end