Belajar Memprogram Komputer Kuantum (1): Dasar Komputasi Kuantum dan Cara Menginstal Qiskit

Komputer kuantum, seperti yang telah dijelaskan di artikel sebelumnya, adalah mesin penghitung yang memanfaatkan perilaku "aneh" dari benda-benda berukuran kecil. IBM, salah satu perusahaan yang mengembangkan komputer kuantum, mengembangkan sebuah perangkat lunak sumber terbuka (open source software) yang dapat digunakan untuk memprogram komputer kuantum.

Perangkat lunak ini bernama quantum information science kit (Qiskit). Qiskit memungkinkan kita untuk membuat program, menyimulasikan, bahkan menjalankan program langsung di komputer kuantum sebenarnya milik IBM, IBM Q, dari komputer pribadi kita. Dalam seri tutorial ini kita akan belajar dasar-dasar membuat program komputasi kuantum dengan Qiskit.

Untuk dapat mengikuti tutorial ini yang anda butuhkan adalah pengetahuan tentang aljabar linier, operasi hitung matriks dan vektor, yang sudah dipelajari di bangku SMA. Selain itu, dibutuhkan juga pengetahuan tentang pemrograman (utamanya dengan python) di tingkat dasar. Tentunya, karena kita akan mempelajari bagaimana memprogram komputer kuantum, kita membutuhkan sedikit pengetahuan tentang sains informasi kuantum.

Untuk tutorial kali ini, kita akan mulai dengan belajar tentang dasar-dasar sains informasi kuantum yang dibutuhkan dalam pemrograman kuantum komputer di tutorial yang akan datang. Selanjutnya, kita akan belajar bagaimana menginstal Qiskit di komputer pribadi kita masing-masing.

Dasar komputasi kuantum

Sebelum memulai pemrograman komputer kuantum, kita butuh untuk belajar tentang dasar-dasar sains informasi kuantum. Kita akan mempelajari bagaimana merepresentasikan bit kuantum dan gerbang-gerbang logika dasar dalam pemrosesan informasi kuantum.

Qubit

Satuan terkecil informasi kuantum disebut qubit (dibaca: kiubit), kependekan dari quantum bit, yang direpresentasikan dalam notasi matematika |0\rangle dan |1\rangle. Simbol | \rangle di kiri dan kanan angka 0 dan 1 disebut ket. Sebuah ket tidak lain hanyalah representasi sebuah vektor. Qubit |0\rangle dan |1\rangle direpresentasikan dalam vektor berikut:

|0\rangle = \begin{bmatrix}1\\0 \end{bmatrix}, \; |1\rangle = \begin{bmatrix}0\\1 \end{bmatrix}.

Bola Bloch

Seperti yang dijelaskan sebelumnya, sebuah qubit direpresentasikan sebagai sebuah vektor. Penggambaran mudah bagi qubit adalah dengan menggunakan sebuah bola, satu vektor qubit dapat mengarah pada sembarang permukaan bola (Gambar 1). Perhatikan Gambar 1, qubit |0\rangle mengarah vertikal ke atas sejajar sumbu-z positif (Gambar 1A) dan qubit |1\rangle mengarah  vertikal ke bawah sejajar sumbu-z negatif (Gambar 1B). Selain |0\rangle dan |1\rangle, qubit dapat mengarah ke permukaan mana pun di permukaan bola di antara dua ekstrem |0\rangle dan |1\rangle. Keadaan ini disebut superposisi, direpresentasikan sebagai kombinasi linier dari |0\rangle dan |1\rangle (Gambar 1C):

|\psi\rangle = a |0\rangle + b |1\rangle = \begin{bmatrix} a \\ b \end{bmatrix}.

a dan b merupakan bilangan kompleks yang masing-masing merupakan probabilitas ditemukannya qubit |0\rangle dan |1\rangle. Keadaan ini juga dapat direpresentasikan dengan parameter-parameter dalam koordinat bola (Gambar 1C) untuk menunjukkan posisi vektor dalam bola Bloch:

|\psi\rangle = \cos \frac{\theta}{2} |0\rangle + e^{i\varphi} \sin \frac{\theta}{2} |1\rangle.

Dengan \theta dan \varphi masing-masing adalah sudut polar dan sudut azimut dalam sistem koordinat bola.

Gambar 1. Bola Bloch untuk menggambarkan keadaan qubit |0\rangle (A), keadaan qubit |1\rangle (B), dan keadaan superposisi antara |0\rangle dan |1\rangle (C); perhatikan posisi dan arah panah merah pada tiap keadaan; panah pada keadaan merupakan salah satu posisi dari probabilitas yang ada.

Gerbang Pauli-X

Gerbang logika ini bekerja layaknya gerbang logika NOT dalam gerbang logika klasik; mengubah logika 0 menjadi 1 dan sebaliknya. Gerbang Pauli-X mengubah qubit |0\rangle menjadi |1\rangle begitu pula sebaliknya. Gerbang Pauli-X direpresentasikan sebagai matriks

\sigma_x = \begin{bmatrix}0 & 1\\1 & 0\end{bmatrix}.

Sehingga, jika kita lakukan operasi gerbang Pauli-X terhadap qubit akan didapatkan:

\sigma_x|0\rangle = \begin{bmatrix}0&1\\1&0\end{bmatrix} \begin{bmatrix}1\\0\end{bmatrix} = \begin{bmatrix}0\\1 \end{bmatrix} = |1\rangle,

\sigma_x|1\rangle = \begin{bmatrix}0&1\\1&0\end{bmatrix} \begin{bmatrix}0\\1\end{bmatrix} = \begin{bmatrix}1\\0 \end{bmatrix} = |0\rangle.

Gambar 2B menujukkan operasi gerbang Pauli-X dalam bola Bloch. Vektor qubit |0\rangle dirotasikan 180^{\circ} terhadap sumbu-x. Selain gerbang Pauli-X terdapat pula gerbang Pauli-Y dan gerbang Pauli-Z yang pada intinya adalah merotasikan vektor dalam bola Bloch sebesar 180^{\circ} terhadap masing-masing sumbu-y dan sumbu-x

 

Gambar 2. Keadaan kuantum awal |0\rangle (A), keadaan kuantum \sigma_x|0\rangle setelah dilakukan rotasi 180^{\circ} terhadap sumbu x dengan menggunakan gerbang Pauli-X , dan keadaan superposisi antara |0\rangle dan |1\rangle dengan gerbang Hadamard (C).

Gerbang Hadamard

Gerbang Hadamard berfungsi untuk mengubah keadaan qubit menjadi superposisi dari |0\rangle dan |1\rangle. Dalam bentuk matriks, gerbang Hadamard dituliskan sebagai:

H = \frac{1}{\sqrt{2}}\begin{bmatrix}1 & 1 \\ 1 & -1 \end{bmatrix}.

Jika kita terapkan pada qubit |0\rangle akan menghasilkan

\begin{align*} H|0\rangle &= \frac{1}{\sqrt{2}}\begin{bmatrix}1 & 1 \\ 1 & -1 \end{bmatrix} \begin{bmatrix} 1 \\ 0 \end{bmatrix} \\ &= \frac{1}{\sqrt{2}} \begin{bmatrix}1 \\ 1 \end{bmatrix} \\ &= \frac{1}{\sqrt{2}} (|0\rangle + |1\rangle).\end{align*}

Sedangkan jika kita terapkan pada qubit |1\rangle akan diperoleh

 \begin{align*} H|1\rangle &= \frac{1}{\sqrt{2}}\begin{bmatrix}1 & 1 \\ 1 & -1 \end{bmatrix} \begin{bmatrix} 0 \\ 1 \end{bmatrix} \\ &= \frac{1}{\sqrt{2}} \begin{bmatrix}1 \\ -1 \end{bmatrix} \\ &= \frac{1}{\sqrt{2}} (|0\rangle - |1\rangle). \end{align*}

