Lewati ke konten utama

Mulai menggunakan Qiskit di kelas

Untuk modul Qiskit in Classrooms ini, siswa harus memiliki lingkungan Python yang berfungsi dengan paket-paket berikut terinstal:

  • qiskit v2.1.0 atau lebih baru
  • qiskit-ibm-runtime v0.40.1 atau lebih baru
  • qiskit-aer v0.17.0 atau lebih baru
  • qiskit.visualization
  • numpy
  • pylatexenc

Untuk mengatur dan menginstal paket-paket di atas, lihat panduan Install Qiskit. Agar bisa menjalankan job di komputer kuantum sungguhan, siswa perlu membuat akun di IBM Quantumยฎ dengan mengikuti langkah-langkah di panduan Set up your IBM Cloudยฎ account.

Modul ini telah diuji dan menggunakan 2 detik waktu QPU pada prosesor Heron v2. Ini hanya perkiraan. Penggunaan aktualmu bisa berbeda.

# Added by doQumentation โ€” required packages for this notebook
!pip install -q qiskit qiskit-aer qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'

Pengantarโ€‹

Dalam modul Qiskit in the Classroom, kamu akan berkesempatan menggunakan komputer kuantum untuk menjelajahi berbagai konsep di bidang yang berdekatan dengan komputasi kuantum seperti mekanika kuantum, ilmu komputer, kimia, dan lainnya. Modul ini menjadi prasyarat untuk modul-modul lainnya โ€” modul ini memperkenalkan dasar-dasar komputasi kuantum dan cara menggunakan Qiskit untuk menjalankan sirkuit kuantum.

Pertama, kita akan memberi kamu gambaran singkat tentang cara kerja komputer klasik, lalu kita tunjukkan bagaimana konsep-konsep tersebut diadaptasi ke paradigma komputasi kuantum. Terakhir, kita tunjukkan cara menggabungkan konsep-konsep ini untuk membangun dan mengeksekusi sirkuit kuantum pertamamu.

Komputer klasikโ€‹

Kamu mungkin sudah familiar dengan dasar-dasar cara kerja komputer klasik, tapi di sini kita akan menyoroti beberapa fitur utama agar kita bisa membandingkannya dengan komputer kuantum.

Unit informasi dasar: bitโ€‹

Komputer klasik memproses informasi klasik, dan unit dasar informasi klasik adalah bit. Satu bit bisa menyimpan jawaban dari satu pertanyaan "ya/tidak". Kita biasanya merepresentasikan dua keadaan biner dari sebuah bit sebagai "0" dan "1".

Tinjauan bilangan binerโ€‹

Menggabungkan bit memungkinkan kamu menyimpan lebih banyak informasi. Misalnya, jika kamu ingin menyimpan angka dari 0 hingga 15, kamu bisa melakukannya dengan empat bit seperti berikut:

0 = 00004 = 01008 = 100012 = 1100
1 = 00015 = 01019 = 100113 = 1101
2 = 00106 = 011010 = 101014 = 1110
3 = 00117 = 011111 = 101115 = 1111

Secara umum, untuk mengonversi bilangan biner sebanyak NN bit ke angka basis-10 yang biasa kamu kenal, kalikan bit paling tidak signifikan (paling kanan) dengan 20=12^0 = 1, bit berikutnya ke kiri dengan 21=22^1 = 2, lalu berikutnya dengan 22=42^2 = 4, dan seterusnya, hingga mencapai bit paling signifikan (paling kiri), yang dikali 2Nโˆ’12^{N-1}.

Jadi, artinya NN bit bisa berada di salah satu dari 2N2^N keadaan yang berbeda.

Cek pemahamanmuโ€‹

Baca pertanyaan di bawah, pikirkan jawabanmu, lalu klik segitiga untuk melihat solusinya.

Berapa bit yang kamu butuhkan untuk merepresentasikan angka 86? Tuliskan bitstring yang mengkodekan angka ini dalam biner.

Jawaban:

Ingat, NN bit memungkinkan kamu merepresentasikan angka 00 hingga 2Nโˆ’12^N - 1, jadi menggunakan enam bit akan menghasilkan angka hingga 26โˆ’1=632^6 - 1 = 63. Itu belum cukup. Kita tambahkan satu bit lagi untuk mencapai 27โˆ’1=1272^7 - 1 = 127. Sekarang mari kita uraikan 86 ke dalam pangkat 2:

86=64+16+4+2=26ร—1+25ร—0+24ร—1+23ร—0+22ร—1+21ร—1+20ร—0=1010110\begin{aligned} 86 &= 64 + 16 + 4 + 2 \\ &= 2^6 \times 1 + 2^5 \times 0 + 2^4 \times 1 + 2^3 \times 0 + 2^2 \times 1 + 2^1 \times 1 + 2^0 \times 0 \\ &= 1010110 \end{aligned}

Operasi dasar: gateโ€‹

Sekarang, komputer perlu bisa melakukan sesuatu dengan bit agar bisa, ya, melakukan komputasi. Gate biner adalah operasi yang membentuk blok bangunan fundamental dari semua algoritma dan kode yang lebih kompleks.

Gate satu bit:โ€‹

NOTโ€‹

Jika kamu hanya punya satu bit, hanya ada satu cara untuk mengubah keadaannya: membalik keadaan dari 0 ke 1 atau dari 1 ke 0. Kita menyebut ini Gate "NOT". Efek gate ini โ€” dan gate-gate lain yang akan kita bahas di bawah โ€” dapat direpresentasikan dalam apa yang disebut "tabel kebenaran," dengan kolom untuk keadaan input dan output dari qubit. Tabel kebenaran untuk Gate NOT adalah:

InputOutput
01
10

Gate multi-bit:โ€‹

ANDโ€‹

AND adalah gate dua bit yang mengambil dua bit input dan menghasilkan satu bit output. Menghasilkan 1 jika kedua bit input adalah 1, dan 0 jika sebaliknya:

InputOutput
000
010
100
111

ORโ€‹

OR adalah gate dua bit lain dengan satu bit output. Menghasilkan 1 jika salah satu bit adalah 1:

InputOutput
000
011
101
111

XORโ€‹

XOR singkatan dari "exclusive OR" dan mirip dengan Gate OR, tapi menghasilkan 1 jika hanya satu dari bit input yang bernilai 1. Menghasilkan 0 jika keduanya bernilai 1 atau keduanya bernilai 0:

InputOutput
000
011
101
110

Pengukuran:โ€‹

Biasanya, ketika belajar tentang komputasi klasik, tidak banyak perhatian yang diberikan pada proses membaca keadaan bit. Ini karena tidak terlalu rumit dari sudut pandang konseptual. Kamu bisa mengukur bit kapan saja sebelum, selama, atau setelah komputasi, dan itu tidak mempengaruhi hasilnya. Hal ini tidak berlaku dalam komputasi kuantum, seperti yang akan kita bahas di bawah.

