Lewati ke konten utama

Algoritma kuantum: Estimasi fase

catatan

Kento Ueda (15 May 2024)

Notebook ini membahas konsep dasar dan implementasi Quantum Fourier Transformation (QFT) dan Quantum Phase Estimation (QPE).

Unduh pdf dari kuliah aslinya. Perlu diperhatikan bahwa beberapa potongan kode mungkin sudah tidak berlaku karena ini adalah gambar statis.

Perkiraan waktu QPU untuk menjalankan eksperimen ini adalah 7 detik.

1. Pendahuluan​

Quantum Fourier Transformation (QFT)

Quantum Fourier Transformation adalah padanan kuantum dari transformasi Fourier diskrit klasik. Ini adalah transformasi linear yang diterapkan pada keadaan kuantum, memetakan basis komputasional ke representasi basis Fourier-nya. QFT memainkan peran kunci dalam banyak algoritma kuantum, menawarkan metode efisien untuk mengekstrak informasi periodisitas dari keadaan kuantum. QFT dapat diimplementasikan dengan O(N2)O(N^2) operasi menggunakan gate kuantum seperti Hadamard gate dan Control-Phase gate untuk NN qubit, memungkinkan percepatan eksponensial dibandingkan transformasi Fourier klasik.

  • Aplikasi: Ini adalah bagian fundamental dalam algoritma kuantum seperti algoritma Shor untuk memfaktorkan bilangan bulat besar dan logaritma diskrit.

Quantum Phase Estimation (QPE)

Quantum Phase Estimation adalah algoritma kuantum yang digunakan untuk mengestimasi fase yang terkait dengan eigenvector dari operator uniter. Algoritma ini memberikan jembatan antara sifat matematis abstrak dari keadaan kuantum dan aplikasi komputasionalnya.

  • Aplikasi: Algoritma ini dapat menyelesaikan masalah seperti menemukan nilai eigen dari matriks uniter dan mensimulasikan sistem kuantum.

Bersama-sama, QFT dan QPE membentuk tulang punggung dari banyak algoritma kuantum yang memecahkan masalah yang tidak mungkin diselesaikan oleh komputer klasik. Di akhir notebook ini, kamu akan mendapatkan pemahaman tentang bagaimana teknik-teknik ini diimplementasikan.

2. Dasar-dasar Quantum Fourier Transformation (QFT)​

# Added by doQumentation β€” required packages for this notebook
!pip install -q numpy qiskit qiskit-aer qiskit-ibm-runtime
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit_aer import AerSimulator
from qiskit.visualization import plot_histogram, plot_bloch_multivector
from qiskit.quantum_info import Statevector
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import Sampler

from numpy import pi

Dari analogi dengan transformasi Fourier diskrit, QFT bekerja pada keadaan kuantum ∣X⟩=βˆ‘j=0Nβˆ’1xj∣j⟩\vert X\rangle = \sum_{j=0}^{N-1} x_j \vert j \rangle untuk NN qubit dan memetakannya ke keadaan kuantum ∣Y⟩=βˆ‘k=0Nβˆ’1yk∣k⟩\vert Y\rangle = \sum_{k=0}^{N-1} y_k \vert k \rangle.

QFTN:∣jβŸ©β†¦1Nβˆ‘k=0Nβˆ’1Ο‰Njk∣k⟩QFT_{N}: \vert j \rangle \mapsto \frac{1}{\sqrt{N}}\sum_{k=0}^{N-1}\omega_N^{jk} \vert k \rangle

di mana Ο‰Njk=e2Ο€ijkN\omega_N^{jk} = e^{2\pi i \frac{jk}{N}}.

Atau representasi matriks unitari:

UQFT=1Nβˆ‘j=0Nβˆ’1βˆ‘k=0Nβˆ’1Ο‰Njk∣k⟩⟨j∣U_{QFT} = \frac{1}{\sqrt{N}} \sum_{j=0}^{N-1} \sum_{k=0}^{N-1} \omega_N^{jk} \vert k \rangle \langle j \vert