Dalam bola Bloch, gerbang Hadamard merotasikan vektor sebesar 180^{\circ} terhadap sumbu diagonal antara sumbu-z dan sumbu-x (Gambar 2C).

Gerbang CNOT (controlled NOT)

Gerbang CNOT bekerja layaknya gerbang XOR (exclusive OR) di komputasi klasik. Gerbang XOR mengubah bit pada masukan kedua (B) jika dan hanya jika masukan pertama (A) adalah 1, perhatikan tabel berikut:

A B A XOR B
0 0 0
0 1 1
1 0 1
1 1 0

Gerbang CNOT bekerja pada dua qubit, dengan qubit pertama berfungsi sebagai pengendali (control) sedang qubit kedua sebagai target yang akan diubah keadaannya. Sama halnya dengan gerbang XOR, qubit target akan berubah keadaanya jika dan hanya jika qubit  pengendali adalah |1\rangle.

Gambar 3. Gerbang CNOT mengubah keadaan kuantum qubit kedua jika masukan qubit pertama (kontrol) adalah |1\rangle.

Pengukuran dalam komputasi kuantum

Pengukuran adalah proses yang penting dalam komputasi kuantum. Bagaimana kita melakukan pengukuran menentukan kredibilitas hasil akhir dari komputasi kuantum. Dalam komputasi kuantum pengukuran harus dilakukan di akhir proses komputasi. Jika tidak, sifat kuantum yang menjadi pembeda dan keunggulan komputer kuantum dibanding komputer klasik akan musnah.

Dalam komputasi kuantum hanya proses perhitungan saja yang dilakukan secara kuantum, sedangkan hasil perhitungan akan menghasilkan bit klasik yang tentu dapat dipahami dan diinterpretasikan dalam berbagai bentuk seperti angka dan gambar oleh komputer klasik. Pengukuran akan memproyeksikan hasil perhitungan kuantum ke bit klasik berisi angka 0 atau 1. Karena itu, sekali pengukuran dilakukan terhadap hasil perhitungan kuantum, kita tidak akan bisa lagi melakukan komputasi kuantuam karena qubit telah berubah menjadi hanya bit.

Pengukuran dalam komputasi kuantum berarti probabilitas untuk menemukan qubit tertentu dan direpresentasikan dalam:

p(|x\rangle) = |\langle x |\psi\rangle|^2.

Simbol \langle| yang mengapit x di sebelah kanan tanda sama dengan disebut dengan bra, yang tidak lain adalah konjugat dari ket. Bra mengubah bentuk vektor ket yang semula vertikal menjadi vektor horizontal serta mengubah tanda jika vektor berupa bilangan kompleks (disimbolkan dengan ^*):

|\alpha\rangle = \begin{bmatrix}a \\ b\end{bmatrix}; \; \langle\alpha| = \begin{bmatrix} a^* & b^* \end{bmatrix}

Sebagai contoh, jika kita punya keadaan kuantum superposisi |\psi\rangle = \frac{1}{\sqrt{2}} |0\rangle + \frac{i}{\sqrt{2}} |1\rangle. Probabilitas ditemukannya qubit |0\rangle adalah:

\begin{align*} |\langle 0 |\psi\rangle|^2 &= \left|\frac{1}{\sqrt{2}} \langle 0 |0\rangle + \frac{i}{\sqrt{2}} \langle0|1\rangle \right| ^2 \\ &= \left|\frac{1}{\sqrt{2}}1 + \frac{i}{\sqrt{2}} 0 \right| ^2 \\ &= \frac{1}{2}. \end{align*}

Hasil yang sama kan diperoleh jika kita menghitung probabilitas qubit |1\rangle. Artinya, pada keadaan superposisi kita memiliki masing-masing 50% kemungkinan untuk menemukan qubit|0\rangle dan |1\rangle. Hasil akhir pengukuran kuantum Dalam rangkaian kuantum, pengukuran disimbolkan oleh alat ukur dengan jarum penunjuk (Gambar 4).