Circuit:โ€‹

Dengan menggabungkan gate-gate di atas, kamu bisa melakukan segala jenis operasi yang diinginkan pada komputer. Mari kita ambil contoh sederhana: Menggunakan gate AND dan XOR, kamu bisa membangun sirkuit half-adder, yang menghitung jumlah dua bit. Ini direpresentasikan dalam diagram sirkuit logika, di mana kabel-kabel merepresentasikan bit dan gate-gate yang beroperasi pada bit ditampilkan sebagai simbol pada kabel yang sesuai:

Diagram sirkuit klasik untuk sirkuit half-adder. Gate XOR menghasilkan bit output Sum dan gate AND menghasilkan bit output Carry.

Jadi, dua bit disalin dan dimasukkan ke gate AND dan gate XOR. Hasil dari gate XOR adalah "bit jumlah" (S), yang tetap berada di posisi satuan bilangan biner, dan hasil dari gate AND adalah "bit carry" (C), yaitu nilai digit paling signifikan berikutnya dalam bilangan biner. Berikut tabel kebenarannya:

AABBSum (AโŠ•BA \oplus B)Carry (AโˆงBA \wedge B)
0000
0110
1010
1101

Cek pemahamanmuโ€‹

Baca pertanyaan di bawah, pikirkan jawabanmu, lalu klik segitiga untuk melihat solusinya.

Verifikasi bahwa tabel kebenaran di atas menghasilkan solusi yang benar untuk sirkuit adder. Yaitu, untuk masing-masing dari empat pilihan A dan B, verifikasi bahwa A+B=S+2ร—CA+B=S+2 \times C.

Jawaban:

0+0=0+0=0ย โœ“0+1=1+0=1ย โœ“1+0=1+0=1ย โœ“1+1=0+2=2ย โœ“\begin{aligned} 0+0 &= 0+0 = 0 ~\checkmark \\ 0+1 &= 1+0 = 1 ~\checkmark \\ 1+0 &= 1+0 = 1 ~\checkmark \\ 1+1 &= 0+2 = 2 ~\checkmark \\ \end{aligned}

Komputer kuantumโ€‹

Bit โ†’\rightarrow qubitโ€‹

Sama seperti bit adalah unit dasar informasi klasik, bit kuantum, atau "qubit," adalah unit dasar informasi kuantum. Seperti bit klasik, keadaan sebuah Qubit bisa berupa 0 atau 1, yang biasanya kita notasikan sebagai โˆฃ0โŸฉ\vert 0\rangle dan โˆฃ1โŸฉ\vert 1\rangle. Tapi tidak seperti bit klasik, bit kuantum juga bisa berada dalam superposisi dari kedua keadaan โˆฃ0โŸฉ\vert 0\rangle dan โˆฃ1โŸฉ\vert 1\rangle secara bersamaan. Secara umum, sebuah Qubit bisa berada dalam keadaan โˆฃฯˆโŸฉ\vert \psi\rangle dengan bentuk:

โˆฃฯˆโŸฉ=c0โˆฃ0โŸฉ+c1โˆฃ1โŸฉ\vert \psi\rangle = c_0 \vert 0\rangle + c_1 \vert 1\rangle

di mana c0c_0 dan c1c_1 adalah amplitudo kompleks dengan โˆฃc0โˆฃ2+โˆฃc1โˆฃ2=1\vert c_0 \vert ^2+\vert c_1\vert ^2=1.

Fase kuantumโ€‹

Karena c0c_0 dan c1c_1 adalah bilangan kompleks, masing-masing bisa ditulis sebagai ci=โˆฃciโˆฃeiฯ•ic_i = \vert c_i\vert e^{i\phi_i} di mana ฯ•i\phi_i disebut fase. Jika kita mengalikan seluruh keadaan dengan faktor fase keseluruhan yang sama, tidak ada yang berubah secara fisik โ€” ini disebut fase global, dan tidak memiliki konsekuensi yang bisa diamati.

Untuk itu, konvensinya adalah "memfaktorkan" eiฯ•0e^{i\phi_0}, sehingga:

โˆฃฯˆโŸฉ=โˆฃc0โˆฃโˆฃ0โŸฉ+โˆฃc1โˆฃeiฯ•โˆฃ1โŸฉ\vert \psi\rangle = \vert c_0\vert \vert 0\rangle + \vert c_1\vert e^{i\phi}\vert 1\rangle

di mana ฯ•=ฯ•1โˆ’ฯ•0\phi = \phi_1-\phi_0 adalah fase relatif dari keadaan kuantum, yang memang memiliki konsekuensi yang bisa diamati.

Fase ini memainkan peran yang sangat penting dalam komputasi kuantum, dan kamu akan menjelajahi berbagai konsekuensinya dalam modul Qiskit in the Classroom berikutnya.

Banyak qubitโ€‹

Sementara keadaan beberapa bit bisa diekspresikan secara sederhana sebagai string 0 dan 1, keadaan beberapa qubit menjadi sedikit lebih rumit karena prinsip superposisi dan entanglement.

Ingat bahwa NN bit bisa berada di salah satu dari 2N2^N keadaan yang mungkin mulai dari bilangan biner 000...000 hingga 111...111. Tapi sekarang, karena prinsip superposisi, NN qubit bisa berada dalam superposisi dari semua keadaan tersebut sekaligus!

Ini bisa diekspresikan sebagai

ฯˆN=โˆ‘i=02Nโˆ’1ciโˆฃiโŸฉ\psi_N = \sum_{i=0}^{2^N-1} c_i \vert i\rangle

di mana, seperti dalam kasus klasik, keadaan โˆฃiโŸฉ\vert i\rangle bersesuaian dengan keadaan di mana setiap qubit berada dalam kombinasi 0 dan 1 yang tepat untuk menghasilkan bilangan biner ii. Ini dikenal sebagai "keadaan basis komputasi" dari sistem kuantum. Misalnya, keadaan tiga qubit bisa ditulis sebagai superposisi dari delapan keadaan basis komputasinya:

ฯˆ3=c0โˆฃ000โŸฉ+c1โˆฃ001โŸฉ+c2โˆฃ010โŸฉ+c3โˆฃ011โŸฉ+c4โˆฃ100โŸฉ+c5โˆฃ101โŸฉ+c6โˆฃ110โŸฉ+c7โˆฃ111โŸฉ\psi_3 = c_0 \vert 000\rangle + c_1 \vert 001\rangle + c_2 \vert 010\rangle + c_3 \vert 011\rangle + c_4 \vert 100\rangle + c_5 \vert 101\rangle + c_6 \vert 110\rangle + c_7 \vert 111\rangle