2.1. Intuisi ​

Quantum Fourier transform (QFT) melakukan transformasi antara dua basis: basis komputasional (Z) dan basis Fourier. Tapi apa arti basis Fourier dalam konteks ini? Kamu mungkin ingat bahwa transformasi Fourier F(Ο‰)F(\omega) dari fungsi f(x)f(x) menggambarkan konvolusi f(x)f(x) ke fungsi sinusoidal dengan frekuensi Ο‰\omega. Secara sederhana: transformasi Fourier adalah fungsi yang menggambarkan seberapa banyak dari setiap frekuensi Ο‰\omega yang kita perlukan untuk membangun fungsi f(x)f(x) dari fungsi sinus (atau kosinus). Untuk lebih memahami apa yang dimaksud QFT dalam konteks ini, perhatikan gambar bertahap di bawah yang menunjukkan angka yang dikodekan dalam biner menggunakan empat qubit:

Dalam basis komputasional, kita menyimpan angka dalam biner menggunakan keadaan ∣0⟩|0\rangle dan ∣1⟩|1\rangle.

Perhatikan frekuensi perubahan qubit yang berbeda; qubit paling kiri berubah setiap kenaikan angka, qubit berikutnya setiap 2 kenaikan, yang ketiga setiap 4 kenaikan, dan seterusnya.

Jika kita menerapkan quantum Fourier transform pada keadaan-keadaan ini, kita memetakan

∣StateΒ inΒ ComputationalΒ BasisβŸ©β†’QFT∣StateΒ inΒ FourierΒ Basis⟩|\text{State in Computational Basis}\rangle \quad \xrightarrow[]{\text{QFT}} \quad |\text{State in Fourier Basis}\rangle QFT∣x⟩=∣x~⟩\text{QFT}|x\rangle = |\widetilde{x}\rangle

(Kita sering menandai keadaan dalam basis Fourier menggunakan tilde (~)).

Dalam basis Fourier, kita menyimpan angka menggunakan rotasi yang berbeda di sekitar sumbu Z:

IFRAME

Angka yang ingin kita simpan menentukan sudut rotasi setiap qubit di sekitar sumbu Z. Dalam keadaan ∣0~⟩|\widetilde{0}\rangle, semua qubit berada dalam keadaan ∣+⟩|{+}\rangle. Seperti yang terlihat pada contoh di atas, untuk mengkodekan keadaan ∣5~⟩|\widetilde{5}\rangle pada 4 qubit, kita memutar qubit paling kiri sebesar 52n=516\tfrac{5}{2^n} = \tfrac{5}{16} putaran penuh (516Γ—2Ο€\tfrac{5}{16}\times 2\pi radian). Qubit berikutnya diputar dua kali lipat (1016Γ—2Ο€\tfrac{10}{16}\times 2\pi radian, atau 10/1610/16 putaran penuh), sudut ini kemudian digandakan untuk qubit berikutnya, dan seterusnya.

Sekali lagi, perhatikan frekuensi perubahan setiap qubit. Qubit paling kiri (qubit 0) dalam kasus ini memiliki frekuensi terendah, dan yang paling kanan memiliki frekuensi tertinggi.

2.2 Contoh: QFT 1-qubit​

Mari kita pertimbangkan kasus N=21=2N = 2^1 = 2.

Matriks unitari dapat ditulis:

UQFT=12βˆ‘j=01βˆ‘k=01Ο‰2jk∣k⟩⟨j∣=12(Ο‰20∣0⟩⟨0∣+Ο‰20∣0⟩⟨1∣+Ο‰20∣1⟩⟨0∣+Ο‰21∣1⟩⟨1∣)=12(∣0⟩⟨0∣+∣0⟩⟨1∣+∣1⟩⟨0βˆ£βˆ’βˆ£1⟩⟨1∣)=H\begin{aligned} U_{QFT} & = \frac{1}{\sqrt{2}} \sum_{j=0}^{1} \sum_{k=0}^{1} \omega_2^{jk} \vert k \rangle \langle j \vert \\ & = \frac{1}{\sqrt{2}} (\omega_2^{0} \vert 0 \rangle \langle 0 \vert + \omega_2^{0} \vert 0 \rangle \langle 1 \vert + \omega_2^{0} \vert 1 \rangle \langle 0 \vert + \omega_2^{1} \vert 1 \rangle \langle 1 \vert) \\ & = \frac{1}{\sqrt{2}} (\vert 0 \rangle \langle 0 \vert + \vert 0 \rangle \langle 1 \vert + \vert 1 \rangle \langle 0 \vert - \vert 1 \rangle \langle 1 \vert) \\ & = H \end{aligned}

Operasi ini adalah hasil dari penerapan Hadamard gate (HH).

2.3 Representasi produk dari QFT​

Mari kita generalisasi transformasi untuk N=2nN = 2^n, QFTNQFT_{N} yang bekerja pada keadaan ∣x⟩=∣x1…xn⟩\vert x \rangle = \vert x_1\ldots x_n \rangle.

QFTN∣x⟩=1Nβˆ‘y=0Nβˆ’1Ο‰Nxy∣y⟩=1Nβˆ‘y=0Nβˆ’1e2Ο€ixy/2n∣y⟩ sinceβ€…Ο‰Nxy=e2Ο€ixyNβ€…andβ€…N=2n=1Nβˆ‘y=0Nβˆ’1e2Ο€i(βˆ‘k=1nyk/2k)x∣y1…ynβŸ©β€…rewritingΒ inΒ fractionalΒ binaryΒ notationβ€…y=y1…yn,y/2n=βˆ‘k=1nyk/2k=1Nβˆ‘y=0Nβˆ’1∏k=1ne2Ο€ixyk/2k∣y1…ynβŸ©β€…afterΒ expandingΒ theΒ exponentialΒ ofΒ aΒ sumΒ toΒ aΒ productΒ ofΒ exponentials,=1N⨂k=1n(∣0⟩+e2Ο€ix/2k∣1⟩)β€…afterΒ rearrangingΒ theΒ sumΒ andΒ products,Β andΒ expandingβˆ‘y=0Nβˆ’1=βˆ‘y1=01βˆ‘y2=01β€¦βˆ‘yn=01=1N(∣0⟩+e2Ο€i2x∣1⟩)βŠ—(∣0⟩+e2Ο€i22x∣1⟩)βŠ—β€¦βŠ—(∣0⟩+e2Ο€i2nβˆ’1x∣1⟩)βŠ—(∣0⟩+e2Ο€i2nx∣1⟩)\begin{aligned} QFT_N\vert x \rangle & = \frac{1}{\sqrt{N}} \sum_{y=0}^{N-1}\omega_N^{xy} \vert y \rangle \\ & = \frac{1}{\sqrt{N}} \sum_{y=0}^{N-1} e^{2 \pi i xy / 2^n} \vert y \rangle ~\text{since}\: \omega_N^{xy} = e^{2\pi i \frac{xy}{N}} \:\text{and}\: N = 2^n \\ & = \frac{1}{\sqrt{N}} \sum_{y=0}^{N-1} e^{2 \pi i \left(\sum_{k=1}^n y_k/2^k\right) x} \vert y_1 \ldots y_n \rangle \:\text{rewriting in fractional binary notation}\: y = y_1\ldots y_n, y/2^n = \sum_{k=1}^n y_k/2^k \\ & = \frac{1}{\sqrt{N}} \sum_{y=0}^{N-1} \prod_{k=1}^n e^{2 \pi i x y_k/2^k } \vert y_1 \ldots y_n \rangle \:\text{after expanding the exponential of a sum to a product of exponentials,} \\ & = \frac{1}{\sqrt{N}} \bigotimes_{k=1}^n \left(\vert0\rangle + e^{2 \pi i x /2^k } \vert1\rangle \right) \:\text{after rearranging the sum and products, and expanding} \sum_{y=0}^{N-1} = \sum_{y_1=0}^{1}\sum_{y_2=0}^{1}\ldots\sum_{y_n=0}^{1} \\ & = \frac{1}{\sqrt{N}} \left(\vert0\rangle + e^{\frac{2\pi i}{2}x} \vert1\rangle\right) \otimes \left(\vert0\rangle + e^{\frac{2\pi i}{2^2}x} \vert1\rangle\right) \otimes \ldots \otimes \left(\vert0\rangle + e^{\frac{2\pi i}{2^{n-1}}x} \vert1\rangle\right) \otimes \left(\vert0\rangle + e^{\frac{2\pi i}{2^n}x} \vert1\rangle\right) \end{aligned}