Gambar 4. Gerbang pengukuran memproyeksikan hasil perhitungan kuantum |q\rangle ke bit klasik c. Garis tunggal menggambarkan jalur kuantum, sedangkan garis ganda menggambarkan jalur klasik.

Menginstal Qiskit

Setelah mempelajari dasar komputasi kuantum, saatnya kita beralih pada pemrograman kuantum dengan Qiskit. Qiskit berjalan dengan menggunakan bahasa pemrograman python. Oleh karena itu hal pertama yang harus kita lakukan adalah menginstal python di komputer pribadi kita. Artikel sebelumnya telah membahas bagaimana menginstal python di komputer pribadi kita. Jadi anda tinggal mengkuti petunjuk yang diberikan di artikel tersebut.

Alternatif lain anda dapat menginstal Anaconda. Anaconda merupakan paket lengkap perangkat lunak pemrograman python. Di dalamnya sudah termasuk IDE (integrated development environment), yang dapat digunakan untuk menulis dan menjalankan kode-kode python, modul-modul, dan fungsi-fungsi yang berguna dalam pemrograman python. Anaconda dapat diunduh dan diinstal dengan mudah di komputer pribadi anda.

Dalam tutorial ini kita menggunakan Jupyter Notebook, sebuah perangkat lunak berbasis web yang dapat digunakan untuk membuat catatan berisi tulisan dan kode program yang dapat dijalankan secara langsung.

Qiskit bekerja di sistem 64-bit. Sistem operasi yang telah teruji dapat menjalankan qiskit adalah:

  • Ubuntu 16.04 atau setelahnya
  • Mac OS 10.12.6 atau setelahnya
  • Windows 7 atau setelahnya

Setelah menginstal python dan pip, Qiskit dapat dengan mudah diinstal dengan mengetikkan perintah berikut di terminal (jika anda menggunakan sistem operasi Linux atau Mac):

pip install qiskit

Pemrograman qiskit akan lebih menarik dan mudah dimengerti jika kita menggunakan grafik untuk memvisualisasikan data, rangkaian kuantum, atau bola Bloch. Untuk menggunakan qiskit dengan visualisasi cukup ketikkan perintah berikut di terminal:

pip install qiskit[visualization]

Setelah sukses menginstal qiskit kita dapat coba menjalankan qiskit di Jupyter Notebook. Untuk memastikan, kita akan mengecek apakah qiskit benar terinstal di komputer pribadi kita dengan mengimpor modul qiskit kemudian mengecek versinya:

Out[2] berisi versi dari Qiskit yaang terinstal beserta elemen-elemen penyusunnya seperti terra, aer, ignis, dan aqua. Elemen-elemen ini dibutuhkan dalam pemrograman komputasi kuantum, antara lain untuk membuat rangkaian logika kuantum (terra), menyimulasikan komputasi kuantum (aer), mengatasi bising dan eror (ignis), dan membangun aplikasi nyata dari algoritma kuantum (aqua). Setelah ini anda sudah siap untuk membuat program kuantum pertama anda!

Referensi

  1. A. Asfaw, et al., Learn Quantum Computation Using Qiskit (The Jupyter Book Community, 2019). Diakses: 29 Agustus 2020. [Daring]. Tersedia di: http://community.qiskit.org/textbook.
  2. C. Bernhardt, Quantum Computing for Everyone. Cambridge, MA: The MIT Press, 2019.
Avatar

Dwi Prananto

Menyelesaikan Sarjana Teknik Fisika di ITS (2010), Master bidang Fisika Material Terkondensasi di Tohoku University (2013) dan PhD bidang Ilmu Material di JAIST (2019). Saat ini bekerja sebagai staf peneliti di Niigata University, Jepang.

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA Image

*