Setiap qubit dalam sistem ditandai dengan indeks 00 hingga Nโˆ’1N-1. Konvensinya adalah membaca keadaan qubit dari kanan ke kiri, sehingga keadaan qubit 00 adalah yang paling kanan dan keadaan qubit Nโˆ’1N-1 adalah yang paling kiri. Ini dikenal sebagai notasi "little-endian," dan mungkin terasa tidak intuitif pada awalnya karena kita terbiasa membaca dari kiri ke kanan.

Cek pemahamanmuโ€‹

Baca pertanyaan di bawah, pikirkan jawabanmu, lalu klik segitiga untuk melihat solusinya.

Pada pandangan pertama, mungkin terasa tidak intuitif untuk mengurutkan qubit dari kanan ke kiri seperti dalam notasi little-endian, tapi sebenarnya ini sangat logis! Jelaskan mengapa. (Ingat diskusi kita di atas tentang konversi bilangan biner ke basis-10.)

Jawaban:

Jika kita mengurutkan qubit dari kanan ke kiri, sehingga qubit 0 paling jauh ke kanan dan qubit N-1 paling jauh ke kiri, maka logis untuk mengasosiasikan qubit 00 dengan bit paling tidak signifikan, yang dikalikan dengan 202^0 dan qubit Nโˆ’1N-1 dengan bit paling signifikan, yang dikalikan dengan 2Nโˆ’12^{N-1}.

Entanglementโ€‹

Seperti yang kita sebutkan sebelumnya, fitur kunci lain dari qubit adalah bahwa mereka bisa terjerat satu sama lain. Mari kita ambil contoh keadaan dua qubit, di mana c0=c3=12c_0 = c_3 = \frac{1}{\sqrt{2}} dan c1=c2=0c_1 = c_2 = 0:

โˆฃฯˆโŸฉ=12(โˆฃ00โŸฉ+โˆฃ11โŸฉ)\vert \psi\rangle = \frac{1}{\sqrt{2}}(\vert 00\rangle + \vert 11\rangle)

Jadi, keadaan qubit 0 bisa berupa โˆฃ0โŸฉ\vert 0\rangle atau โˆฃ1โŸฉ\vert 1\rangle dengan probabilitas yang sama, begitu pula dengan keadaan qubit 1. Tapi probabilitas-probabilitas ini tidak lagi saling independen. Jika kita menemukan keadaan qubit 0 adalah โˆฃ0โŸฉ\vert 0\rangle, maka kita tahu bahwa qubit 1 juga akan berada dalam โˆฃ0โŸฉ\vert 0\rangle. Ini berlaku tidak peduli seberapa jauh satu sama lain, itulah mengapa tindakan mengukur keadaan yang terjerat terkadang disebut sebagai "aksi seram dari jarak jauh."

Entanglement juga bisa mengambil bentuk lain. Misalnya, keadaan

โˆฃฯˆโŸฉ=12(โˆฃ01โŸฉ+โˆฃ10โŸฉ)\vert \psi\rangle = \frac{1}{\sqrt{2}}(\vert 01\rangle + \vert 10\rangle)

menghasilkan hasil yang berlawanan setiap saat: jika satu qubit diukur โˆฃ0โŸฉ\vert 0\rangle, yang lain dijamin ditemukan dalam keadaan โˆฃ1โŸฉ\vert 1\rangle.

Cek pemahamanmuโ€‹

Baca pertanyaan di bawah, pikirkan jawabanmu, lalu klik segitiga untuk melihat solusinya.

Apakah keadaan โˆฃฯˆโŸฉ=โˆฃ11โŸฉ\vert \psi\rangle = \vert 11\rangle terjerat? Mengapa atau mengapa tidak?

Jawaban:

Ini tidak terjerat. Meskipun hasilnya selalu sama saat kamu mengukur kedua qubit, ini hanya karena setiap qubit selalu berada dalam keadaan โˆฃ1โŸฉ\vert 1\rangle. Hasil pengukuran satu qubit sebenarnya tidak bergantung pada yang lain โ€” keduanya hanya selalu โˆฃ1โŸฉ\vert 1\rangle.

Secara umum, jika kamu bisa mendeskripsikan keadaan setiap qubit secara terpisah lalu mengalikannya seperti ini:

โˆฃฯˆโŸฉ=โˆฃฯˆ1โŸฉโˆฃฯˆ0โŸฉ\vert \psi\rangle = \vert \psi_1\rangle \vert \psi_0\rangle

Maka ini dikenal sebagai "keadaan produk" dan tidak terjerat.

Notasi vektorโ€‹

Seringkali berguna untuk menggunakan vektor dan matriks untuk melihat bagaimana keadaan kuantum berubah di bawah operasi yang berbeda. Dalam representasi ini, keadaan kuantum kita akan berupa vektor, dan gate kuantum kita (dibahas di bagian berikutnya) akan berupa matriks yang mentransformasi vektor.

Untuk satu qubit, bentuk vektor dari keadaan dipilih sebagai: โˆฃ0โŸฉ=(10)\vert 0\rangle = \begin{pmatrix}1 \\ 0\end{pmatrix} โˆฃ1โŸฉ=(01)\vert 1\rangle = \begin{pmatrix}0 \\ 1\end{pmatrix} Dengan cara ini, keadaan sembarang โˆฃฯˆโŸฉ=aโˆฃ0โŸฉ+bโˆฃ1โŸฉ\vert \psi\rangle = a\vert 0\rangle+b\vert 1\rangle bisa ditulis sebagai โˆฃฯˆโŸฉ=(ab)\vert \psi\rangle =\begin{pmatrix}a \\ b\end{pmatrix}

Untuk keadaan nn-qubit umum, kita akan membutuhkan vektor berdimensi 2n2^n, dengan keadaan basis yang diurutkan seperti yang mungkin kamu harapkan, dalam nilai biner yang meningkat:

โˆฃ0โ€ฆ000โŸฉ=(100โ‹ฎ0),โˆฃ0โ€ฆ001โŸฉ=โˆฃ1โ€ฆ110โŸฉ=(0โ‹ฎ010),โˆฃ1โ€ฆ111โŸฉ=(0โ‹ฎ001)\vert 0 \dots 000\rangle = \begin{pmatrix}1 \\ 0 \\ 0 \\ \vdots \\ 0\end{pmatrix}, \vert 0 \dots 001 \rangle = \vert 1 \dots 110\rangle = \begin{pmatrix}0 \\ \vdots \\ 0 \\ 1 \\ 0\end{pmatrix}, \vert 1 \dots 111 \rangle = \begin{pmatrix}0 \\ \vdots \\ 0 \\ 0\\ 1\end{pmatrix}

Dengan pilihan notasi vektor ini, kita bisa memperkenalkan gate kuantum yang dibutuhkan, efeknya pada keadaan kuantum, dan bentuk matriksnya.

Cek pemahamanmuโ€‹