2.4 Contoh: Konstruksi Circuit QFT 3 qubit​

Dari deskripsi di atas, mungkin belum jelas bagaimana membangun Circuit QFT. Untuk saat ini, cukup catat bahwa kita mengharapkan tiga qubit memiliki fase yang berevolusi dengan "kecepatan" yang berbeda. Memahami bagaimana tepatnya ini diterjemahkan ke dalam Circuit diserahkan sebagai latihan bagi pembaca. Ada beberapa diagram dan contoh dalam pdf kuliah. Sumber tambahan termasuk pelajaran ini dari kursus Fundamentals of quantum algorithms.

Kita akan mendemonstrasikan QFT hanya menggunakan simulator, sehingga kita tidak akan menggunakan kerangka kerja pola Qiskit sampai kita beralih ke estimasi fase kuantum.

# Prepare for 3 qubits circuit
qr = QuantumRegister(3)
cr = ClassicalRegister(3)
qc = QuantumCircuit(qr, cr)
qc.h(2)
qc.cp(pi / 2, 1, 2) # Controlled-phase gate from qubit 1 to qubit 2
qc.cp(pi / 4, 0, 2) # Controlled-phase gate from qubit 0 to qubit 2
qc.draw(output="mpl")

Output of the previous code cell

qc.h(1)
qc.cp(pi / 2, 0, 1) # Controlled-phase gate from qubit 0 to qubit 1

qc.draw(output="mpl")

Output of the previous code cell

qc.h(0)

qc.draw(output="mpl")

Output of the previous code cell

qc.swap(0, 2)

qc.draw(output="mpl")

Output of the previous code cell

Kita coba menerapkan QFT pada ∣5⟩|5\rangle sebagai contoh.

Pertama, kita konfirmasi notasi biner dari bilangan bulat 5 dan buat Circuit yang mengkodekan keadaan 5:

bin(5)
'0b101'
qc = QuantumCircuit(3)

qc.x(0)
qc.x(2)
qc.draw(output="mpl")

Output of the previous code cell

Kita periksa keadaan kuantum menggunakan simulator Aer:

statevector = Statevector(qc)
plot_bloch_multivector(statevector)

Output of the previous code cell

Terakhir, kita tambahkan QFT dan lihat keadaan akhir qubit kita:

qc.h(2)
qc.cp(pi / 2, 1, 2)
qc.cp(pi / 4, 0, 2)

qc.h(1)
qc.cp(pi / 2, 0, 1)

qc.h(0)

qc.swap(0, 2)

qc.draw(output="mpl")

Output of the previous code cell

statevector = Statevector(qc)
plot_bloch_multivector(statevector)

Output of the previous code cell

