Po zdefiniowaniu naszego algorytmu jako zbioru bramek działających na naszych kubitach, obwód nalezy wykonać za pomocą metody execute.
from qiskit import execute
Podstawowe backendy
Wykonanie obwodu moze być realizowane zarówno na prawidziwym komputerze kwantowym jak i na lokalnym, klasycznym symulatorze. Większość naszych zadań przeprowadzanych będzie z wykorzystaniem symulatora Aer.
Podstawowym symulatorem na którym mozemy w pełni uruchomić kod obwodu jest qasm_simulator. Uruchamia on cały obwód i zapisuje wyniki do rejestru klasycznego. Po wielokrotnym uruchomieniu obwodu mozemy sprawdzić równiez statystyki otrzymanych wyników.
Pomiar w obwodzie i wielokrotne uruchamianie układu
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuitqreg = QuantumRegister(2)creg = ClassicalRegister(2)# utworzenie obwodu kwantowego z 2 qubitami i 2 bitamicircuit = QuantumCircuit(qreg, creg)circuit.h(qreg[0]) # działamy jakąś bramką na pierwszym qubiciecircuit.measure(qreg, creg) # dokunujemy pomiaru# zdefiniowanie symulatorasimulator = Aer.get_backend('qasm_simulator')# definicja zadania do wykonaniajob = execute(circuit, simulator, shots=1000)print(job.job_id())# wyciągnięcie wyników i statystykcounts = job.result().get_counts(circuit)print(counts)
Wizualizacja otrzymanych wyników realizowana metodą plot_histogram.
from qiskit.visualization import plot_histogramdisplay(plot_histogram(counts))
Tworzenie stanu jednokubitowego
\[
\ket{\psi}=\ket{0}
\]
Do inspekcji stanu układu (bez jego pomiaru) mozemy uzyć backend statevector_simulator.
qr = QuantumRegister(1)qc = QuantumCircuit(qr)# klasyczny symulator pozwala zobaczyc stanbackend = Aer.get_backend('statevector_simulator')job = execute(qc, backend)result = job.result()state = result.get_statevector() # wynik w postaci wektora stanuprint(state)
Statevector([1.+0.j, 0.+0.j],
dims=(2,))
state.draw('latex') # metoda wypisująca wektor stanu w latexu
\[ |0\rangle\]
from qiskit.visualization import plot_bloch_multivectorplot_bloch_multivector(result.get_statevector())
qr = QuantumRegister(3)qc = QuantumCircuit(qr)# qc.x(qr[0]) # qc.x(qr[1])# klasyczny symulator pozwala zobaczyc stanbackend = Aer.get_backend('statevector_simulator')job=execute(qc, backend)result = job.result()state = result.get_statevector()
Uruchom powyższy kod usuwajac poszczegolne komentarze i sprawdz wynik.
# uruchom w środowisku IBM Quantum Experiencefrom qiskit_ibm_provider import IBMProviderIBMProvider.save_account(token=MY_API_TOKEN)provider = IBMProvider()# Create a circuitqc = QuantumCircuit(2)qc.h(0)qc.cx(0, 1)qc.measure_all()# Select a backend.backend = provider.get_backend("ibmq_qasm_simulator")# Transpile the circuittranspiled = transpile(qc, backend=backend)# Submit a job.job = backend.run(transpiled)# Get results.print(job.result().get_counts())