Baca pertanyaan di bawah, pikirkan jawabanmu, lalu klik segitiga untuk melihat solusinya.

Ada empat keadaan basis komputasi untuk sistem dua qubit. Tuliskan masing-masing dalam notasi ket dan vektor.

Jawaban:

โˆฃ00โŸฉ=(1000),โˆฃ01โŸฉ=(0100),โ€ฆ,โˆฃ10โŸฉ=(0010),โˆฃ11โŸฉ=(0001)\vert 00\rangle = \begin{pmatrix}1 \\ 0 \\ 0 \\ 0\end{pmatrix}, \vert 01 \rangle = \begin{pmatrix}0 \\ 1 \\ 0 \\ 0\end{pmatrix}, \dots, \vert 10\rangle = \begin{pmatrix}0 \\ 0 \\ 1 \\ 0\end{pmatrix}, \vert 11 \rangle = \begin{pmatrix}0 \\ 0 \\ 0\\ 1\end{pmatrix}

Gate โ†’\rightarrow gate kuantumโ€‹

Sama seperti gate klasik seperti NOT, AND, OR, dan XOR bisa digabungkan untuk membangun sirkuit klasik sembarang, gate kuantum memainkan peran yang sama dalam komputasi kuantum. Karena qubit memiliki fitur mekanika kuantum tambahan, gate kuantum pun menjadi lebih kaya. Meskipun kita masih bisa mendeskripsikan aksinya pada keadaan basis โˆฃ0โŸฉ|0\rangle dan โˆฃ1โŸฉ|1\rangle dengan tabel kebenaran, ini tidak menangkap gambaran keseluruhan. Untuk gate kuantum, seringkali lebih alami menggunakan representasi matriks, karena gate juga bekerja pada superposisi keadaan basis.

Di bawah ini kita akan memperkenalkan gate kuantum yang paling umum dan bagaimana mereka mentransformasi qubit yang berinteraksi dengannya. Jika berlaku, kita akan menghubungkannya kembali ke gate klasik yang sudah familiar.

Gate satu qubitโ€‹

Gate XX: Ini adalah padanan kuantum dari operasi NOT. Tabel kebenarannya terlihat persis seperti Gate NOT klasik:

InputOutput
โˆฃ0โŸฉ\vert 0\rangleโˆฃ1โŸฉ\vert 1\rangle
โˆฃ1โŸฉ\vert 1\rangleโˆฃ0โŸฉ\vert 0\rangle

Dan representasi matriksnya:

X=(0110)X=\begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}

Di Qiskit, membuat Circuit dengan Gate XX terlihat seperti ini:

from qiskit import QuantumCircuit

qc = QuantumCircuit(1)
qc.x(0)
qc.draw("mpl")

Output of the previous code cell

Dalam diagram Circuit yang sangat sederhana ini, qubit direpresentasikan oleh sebuah kabel, garis horizontal hitam, dan gate muncul sebagai kotak pada kabel tersebut.

Gate Hadamard: Membuat keadaan superposisi. Tabel kebenaran:

InputOutput
โˆฃ0โŸฉ\vert 0\rangle12(โˆฃ0โŸฉ+โˆฃ1โŸฉ)\frac{1}{\sqrt{2}}\left(\vert 0\rangle+\vert 1\rangle\right)
โˆฃ1โŸฉ\vert 1\rangle12(โˆฃ0โŸฉโˆ’โˆฃ1โŸฉ)\frac{1}{\sqrt{2}}\left(\vert 0\rangle-\vert 1\rangle\right)

Representasi matriks: H=12(111โˆ’1)H=\frac{1}{\sqrt{2}}\begin{pmatrix} 1 & 1 \\ 1 & -1 \end{pmatrix}

Circuit dengan Gate Hadamard dibuat sebagai berikut:

from qiskit import QuantumCircuit

qc = QuantumCircuit(1)
qc.h(0)
qc.draw("mpl")

Output of the previous code cell

Gate ZZ: Menambahkan pergeseran fase ฮ”ฯ•=ฯ€\Delta \phi = \pi ke keadaan โˆฃ1โŸฉ|1\rangle:

InputOutput
โˆฃ0โŸฉ\vert 0\rangleโˆฃ0โŸฉ\vert 0\rangle
โˆฃ1โŸฉ\vert 1\rangleโˆ’โˆฃ1โŸฉ-\vert 1\rangle

Z=(100โˆ’1)Z=\begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}

Di Qiskit, membuat Circuit dengan Gate ZZ terlihat seperti ini:

qc = QuantumCircuit(1)
qc.z(0)
qc.draw("mpl")

Output of the previous code cell

Gate TT: Menambahkan pergeseran fase ฮ”ฯ•=ฯ€/4\Delta \phi = \pi/4 ke keadaan โˆฃ1โŸฉ|1\rangle:

InputOutput
โˆฃ0โŸฉ\vert 0\rangleโˆฃ0โŸฉ\vert 0\rangle
โˆฃ1โŸฉ\vert 1\rangleeiฯ€/4โˆฃ1โŸฉe^{i\pi/4}\vert 1\rangle

T=(100eiฯ€/4)T=\begin{pmatrix} 1 & 0 \\ 0 & e^{i\pi/4} \end{pmatrix}

Di Qiskit, membuat Circuit dengan Gate TT terlihat seperti ini:

qc = QuantumCircuit(1)
qc.t(0)
qc.draw("mpl")

Output of the previous code cell

Gate multi-qubitโ€‹

Gate dua qubit bisa menyerupai gate dua bit klasik, tapi dengan satu catatan penting: semua gate kuantum harus reversibel. Dalam istilah aljabar linear, artinya mereka direpresentasikan oleh matriks uniter. Dengan demikian, dua qubit input selalu dipetakan ke dua qubit output, dan operasi tersebut, pada prinsipnya, bisa dibalik. Ini bertentangan dengan gate klasik yang kita lihat di atas seperti AND atau OR, yang kehilangan informasi dan tidak dapat dibalik โ€” diberikan output, kamu tidak dapat menentukan input secara unik.

Gate CNOT (Controlled-NOT): Dua qubit input disebut qubit "kontrol" dan "target". Qubit kontrol tetap tidak berubah, tapi keadaannya menentukan apa yang terjadi pada qubit target. Jika qubit kontrol berada dalam keadaan โˆฃ1โŸฉ\vert 1\rangle, maka Gate XX diterapkan pada target; jika keadaan qubit kontrol adalah โˆฃ0โŸฉ\vert 0\rangle, maka tidak ada perubahan yang dibuat. Dalam notasi di bawah, asumsikan qubit AA (qubit paling kanan) adalah kontrol, dan qubit BB (qubit paling kiri) adalah target. Di bawah, notasi yang digunakan adalah CNOT(qcontrol,qtarget)โˆฃBAโŸฉ.CNOT(q_{control},q_{target})\vert BA\rangle.