Kita bisa melihat fungsi QFT kita bekerja dengan benar. Qubit 0 telah diputar sebesar 58\tfrac{5}{8} putaran penuh, qubit 1 sebesar 108\tfrac{10}{8} putaran penuh (setara dengan 14\tfrac{1}{4} putaran penuh), dan qubit 2 sebesar 208\tfrac{20}{8} putaran penuh (setara dengan 12\tfrac{1}{2} putaran penuh).

2.5 Latihan: QFT​

(1) Implementasikan QFT dengan 4 qubit.

##your code goes here##

(2) Terapkan QFT pada ∣14⟩|14\rangle, simulasikan dan plot statevector menggunakan Bloch sphere.

##your code goes here##

Solusi latihan: QFT​

(1)

qr = QuantumRegister(4)
cr = ClassicalRegister(4)
qc = QuantumCircuit(qr, cr)

qc.h(3)
qc.cp(pi / 2, 2, 3)
qc.cp(pi / 4, 1, 3)
qc.cp(pi / 8, 0, 3)

qc.h(2)
qc.cp(pi / 2, 1, 2)
qc.cp(pi / 4, 0, 2)

qc.h(1)
qc.cp(pi / 2, 0, 1)

qc.h(0)

qc.swap(0, 3)
qc.swap(1, 2)

qc.draw(output="mpl")

Output of the previous code cell

(2)

bin(14)
'0b1110'
qc = QuantumCircuit(4)

qc.x(1)
qc.x(2)
qc.x(3)
qc.draw("mpl")

Output of the previous code cell

qc.h(3)
qc.cp(pi / 2, 2, 3)
qc.cp(pi / 4, 1, 3)
qc.cp(pi / 8, 0, 3)

qc.h(2)
qc.cp(pi / 2, 1, 2)
qc.cp(pi / 4, 0, 2)

qc.h(1)
qc.cp(pi / 2, 0, 1)
qc.h(0)

qc.swap(0, 3)
qc.swap(1, 2)

qc.draw(output="mpl")

Output of the previous code cell

statevector = Statevector(qc)
plot_bloch_multivector(statevector)

Output of the previous code cell

3. Dasar-dasar Quantum Phase Estimation (QPE)​

Diberikan operasi uniter UU, QPE mengestimasi ΞΈ\theta dalam U∣ψ⟩=e2Ο€iθ∣ψ⟩U\vert\psi \rangle =e^{\boldsymbol{2\pi i} \theta }|\psi \rangle karena UU bersifat uniter, semua nilai eigennya memiliki norma 1.

3.1 Prosedur​

1. Persiapan​

∣ψ⟩\vert\psi\rangle berada dalam satu set register qubit. Satu set tambahan nn qubit membentuk register pencacah di mana kita akan menyimpan nilai 2nθ2^n\theta:

∣ψ0⟩=∣0βŸ©βŠ—n∣ψ⟩|\psi_0\rangle = \lvert 0 \rangle^{\otimes n} \lvert \psi \rangle

2. Superposisi​

Terapkan operasi Hadamard gate nn-bit HβŠ—nH^{\otimes n} pada register pencacah:

∣ψ1⟩=12n2(∣0⟩+∣1⟩)βŠ—n∣ψ⟩|\psi_1\rangle = {\frac {1}{2^{\frac {n}{2}}}}\left(|0\rangle +|1\rangle \right)^{\otimes n} \lvert \psi \rangle

3. Operasi Controlled Unitary​

Kita perlu memperkenalkan controlled unitary CUCU yang menerapkan operator uniter UU pada register target hanya jika bit kontrolnya adalah ∣1⟩|1\rangle. Karena UU adalah operator uniter dengan eigenvector ∣ψ⟩|\psi\rangle sedemikian sehingga U∣ψ⟩=e2Ο€iθ∣ψ⟩U|\psi \rangle =e^{\boldsymbol{2\pi i} \theta }|\psi \rangle, maka:

U2j∣ψ⟩=U2jβˆ’1U∣ψ⟩=U2jβˆ’1e2Ο€iθ∣ψ⟩=β‹―=e2Ο€i2jθ∣ψ⟩U^{2^{j}}|\psi \rangle =U^{2^{j}-1}U|\psi \rangle =U^{2^{j}-1}e^{2\pi i\theta }|\psi \rangle =\cdots =e^{2\pi i2^{j}\theta }|\psi \rangle

3.2 Contoh: T-gate QPE​

Mari kita gunakan gate TT sebagai contoh QPE dan estimasi fasenya ΞΈ\theta.

T∣1⟩=(100eiΟ€4)(01)=eiΟ€4∣1⟩T|1\rangle = \begin{pmatrix} 1 & 0\\ 0 & e^\frac{i\pi}{4}\\ \end{pmatrix} \begin{pmatrix} 0\\ 1\\ \end{pmatrix} = e^\frac{i\pi}{4}|1\rangle

Kita harapkan menemukan:

ΞΈ=18\theta = \frac{1}{8}

di mana

T∣1⟩=e2iΟ€ΞΈβˆ£1⟩T|1\rangle = e^{2i\pi\theta}|1\rangle

Kita inisialisasi ∣ψ⟩=∣1⟩\vert\psi\rangle = \vert1\rangle dari eigenvector gate TT dengan menerapkan gate XX:

qpe = QuantumCircuit(4, 3)
qpe.x(3)
qpe.draw(output="mpl")

Output of the previous code cell

Selanjutnya, kita terapkan Hadamard gate pada qubit pencacah:

for qubit in range(3):
qpe.h(qubit)
qpe.draw(output="mpl")

Output of the previous code cell

Kita lakukan operasi controlled unitary:

repetitions = 1
for counting_qubit in range(3):
for i in range(repetitions):
qpe.cp(pi / 4, counting_qubit, 3) # This is C-U
repetitions *= 2
qpe.draw(output="mpl")

Output of the previous code cell

Kita terapkan inverse quantum Fourier transformation untuk mengkonversi keadaan register pencacah, lalu ukur register pencacah:

from qiskit.circuit.library import QFT
# Apply inverse QFT
qpe.append(QFT(3, inverse=True), [0, 1, 2])
qpe.draw(output="mpl")

Output of the previous code cell

for n in range(3):
qpe.measure(n, n)
qpe.draw(output="mpl")

Output of the previous code cell

Kita bisa mensimulasikan menggunakan simulator Aer:

aer_sim = AerSimulator()
shots = 2048

pm = generate_preset_pass_manager(backend=aer_sim, optimization_level=1)
t_qpe = pm.run(qpe)

sampler = Sampler(mode=aer_sim)
job = sampler.run([t_qpe], shots=shots)
result = job.result()
answer = result[0].data.c.get_counts()

plot_histogram(answer)

Output of the previous code cell

Kita melihat kita mendapatkan satu hasil (001) dengan kepastian, yang diterjemahkan ke desimal: 1. Kita sekarang perlu membagi hasil kita (1) dengan 2n2^n untuk mendapatkan ΞΈ\theta:

ΞΈ=123=18\theta = \frac{1}{2^3} = \frac{1}{8}

Algoritma Shor memungkinkan kita memfaktorkan suatu bilangan dengan membangun Circuit dengan ΞΈ\theta yang tidak diketahui dan mendapatkan ΞΈ\theta.

3.3 Latihan​

Estimasikan ΞΈ=1/3\theta = 1/3 menggunakan 3 qubit untuk pencacahan dan sebuah qubit untuk eigenvector.

P∣1⟩=eiλ∣1⟩P|1\rangle = e^{i\lambda}|1\rangle. Karena kita ingin mengimplementasikan U∣1⟩=e2Ο€i13∣1⟩U|1\rangle = e^{2\pi i \tfrac{1}{3}}|1\rangle, kita perlu menetapkan Ξ»=2Ο€3\lambda = \tfrac{2 \pi}{3}.