CNOT(A,B)โˆฃBAโŸฉinput=โˆฃBAโŸฉoutputCNOT(A,B)\vert BA\rangle_{input} = \vert BA\rangle_{output}

InputOutput
โˆฃ00โŸฉ\vert 00\rangleโˆฃ00โŸฉ\vert 00\rangle
โˆฃ01โŸฉ\vert 01\rangleโˆฃ11โŸฉ\vert 11\rangle
โˆฃ10โŸฉ\vert 10\rangleโˆฃ10โŸฉ\vert 10\rangle
โˆฃ11โŸฉ\vert 11\rangleโˆฃ01โŸฉ\vert 01\rangle

Jadi, matriks yang merepresentasikan aksi ini adalah:

CNOT=(1000000100100100)CNOT=\begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0\end{pmatrix}

qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw("mpl")

Output of the previous code cell

Ini adalah diagram Circuit pertama yang kita lihat dengan dua qubit, yang direpresentasikan oleh dua kabel. Gate CNOT diimplementasikan di antara dua qubit, dengan q0q_0 sebagai kontrol dan q1q_1 sebagai target.

Cek pemahamanmuโ€‹

Baca pertanyaan di bawah ini, pikirkan jawabanmu, lalu klik segitiga untuk melihat solusinya.

Sebagian besar Gate memiliki bentuk matriks yang sama di Qiskit seperti di tempat lain. Tapi Gate CNOT bekerja pada dua Qubit, sehingga tiba-tiba konvensi pengurutan Qubit menjadi masalah. Teks yang mengurutkan Qubit โˆฃq0,q1,...โŸฉ\vert q_0,q_1,...\rangle akan menunjukkan bentuk matriks yang berbeda untuk Gate CNOT mereka. Verifikasi dengan perkalian matriks eksplisit bahwa matriks CNOT di atas memiliki aksi yang benar pada keadaan โˆฃ01โŸฉ.\vert 01\rangle.

Jawaban:

CNOTโˆฃ01โŸฉ=(1000000100100100)(0100)=(0001)=โˆฃ11โŸฉCNOT\vert 01\rangle =\begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0\end{pmatrix}\begin{pmatrix}0 \\ 1 \\ 0 \\0\end{pmatrix} = \begin{pmatrix}0 \\ 0 \\ 0 \\1\end{pmatrix} = \vert 11\rangle

Gate SWAP: Gate ini menukar keadaan dua Qubit. Tabel kebenaran:

InputOutput
โˆฃ00โŸฉ\vert 00\rangleโˆฃ00โŸฉ\vert 00\rangle
โˆฃ01โŸฉ\vert 01\rangleโˆฃ10โŸฉ\vert 10\rangle
โˆฃ10โŸฉ\vert 10\rangleโˆฃ01โŸฉ\vert 01\rangle
โˆฃ11โŸฉ\vert 11\rangleโˆฃ11โŸฉ\vert 11\rangle

Jadi, matriks yang merepresentasikan aksi ini adalah:

SWAP=(1000001001000001)SWAP=\begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1\end{pmatrix}

qc = QuantumCircuit(2)
qc.swap(0, 1)
qc.draw("mpl")

Output of the previous code cell

Gate SWAP sebenarnya bisa dibangun dari tiga CNOT. Untuk melihat caranya, kita bisa decompose() Gate tersebut dengan Qiskit:

qc = QuantumCircuit(2)
qc.swap(0, 1)
qc.decompose().draw("mpl")

Output of the previous code cell

Di sini kita melihat untuk pertama kalinya bagaimana beberapa Gate ditampilkan dalam diagram Circuit. Kita membacanya dari kiri ke kanan, jadi Gate paling kiri diterapkan pertama.

Cek pemahamanmuโ€‹

Baca pertanyaan di bawah ini, pikirkan jawabanmu, lalu klik segitiga untuk melihat solusinya.

Verifikasi bahwa kombinasi CNOT di atas menghasilkan Gate SWAP. Kamu bisa melakukannya dengan perkalian matriks atau metode lain apa pun.

Jawaban:

Dengan perkalian matriks:

(1000000100100100)(1000010000010010)(1000000100100100)=(1000001001000001)=SWAPย โœ“\begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0\end{pmatrix} \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0\end{pmatrix} \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0\end{pmatrix} = \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1\end{pmatrix} = SWAP ~\checkmark

Menggunakan tabel kebenaran untuk melihat bagaimana keadaan berubah dengan setiap CNOT. Pada kolom terakhir, keadaan harus setara dengan kolom "output" dari tabel kebenaran SWAP:

InputCNOT(A,B)CNOT(B,A)CNOT(A,B)
โˆฃ00โŸฉ\vert 00\rangleโˆฃ00โŸฉ\vert 00\rangleโˆฃ00โŸฉ\vert 00\rangleโˆฃ00โŸฉโœ“\vert 00\rangle \checkmark
โˆฃ01โŸฉ\vert 01\rangleโˆฃ11โŸฉ\vert 11\rangleโˆฃ10โŸฉ\vert 10\rangleโˆฃ10โŸฉโœ“\vert 10\rangle \checkmark
โˆฃ10โŸฉ\vert 10\rangleโˆฃ10โŸฉ\vert 10\rangleโˆฃ11โŸฉ\vert 11\rangleโˆฃ01โŸฉโœ“\vert 01\rangle \checkmark
โˆฃ11โŸฉ\vert 11\rangleโˆฃ01โŸฉ\vert 01\rangleโˆฃ01โŸฉ\vert 01\rangleโˆฃ11โŸฉโœ“\vert 11\rangle \checkmark

Gate Toffoli (atau "controlled-controlled-NOT" (CCNOT)): Ini adalah Gate tiga Qubit. Nama "controlled-controlled-NOT" mungkin sudah memberi tahu kamu cara kerjanya: ada dua Qubit kontrol dan satu Qubit target, dan keadaan Qubit target dibalik hanya jika kedua Qubit kontrol berada dalam keadaan โˆฃ1โŸฉ\vert 1\rangle. Kita menggunakan konvensi pengurutan yang sama seperti yang kita gunakan dengan CNOT:

CCNOT(ControlA,ControlB,TargetC)โˆฃCBAโŸฉCCNOT(Control A, Control B, Target C)\vert CBA\rangle

Jadi tabel kebenarannya adalah:

InputOutput
โˆฃ000โŸฉ\vert 000\rangleโˆฃ000โŸฉ\vert 000\rangle
โˆฃ001โŸฉ\vert 001\rangleโˆฃ001โŸฉ\vert 001\rangle
โˆฃ010โŸฉ\vert 010\rangleโˆฃ010โŸฉ\vert 010\rangle
โˆฃ011โŸฉ\vert 011\rangleโˆฃ111โŸฉ\vert 111\rangle
โˆฃ100โŸฉ\vert 100\rangleโˆฃ100โŸฉ\vert 100\rangle
โˆฃ101โŸฉ\vert 101\rangleโˆฃ101โŸฉ\vert 101\rangle
โˆฃ110โŸฉ\vert 110\rangleโˆฃ110โŸฉ\vert 110\rangle
โˆฃ111โŸฉ\vert 111\rangleโˆฃ011โŸฉ\vert 011\rangle