##your code goes here##

Solusi latihan: ΞΈ=1/3\theta = 1/3​

# Create and set up circuit
qpe = QuantumCircuit(4, 3)

# Apply H-Gates to counting qubits:
for qubit in range(3):
qpe.h(qubit)

# Prepare our eigenstate |psi>:
qpe.x(3)

# Do the controlled-U operations:
angle = 2 * pi / 3
repetitions = 1
for counting_qubit in range(3):
for i in range(repetitions):
qpe.cp(angle, counting_qubit, 3)
repetitions *= 2

# Do the inverse QFT:
qpe.append(QFT(3, inverse=True), [0, 1, 2])

for n in range(3):
qpe.measure(n, n)

qpe.draw(output="mpl")

Output of the previous code cell

aer_sim = AerSimulator()
shots = 4096

pm = generate_preset_pass_manager(backend=aer_sim, optimization_level=1)
t_qpe = pm.run(qpe)

sampler = Sampler(mode=aer_sim)
job = sampler.run([t_qpe], shots=shots)
result = job.result()
answer = result[0].data.c.get_counts()

plot_histogram(answer)

Output of the previous code cell

4. Eksekusi menggunakan Qiskit Runtime Sampler primitive​

Kita akan menjalankan QPE menggunakan perangkat quantum nyata dan mengikuti 4 langkah pola Qiskit.

  1. Petakan masalah ke format quantum-native
  2. Optimalkan Circuit
  3. Jalankan Circuit target
  4. Proses hasil
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import Sampler
# Loading your IBM Quantum® account(s)

service = QiskitRuntimeService()

4.1 Langkah 1: Petakan masalah ke Circuit dan operator quantum​

qpe = QuantumCircuit(4, 3)
qpe.x(3)
for qubit in range(3):
qpe.h(qubit)
repetitions = 1
for counting_qubit in range(3):
for i in range(repetitions):
qpe.cp(pi / 4, counting_qubit, 3) # This is C-U
repetitions *= 2
qpe.append(QFT(3, inverse=True), [0, 1, 2])
for n in range(3):
qpe.measure(n, n)
qpe.draw(output="mpl")

Output of the previous code cell

backend = service.least_busy(simulator=False, operational=True, min_num_qubits=4)

print(backend)
<IBMBackend('ibm_strasbourg')>

4.2 Langkah 2: Optimalkan untuk hardware target​

# Transpile the circuit into basis gates executable on the hardware
pm = generate_preset_pass_manager(backend=backend, optimization_level=2)
qc_compiled = pm.run(qpe)

qc_compiled.draw("mpl", idle_wires=False)

Output of the previous code cell

4.3 Langkah 3: Jalankan di hardware target​

real_sampler = Sampler(mode=backend)
job = real_sampler.run([qc_compiled], shots=1024)
job_id = job.job_id()
print("job id:", job_id)
job id: d13p4zb5z6q00087ag00
job = service.job(job_id)  # Input your job-id between the quotations
job.status()
'DONE'
result_real = job.result()
print(result_real)
PrimitiveResult([SamplerPubResult(data=DataBin(c=BitArray(<shape=(), num_shots=1024, num_bits=3>)), metadata={'circuit_metadata': {}})], metadata={'execution': {'execution_spans': ExecutionSpans([DoubleSliceSpan(<start='2025-06-09 22:39:00', stop='2025-06-09 22:39:00', size=1024>)])}, 'version': 2})

4.4 Langkah 4: Proses hasil​

from qiskit.visualization import plot_histogram

plot_histogram(result_real[0].data.c.get_counts())

Output of the previous code cell

# See the version of Qiskit
import qiskit

qiskit.__version__
'2.0.2'
Source: IBM Quantum docs β€” updated 15 Jan 2026
English version on doQumentation β€” updated 7 Mei 2026
This translation based on the English version of approx. 27 Mar 2026