Dan matriks yang merepresentasikan aksi ini adalah:

CCNOT=(1000000001000000001000000000000100001000000001000000001000010000)CCNOT=\begin{pmatrix} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\0 & 1 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0\end{pmatrix}
qc = QuantumCircuit(3)
qc.ccx(0, 1, 2)
qc.draw("mpl")

Output of the previous code cell

Gate Toffoli juga bisa didekomposisi menjadi CNOT, bersama dengan beberapa Gate lainnya. Namun, ini jauh lebih rumit daripada dekomposisi Gate SWAP, sehingga akan dibiarkan sebagai latihan opsional di akhir modul untuk mengeksplorasi dan memverifikasi dekomposisi ini.

Pengukuranโ€‹

Pengukuran memainkan peran khusus dalam komputasi kuantum โ€” peran yang tidak memiliki analog dalam komputasi klasik. Sementara dalam komputasi klasik, kamu bisa memeriksa bit-bit kamu di titik mana pun yang kamu pilih selama suatu algoritma, dalam komputasi kuantum, kamu harus sangat selektif tentang kapan harus melihat Qubit-mu karena pengukuran meruntuhkan keadaannya dan menghancurkan superposisi yang memberi Qubit kompleksitas komputasinya.

Secara khusus, diberikan keadaan kuantum NN-bit โˆฃฯˆโŸฉ=โˆ‘i=02Nโˆ’1ciโˆฃiโŸฉ\vert \psi\rangle = \sum_{i=0}^{2^N-1} c_i \vert i\rangle, sebuah pengukuran akan meruntuhkan keadaan ke salah satu fungsi basis โˆฃiโŸฉ\vert i\rangle dengan probabilitas sama dengan โˆฃciโˆฃ2\vert c_i\vert ^2.

Tapi efek destruktif dari pengukuran ini tidak selalu menjadi hambatan. Ini sebenarnya adalah sumber daya kunci dalam algoritma dan protokol tertentu, seperti teleportasi kuantum dan distribusi kunci kuantum.

Di Qiskit, ketika pengukuran dilakukan, pengukuran tersebut dikirim ke register klasik di mana disimpan sebagai bit klasik. Membuat Circuit dengan pengukuran terlihat seperti ini:

qc = QuantumCircuit(
1, 1
) # the second number is the number of classical bits in the circuit
qc.measure(0, 0)
qc.draw("mpl")

Output of the previous code cell

Circuitโ€‹

Sekarang kita tahu cara kerja Qubit, Gate, dan pengukuran, mari kita buat dan jalankan Circuit kuantum kita sendiri! Untuk ini, kita perlu mengenalkan kamu pada alur kerja yang berguna yang disebut Qiskit patterns.

Kerangka Qiskit patternsโ€‹

Kerangka Qiskit patterns adalah prosedur umum untuk mendekati dan memecahkan masalah dengan komputer kuantum. Ini terdiri dari empat langkah:

  1. Pemetaan masalah kita ke Circuit kuantum dan operator
  2. Optimasi Circuit untuk hardware target
  3. Eksekusi pada hardware target
  4. Pasca-pemrosesan hasil kita

Untuk mengilustrasikan langkah-langkah ini, kita akan mengimplementasikan versi kuantum dari Circuit half-adder yang dibahas di atas.

1. Pemetaanโ€‹

Circuit adder klasik menggunakan Gate XOR dan AND untuk menghitung bit sum dan carry, masing-masing. Kita bisa mengadaptasi Gate-Gate ini ke konteks kuantum untuk membuat quantum half adder. Pertama, ingat bahwa Gate kuantum bersifat reversibel, kita tidak bisa begitu saja menimpa input-nya. Sebaliknya, kita memperkenalkan dua Qubit helper yang diinisialisasi ke โˆฃ0โŸฉ\vert 0\rangle untuk menyimpan output sum dan carry. Jadi, keadaan kuantum penuh kita akan terdiri dari Qubit AA dan BB, serta Qubit sum dan carry, yang akan kita beri label SS dan CC:

โˆฃฯˆโŸฉ=โˆฃCSBAโŸฉ\vert \psi\rangle = \vert C S B A\rangle

Sekarang, kita perlu Gate kuantum yang menyelesaikan apa yang Gate XOR dan AND lakukan dalam Circuit klasik.

Sum:

Untuk XOR, kita menerapkan dua CNOT, masing-masing dengan Qubit kontrol AA dan BB serta Qubit target SS untuk keduanya. Jika AA dan BB berbeda, maka salah satu Gate CNOT akan membalik SS ke keadaan โˆฃ1โŸฉ\vert 1\rangle. Jika AA dan BB keduanya โˆฃ0โŸฉ\vert 0\rangle, maka tidak ada yang terjadi pada SS dan tetap dalam keadaan โˆฃ0โŸฉ\vert 0\rangle. Jika AA dan BB keduanya โˆฃ1โŸฉ\vert 1\rangle, maka keadaan SS akan dibalik dua kali, membawanya kembali ke keadaan โˆฃ0โŸฉ\vert 0\rangle.

Carry:

Untuk bit carry, kita perlu sesuatu yang bekerja seperti Gate AND klasik.

Cek pemahamanmuโ€‹

Baca pertanyaan di bawah ini, pikirkan jawabanmu, lalu klik segitiga untuk melihat solusinya.

Lihat kembali Gate-Gate yang telah kita diskusikan untuk melihat apakah kamu bisa menebak Gate kuantum mana yang akan kita gunakan sebagai pengganti Gate AND klasik:

Jawaban:

Itu adalah Gate Toffoli! Ingat, Gate Toffoli, atau controlled-controlled-NOT, membalik keadaan target jika dan hanya jika Qubit kontrol 0 DAN Qubit kontrol 1 keduanya โˆฃ1โŸฉ\vert 1\rangle. Jadi, jika Qubit target dimulai dalam keadaan โˆฃ0โŸฉ\vert 0\rangle, maka aksinya sama dengan Gate AND.

Jadi, sekarang kita memiliki semua bahan yang kita butuhkan untuk membuat Circuit kuantum:

# qubits: a, b, sum, carry
qc = QuantumCircuit(4)

# Choose values for A and B:
a = 0
b = 0

# Prepare A and B qubits according to selected values:
if a:
qc.x(0)
if b:
qc.x(1)

# XOR (sum) into qubit 2
qc.cx(0, 2)
qc.cx(1, 2)

# AND (carry) into qubit 3
qc.ccx(0, 1, 3) # a AND b

# measure
qc.measure_all()

qc.draw("mpl")

Output of the previous code cell

Di atas adalah diagram Circuit untuk Circuit quantum half-adder. Seperti yang disebutkan sebelumnya, kabel mewakili Qubit 00 hingga 33 yang diurutkan dari atas ke bawah, dan register bit klasik adalah kabel berlapis ganda di bagian bawah. Kemudian, membaca dari kiri ke kanan, kita melihat bagaimana Gate diterapkan pada setiap Qubit dengan melihat di mana kotak-kotak muncul pada kabel yang sesuai. Terakhir, pengukuran ditampilkan di bagian akhir. Pengukuran meruntuhkan keadaan Qubit menjadi nilai 00 atau 11 yang pasti, dan hasilnya dikirim ke register klasik.

Satu hal yang perlu diperhatikan: meskipun diagram Circuit digambar dari kiri ke kanan, ketika menulis ekspresi matriks yang sesuai kita harus membacanya dari kanan ke kiri. Ini karena dalam perkalian matriks, operator yang paling dekat dengan vektor keadaan (yang paling kanan) bertindak pertama. Jadi, misalnya, Circuit di atas (mengabaikan pengukuran) akan ditulis sebagai:

CCNOT(q0,q1,q3)CNOT(q1,q2)CNOT(q0,q2)โˆฃq3q2q1q0โŸฉCCNOT(q_0,q_1,q_3)CNOT(q_1, q_2)CNOT(q_0,q_2)\vert q_3 q_2 q_1 q_0\rangle

2. Optimasi:โ€‹

Selanjutnya, kita perlu mengoptimalkan Circuit untuk dijalankan pada hardware kuantum. Optimasi ini dilakukan melalui Transpiler, yang menerjemahkan Circuit abstrak yang ditunjukkan di atas menjadi instruksi yang akan dipahami oleh komputer kuantum. Ini menetapkan Qubit logis di atas ke Qubit fisik nyata pada prosesor dan menulis ulang Gate dalam hal set Gate native-nya sendiri yang telah dioptimalkan untuk dijalankan pada komputer kuantum. Akhirnya, Transpiler juga mengimplementasikan sesuatu yang disebut "penekanan dan mitigasi kesalahan" untuk mencoba meminimalkan efek kesalahan pada hasil. Ini tidak terlalu penting untuk Circuit kita yang sangat sederhana, tapi jika kamu melanjutkan perjalanan komputasi kuantum untuk menjalankan Circuit yang lebih rumit, kamu akan segera melihat nilai penekanan dan mitigasi kesalahan. Jika kamu ingin mempelajari lebih lanjut tentang ini, lihat kursus Olivia Lane, Quantum Computing in Practice.

Pertama, kita memuat paket yang diperlukan untuk berkomunikasi dengan komputer kuantum IBMยฎ dan memilih Backend untuk dijalankan. Kita bisa memilih Backend yang paling tidak sibuk, atau memilih Backend tertentu yang propertinya sudah kita ketahui.

Ada kode di bawah ini untuk menyimpan kredensial kamu saat pertama kali digunakan. Pastikan untuk menghapus informasi ini dari notebook setelah menyimpannya ke lingkunganmu, agar kredensialmu tidak secara tidak sengaja dibagikan saat kamu berbagi notebook. Lihat Siapkan akun IBM Cloud kamu dan Inisialisasi layanan di lingkungan yang tidak tepercaya untuk panduan lebih lanjut.

# Load the Qiskit Runtime service
from qiskit_ibm_runtime import QiskitRuntimeService

# Load the Qiskit Runtime service

# Syntax for first saving your token. Delete these lines after saving your credentials.
# QiskitRuntimeService.save_account(channel='ibm_quantum_platform', instance = '<YOUR_IBM_INSTANCE_CRN>', token='<YOUR-API_KEY>', overwrite=True, set_as_default=True)
# service = QiskitRuntimeService(channel='ibm_quantum_platform')

# Load saved credentials
service = QiskitRuntimeService()

# Use the least busy backend, or uncomment the loading of a specific backend like "ibm_brisbane".
backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
# backend = service.backend("ibm_brisbane")
print(backend.name)
ibm_fez

Sekarang, kita menggunakan Transpiler untuk mengoptimalkan Circuit. Kita bisa memilih tingkat optimasi dari 0 (tanpa optimasi) hingga 3 (optimasi tertinggi). Untuk melihat apa yang dihasilkan setiap tingkat, kunjungi panduan Atur tingkat optimasi Transpiler. Circuit yang dihasilkan akan terlihat sangat berbeda dari Circuit logis yang kita buat pada langkah pemetaan.

# Transpile the circuit and optimize for running on the quantum computer selected
# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)

qc_isa.draw("mpl")

Output of the previous code cell

"Sampler" adalah primitif yang dirancang untuk mengambil sampel kemungkinan keadaan yang dihasilkan dari Circuit kuantum, dan mengumpulkan statistik tentang keadaan apa yang mungkin diukur dan dengan probabilitas berapa. Kita mengimpor Qiskit Runtime Sampler di sini:

# Load the Runtime primitive and session
from qiskit_ibm_runtime import SamplerV2 as Sampler

sampler = Sampler(mode=backend)

Jika kamu telah menghabiskan waktu yang dialokasikan pada komputer kuantum nyata atau jika kamu tidak memiliki koneksi internet, kamu mungkin lebih memilih menggunakan simulator. Untuk melakukan ini, jalankan sel di bawah ini dan batalkan komentar pada baris terkait di langkah "Eksekusi".

# Load the backend sampler
from qiskit.primitives import BackendSamplerV2

# Load the Aer simulator and generate a noise model based on the currently-selected backend.
from qiskit_aer import AerSimulator
from qiskit_aer.noise import NoiseModel

noise_model = NoiseModel.from_backend(backend)

# Define a simulator using Aer, and use it in Sampler.
backend_sim = AerSimulator(noise_model=noise_model)
sampler_sim = BackendSamplerV2(backend=backend_sim)

# Alternatively, load a fake backend with generic properties and define a simulator.
# backend_gen = GenericBackendV2(num_qubits=18)
# sampler_gen = BackendSamplerV2(backend=backend_gen)

3. Eksekusiโ€‹

Setelah mempersiapkan Circuit, kita sekarang bisa menjalankannya di komputer kuantum!

job = sampler.run([qc_isa], shots=100)
# job = sampler_sim.run([qc_isa]) # uncomment if you want to run on a simulator
res = job.result()
counts = res[0].data.meas.get_counts()

4. Pasca-pemrosesanโ€‹

Sekarang kita siap melihat hasil kita! Kita akan menampilkan histogram dari 100 sampel Circuit.

from qiskit.visualization import plot_histogram

print("counts = ", counts)
plot_histogram(counts)
counts =  {'0000': 90, '0100': 4, '1100': 3, '0010': 3}

Output of the previous code cell

Histogram di atas menunjukkan hasil pengukuran dari keempat Qubit di akhir Circuit. Komputer kuantum ideal dengan nol noise akan selalu mengukur Qubit memiliki nilai yang sama setiap kali, tapi pada kenyataannya, noise akan menyebabkan beberapa run menghasilkan kesalahan.

Cek pemahamanmuโ€‹

Baca pertanyaan di bawah ini, pikirkan jawabanmu, lalu klik segitiga untuk melihat solusinya.

Menggunakan bitstring dengan jumlah terbanyak sebagai nilai kamu untuk AA, BB, SS, dan CC, verifikasi bahwa Circuit quantum adder bekerja.

Jawaban:

Kita perlu memverifikasi bahwa A+B=S+2ร—CA+B = S+2 \times C. Ingat bahwa urutan bitstring mengikuti notasi little-endian, jadi dibaca CSBA.

Dari histogram di atas, kita melihat bahwa bitstring 0000 adalah yang dominan.

0+0=0+0ร—2=0ย โœ“0 + 0 = 0 + 0 \times 2 = 0 ~\checkmark

Kembali dan ubah nilai AA dan BB menjadi A=1A=1 dan B=1B=1 lalu jalani kembali langkah-langkah Qiskit patterns untuk menjalankan ulang Circuit. Verifikasi bahwa Circuit adder bekerja lagi.

Jawaban:

Kamu seharusnya mendapatkan histogram dengan bitstring dominan 1011:

1+1=0+1ร—2=2ย โœ“1 + 1 = 0 + 1 \times 2 = 2 ~\checkmark

Salah satu fitur tambahan dari quantum half-adder dibanding classical half-adder adalah bahwa ia bisa berjalan dengan input kuantum. Artinya, ia bisa "menjumlahkan" Qubit AA dan BB meskipun keduanya berada dalam keadaan superposisi. Di bagian Pertanyaan Tantangan di bawah, kamu akan diminta untuk mempersiapkan Qubit dalam superposisi dan melihat apa yang terjadi!

Kesimpulanโ€‹

Modul ini dirancang untuk memberimu pemahaman dasar yang kuat tentang prinsip-prinsip dasar di balik komputasi kuantum dengan membandingkannya dengan komputasi klasik. Kita melihat Circuit classical half-adder lalu menunjukkan cara mengadaptasi Circuit tersebut untuk dijalankan dengan Qubit di komputer kuantum. Sekarang kamu siap untuk menjelajahi modul-modul Qiskit in the Classroom lainnya!

Konsep penting:โ€‹

  • Berbeda dengan bit klasik yang hanya bisa mengambil nilai 0 dan 1, Qubit juga bisa berada dalam keadaan superposisi dari keduanya.
  • Beberapa Qubit bisa berada dalam superposisi atas bitstring yang diizinkan secara klasik yang disebut keadaan basis komputasi.
  • Beberapa Qubit bisa terjerat sehingga keadaan satu bergantung pada keadaan yang lain.
  • Konvensi Qiskit adalah menggunakan notasi little-endian, yang menempatkan Qubit paling tidak signifikan, q0q_0, di posisi paling kanan dan Qubit paling signifikan, qNq_N, paling kiri.
  • Gate kuantum adalah operasi reversibel yang direpresentasikan oleh matriks uniter yang bekerja pada vektor keadaan kuantum. Dalam notasi ini, matriks yang paling dekat dengan vektor (yang paling kanan) bertindak pertama.
  • Pengukuran meruntuhkan keadaan superposisi kuantum menjadi salah satu keadaan yang diizinkan secara klasik, dengan probabilitas sama dengan kuadrat amplitudo keadaan basis komputasi yang sesuai dalam superposisi.
  • Circuit kuantum sering direpresentasikan menggunakan diagram Circuit kuantum, di mana Qubit digambarkan sebagai kabel horizontal, dan Gate kuantum muncul di sepanjang kabel ini dari kiri ke kanan.
  • Untuk menjalankan Circuit kuantum, kita menggunakan empat langkah dalam alur kerja Qiskit patterns: Peta, Optimasi, Eksekusi, Pasca-proses.

Pertanyaanโ€‹

Pertanyaan Benar/Salahโ€‹

  1. Satu bit dalam komputer klasik hanya bisa menyimpan nilai 0 atau 1.

  2. Keterikatan berarti keadaan satu Qubit tidak bergantung pada keadaan Qubit lain.

  3. Gate kuantum umumnya adalah operasi yang tidak reversibel.

  4. Konvensi Qiskit menempatkan Qubit paling tidak signifikan, q0q_0, di posisi paling kiri.

  5. Mengukur keadaan kuantum selalu memberikan hasil yang sama persis jika diulang berkali-kali.

  6. Gate Hadamard menciptakan superposisi dalam satu Qubit.

  7. Circuit kuantum mungkin menyertakan operasi pengukuran yang meruntuhkan keadaan superposisi menjadi salah satu keadaan yang diizinkan secara klasik.

  8. Jumlah kemungkinan keadaan klasik untuk NN bit adalah 2N2N.

  9. Probabilitas hasil untuk pengukuran kuantum diberikan oleh kuadrat amplitudo keadaan basis yang dapat diukur secara klasik.

Pertanyaan Jawaban Singkatโ€‹

  1. Apa saja perbedaan utama antara bit dan Qubit?

  2. Apa yang terjadi pada keadaan kuantum ketika diukur?

  3. Mengapa kita menggunakan notasi little-endian di Qiskit?

  4. Apa saja empat langkah dalam alur kerja Qiskit patterns?

Pertanyaan Tantangan:โ€‹

  1. Dalam modul ini, kita hanya menggunakan adder untuk menjumlahkan keadaan yang diizinkan secara klasik untuk AA dan BB. Tapi kita juga bisa mempersiapkan AA dan BB dalam superposisi! Ubah kode untuk mempersiapkan setiap Qubit dalam superposisi yang sama dari 0 dan 1, lalu jalankan Circuit baru dan dapatkan histogram baru. Apa yang kamu lihat? Jelaskan apa yang terjadi.

  2. Dekomposisi Gate Toffoli. Gunakan decompose() untuk menunjukkan bagaimana Gate Toffoli didekomposisi menjadi Gate satu dan dua Qubit, lalu verifikasi konstruksi ini dengan perkalian matriks. Ingat bahwa meskipun diagram Circuit dibaca dari kiri ke kanan, matriks diterapkan ke keadaan kuantum dari kanan ke kiri!

Source: IBM Quantum docs โ€” updated 17 Apr 2026
English version on doQumentation โ€” updated 7 Mei 2026
This translation based on the English version of approx. 27 Mar 2026