Latihan - Membuat status superposisi yang berbeda dengan Q#
Di unit sebelumnya, Anda belajar tentang superposisi dan notasi Dirac. Itu teori yang cukup untuk saat ini! Mari kita tulis beberapa kode untuk menjelajahi superposisi di Q#.
Dalam unit ini, Anda membuat status superposisi kuantum di Q# dan menjelajahi peran probabilitas dalam hasil pengukuran. Anda juga menggunakan DumpMachine fungsi di Q# untuk memeriksa bagaimana status sistem berubah selama komputasi kuantum.
Membuat file Q# baru
- Buka Visual Studio Code (VS Code).
- Buka menu File , lalu pilih File Teks Baru untuk membuat file baru.
- Simpan file sebagai Main.qs.
Mulai menggunakan superposisi
Mari kita mulai dengan program Q# sederhana yang menggunakan qubit dalam status superposisi untuk menghasilkan nilai bit acak, 0 atau 1. Dalam kode kami, kita menggunakan DumpMachine fungsi untuk melihat status qubit di titik yang berbeda dalam program.
Salin dan tempel kode berikut ke dalam file Main.qs :
import Std.Diagnostics.*; operation Main() : Result { use q = Qubit(); Message("Initialized qubit:"); DumpMachine(); // First dump Message(" "); H(q); Message("Qubit after applying H:"); DumpMachine(); // Second dump Message(" "); let randomBit = M(q); Message("Qubit after the measurement:"); DumpMachine(); // Third dump Message(" "); Reset(q); Message("Qubit after resetting:"); DumpMachine(); // Fourth dump Message(" "); return randomBit; }Untuk menjalankan program Anda pada simulator bawaan, pilih jendela Jalankan kode di atas
Mainoperasi atau tekan Ctrl + F5. Output Anda muncul di konsol debug.Periksa konsol debug untuk menemukan hasil pengukuran Anda, baik
ZeroatauOne.
Fungsi ini DumpMachine membuat tabel informasi yang menjelaskan status sistem kuantum, yang dalam hal ini adalah satu qubit. Informasi dari DumpMachine mencakup amplitudo probabilitas, probabilitas pengukuran, dan fase dalam radian untuk setiap status dasar.
Kode Anda memanggil DumpMachine fungsi empat kali:
- Setelah Anda mengalokasikan qubit
- Setelah Anda menempatkan qubit ke dalam status superposisi
- Setelah Anda mengukur status qubit
- Setelah Anda mengatur ulang qubit
Mari kita periksa output dari setiap panggilan ke DumpMachine:
Kubit yang diinisialisasi: Saat Anda mengalokasikan qubit dengan perintah
use, qubit selalu dimulai dalam keadaan $|0\rangle$.Initialized qubit: Basis | Amplitude | Probability | Phase ----------------------------------------------- |0⟩ | 1.0000+0.0000𝑖 | 100.0000% | 0.0000Qubit setelah menerapkan H: Setelah Anda menerapkan
Hoperasi, qubit berada dalam status superposisi yang setara, $|\psi\rangle=\frac1{\sqrt2} |0\rangle + \frac1{\sqrt2} |1\rangle$.Qubit after applying H: Basis | Amplitude | Probability | Phase ----------------------------------------------- |0⟩ | 0.7071+0.0000𝑖 | 50.0000% | 0.0000 |1⟩ | 0.7071+0.0000𝑖 | 50.0000% | 0.0000Qubit setelah pengukuran: Setelah Anda mengukur qubit, hasilnya adalah
ZeroatauOne, dan qubit sepenuhnya dalam keadaan yang Anda ukur.Qubit after the measurement: Basis | Amplitude | Probability | Phase ----------------------------------------------- |1⟩ | 1.0000+0.0000𝑖 | 100.0000% | 0.0000Catatan
Output Anda dari
DumpMachinesetelah pengukuran mungkin berbeda dari contoh output karena Anda memiliki 50% kesempatan untuk mengukur setiap status. Probabilitas hasilnya deterministik, tetapi hasil pengukuran individu tidak.Qubit setelah mengatur ulang: Operasi
Resetmereset qubit ke status $|0\rangle$ sehingga dapat digunakan lagi untuk komputasi di masa mendatang.Qubit after resetting: Basis | Amplitude | Probability | Phase ----------------------------------------------- |0⟩ | 1.0000+0.0000𝑖 | 100.0000% | 0.0000
Menjelajahi status superposisi lainnya
Sekarang setelah Anda tahu cara memeriksa status sistem qubit dengan DumpMachine, mari kita jelajahi operasi lain yang menempatkan sistem ke berbagai jenis status superposisi.
Generator bit acak saat ini menghasilkan atau ZeroOne dengan probabilitas 50%. Dalam contoh berikutnya, probabilitasnya tidak sama.
Generator bit acak tidak merata
Misalkan Anda ingin membuat generator bit acak yang tidak seimbang, yang berarti bahwa kemungkinan mendapatkan Zero berbeda dari kemungkinan mendapatkan One.
Misalnya, Anda menginginkan hasilnya Zero dengan probabilitas $P$ dan hasilnya One dengan probabilitas $1 - P$. Berikut adalah status qubit valid yang menghasilkan generator bit acak seperti itu:
$$|\psi\rangle=\sqrt{P}|0\rangle+\sqrt{1 - P}|1\rangle$$
Untuk status ini $|\psi\rangle$, $\alpha=\sqrt{P}$ dan $\beta=\sqrt{1 - P}$ adalah amplitude probabilitas dari status dasar $|0\rangle$ dan $|1\rangle$, masing-masing.
Untuk mendapatkan status ini, Anda dapat menerapkan operator secara berurutan $R_y(2\cos^{-1}\sqrt{P})$ ke qubit yang dimulai dalam status $|0\rangle$. Untuk mencapai hasil ini dalam Q#, gunakan Ry dari pustaka standar.
Kiat
Untuk mempelajari lebih lanjut tentang matematika di balik operasi qubit tunggal, lihat tutorial Gerbang Qubit Tunggal di Quantum Katas.
Untuk membuat status superposisi condong di Q#, ikuti langkah-langkah berikut:
Ganti semua kode di Main.qs dengan contoh berikut, lalu simpan file. Contoh ini memilih $\alpha$ menjadi sekitar $\frac13$.
import Std.Diagnostics.*; import Std.Math.*; operation Main() : Result { use q = Qubit(); let P = 0.333333; // P is 1/3 Ry(2.0 * ArcCos(Sqrt(P)), q); Message("The qubit is in the desired state."); DumpMachine(); // Dump the state of the qubit Message("Your skewed random bit is:"); let skewedrandomBit = M(q); Reset(q); return skewedrandomBit; }Untuk menjalankan program Anda di dalam simulator bawaan, pilih opsi Jalankan di atas operasi
Mainatau tekan tombol Ctrl + F5. Output Anda muncul di konsol debug.Periksa output dari
DumpMachinedan hasil pengukuran Anda. Misalnya, outputnya mirip dengan yang berikut ini:The qubit is in the desired state. Basis | Amplitude | Probability | Phase ----------------------------------------------- |0⟩ | 0.5773+0.0000𝑖 | 33.3333% | 0.0000 |1⟩ | 0.8165+0.0000𝑖 | 66.6667% | 0.0000 Your skewed random bit is: One
Perhatikan bahwa probabilitas Zero hasil pengukuran adalah sekitar 33,33% dan probabilitas One hasilnya adalah sekitar 66,67%. Generator bit acak ini condong ke arah One.
Catatan
Output dari hasil pengukuran Anda mungkin berbeda dari output contoh karena generator acak bit bersifat probabilistik. Probabilitas hasilnya deterministik, tetapi hasil pengukuran individu tidak.
Superposisi multi-qubit
Sejauh ini, kami hanya mempertimbangkan sistem qubit tunggal. Tetapi komputer kuantum yang baik membutuhkan banyak qubit untuk melakukan perhitungan yang berguna. Bagaimana cara kerja status kuantum dan superposisi ketika sistem kita memiliki lebih dari satu qubit?
Sebagai contoh, pertimbangkan sistem tiga qubit. Setiap qubit dapat memiliki nilai 0 atau 1 ketika Anda mengukurnya, sehingga ada delapan kemungkinan status yang dapat Anda temukan sistem untuk berada di:
$$|000\rangle,|001\rangle,|010\rangle,|011\rangle,|100\rangle,|101\rangle,|110\rangle,|111\rangle $$
Ada delapan kemungkinan status untuk sistem ini karena setiap qubit dapat secara independen menjadi status 0 atau 1 ketika kita mengambil pengukuran. Secara umum, jumlah status yang mungkin sama dengan $2^n$, di mana $n$ adalah jumlah qubit.
Sama seperti dengan satu qubit, status superposisi arbitrer untuk sistem 3-qubit diwakili sebagai jumlah tertimbang dari delapan status ini, di mana bobotnya adalah amplitudo probabilitas:
$$|\psi\rangle=\alpha_0|000\rangle+\alpha_1|001\rangle+\alpha_2|010\rangle+\alpha_3|011\rangle+\alpha_4|100\rangle+\alpha_5|101\rangle+\alpha_6|110\rangle+\alpha_7|111\rangle$$
Sekali lagi, amplitudo $\alpha_i$ adalah angka kompleks yang memenuhi kondisi $\sum\limits_{i=0}^{i=7}|\alpha_i|^2=1$.
Misalnya, Anda dapat menempatkan qubit dalam superposisi seragam dengan menerapkan H ke setiap qubit. Anda kemudian dapat menggunakan superposisi seragam ini untuk membuat generator angka acak kuantum yang menghasilkan angka tiga-bit alih-alih angka satu-bit:
| Keadaan dasar | Nomor |
|---|---|
| $\ket{000}$ | 0 |
| $\ket{001}$ | 4 |
| $\ket{010}$ | 2 |
| $\ket{011}$ | 6 |
| $\ket{100}$ | 1 |
| $\ket{101}$ | 5 |
| $\ket{110}$ | 3 |
| $\ket{111}$ | 7 |
Catatan
Cara standar untuk menulis string bit adalah dengan memiliki digit terkecil di sebelah kanan dan digit terbesar di sebelah kiri, sama seperti dengan angka desimal biasa. Dalam Q# (dan banyak bahasa pemrograman kuantum lainnya), urutan dibalik sehingga digit terkecil ada di sebelah kiri dan digit terbesar ada di sebelah kanan.
DumpMachine Karena fungsi menampilkan status kuantum dalam urutan standar, bilangan bulat desimal yang sesuai dengan status tidak diurutkan secara berurutan dari 0 hingga $n-1$.
Untuk membuat generator angka acak semacam ini, ikuti langkah-langkah berikut:
Ganti kode Anda di Main.qs dengan contoh berikut, lalu simpan file:
import Std.Diagnostics.*; import Std.Convert.*; operation Main() : Int { use qubits = Qubit[3]; ApplyToEach(H, qubits); Message("The qubit register in a uniform superposition: "); DumpMachine(); let result = MeasureEachZ(qubits); Message("Measuring the qubits collapses the superposition to a basis state."); DumpMachine(); ResetAll(qubits); return ResultArrayAsInt(result); }Untuk menjalankan program Anda di dalam simulator bawaan, pilih opsi Jalankan di atas operasi
Mainatau tekan tombol Ctrl + F5. Output Anda muncul di konsol debug.Periksa output dari
DumpMachinedan hasil pengukuran Anda. Misalnya, outputnya mirip dengan yang berikut ini:The qubit register in a uniform superposition: Basis | Amplitude | Probability | Phase ----------------------------------------------- |000⟩ | 0.3536+0.0000𝑖 | 12.5000% | 0.0000 |001⟩ | 0.3536+0.0000𝑖 | 12.5000% | 0.0000 |010⟩ | 0.3536+0.0000𝑖 | 12.5000% | 0.0000 |011⟩ | 0.3536+0.0000𝑖 | 12.5000% | 0.0000 |100⟩ | 0.3536+0.0000𝑖 | 12.5000% | 0.0000 |101⟩ | 0.3536+0.0000𝑖 | 12.5000% | 0.0000 |110⟩ | 0.3536+0.0000𝑖 | 12.5000% | 0.0000 |111⟩ | 0.3536+0.0000𝑖 | 12.5000% | 0.0000 Measuring the qubits collapses the superposition to a basis state. Basis | Amplitude | Probability | Phase ----------------------------------------------- |011⟩ | 1.0000+0.0000𝑖 | 100.0000% | 0.0000 6Catatan
Output Anda mungkin memiliki hasil yang berbeda dari contoh output karena generator angka acak probabilistik. Probabilitas hasilnya deterministik, tetapi hasil pengukuran individu tidak.
Untuk bekerja dengan beberapa kubit, kode Q# Anda memiliki modifikasi berikut:
- Variabel
qubitssekarang mewakili arrayQubityang memiliki panjang tiga. - Operasi
ApplyToEachdanMeasureEachZmenerapkan operasi kuantum ke beberapa qubit hanya dengan satu baris kode. Pustaka Q# menawarkan banyak fungsi dan operasi yang menyederhanakan pemrograman kuantum untuk Anda. - Fungsi
ResultArrayAsIntdariStd.Convertpustaka mengubah array binerResultmenjadi bilangan bulat desimal.
Output dari DumpMachine menunjukkan bahwa tindakan pengukuran menciutkan status superposisi menjadi salah satu dari delapan status dasar yang mungkin, sama seperti dengan satu qubit. Misalnya, jika Anda mendapatkan hasil 6, ini berarti status sistem berkurang ke $|011\rangle$.
Sekarang mari kita lihat lebih dalam bagaimana sistem berubah saat kita mengukur setiap qubit. Kode sebelumnya menggunakan MeasureEachZ operasi untuk mengukur ketiga qubit sekaligus. Sebagai gantinya, mari kita gunakan perulangan for untuk mengukur qubit satu per satu, dan gunakan DumpMachine untuk melihat status sistem setelah setiap pengukuran.
Ganti kode di Main.qs dengan contoh berikut, lalu simpan file:
import Std.Diagnostics.*; import Std.Convert.*; operation Main() : Int { use qubits = Qubit[3]; ApplyToEach(H, qubits); Message("The qubit register is in a uniform superposition: "); DumpMachine(); mutable results = []; for q in qubits { Message(" "); results += [M(q)]; DumpMachine(); } ResetAll(qubits); Message("Your random number is: "); return ResultArrayAsInt(results); }Untuk menjalankan program Anda di dalam simulator bawaan, pilih opsi Jalankan di atas operasi
Mainatau tekan tombol Ctrl + F5. Output Anda muncul di konsol debug.Periksa output dari
DumpMachinedan hasil pengukuran Anda.
Output menunjukkan bagaimana setiap pengukuran berturut-turut mengubah status kuantum dan oleh karena itu probabilitas untuk mendapatkan setiap hasil. Misalnya, mari kita periksa setiap bagian output dalam kasus bahwa hasil Anda adalah 5:
Persiapan keadaan: Sistem berada dalam status superposisi seimbang setelah anda menerapkan
Hke setiap qubit.The qubit register is in a uniform superposition: Basis | Amplitude | Probability | Phase ----------------------------------------------- |000⟩ | 0.3536+0.0000𝑖 | 12.5000% | 0.0000 |001⟩ | 0.3536+0.0000𝑖 | 12.5000% | 0.0000 |010⟩ | 0.3536+0.0000𝑖 | 12.5000% | 0.0000 |011⟩ | 0.3536+0.0000𝑖 | 12.5000% | 0.0000 |100⟩ | 0.3536+0.0000𝑖 | 12.5000% | 0.0000 |101⟩ | 0.3536+0.0000𝑖 | 12.5000% | 0.0000 |110⟩ | 0.3536+0.0000𝑖 | 12.5000% | 0.0000 |111⟩ | 0.3536+0.0000𝑖 | 12.5000% | 0.0000Pengukuran pertama: Hasilnya adalah
Oneuntuk pengukuran pertama, sehingga sekarang satu-satunya kemungkinan status akhir sistem adalah ketika bit paling kiri bernilai 1. Amplitudo dari keadaan-keadaan di mana kubit paling kiri adalah 0 telah menghilang, dan probabilitas keadaan yang tersisa meningkat dari 12,5% menjadi 25,0% sehingga total probabilitas tetap 100%.Basis | Amplitude | Probability | Phase ----------------------------------------------- |100⟩ | 0.5000+0.0000𝑖 | 25.0000% | 0.0000 |101⟩ | 0.5000+0.0000𝑖 | 25.0000% | 0.0000 |110⟩ | 0.5000+0.0000𝑖 | 25.0000% | 0.0000 |111⟩ | 0.5000+0.0000𝑖 | 25.0000% | 0.0000Pengukuran kedua: Hasilnya adalah
Zerountuk pengukuran kedua, jadi sekarang satu-satunya kemungkinan keadaan di mana sistem dapat berakhir adalah keadaan di mana dua bit paling kiri adalah 10. Sekarang kita hanya dibiarkan dengan dua kemungkinan hasil ketika kita mengukur qubit ketiga, dengan probabilitas 50% untuk setiap hasil.Basis | Amplitude | Probability | Phase ----------------------------------------------- |100⟩ | 0.7071+0.0000𝑖 | 50.0000% | 0.0000 |101⟩ | 0.7071+0.0000𝑖 | 50.0000% | 0.0000Pengukuran ketiga: Dalam pengukuran ketiga, hasilnya adalah
One. Sistem telah sepenuhnya diukur, dan karena itu tidak lagi berada dalam keadaan superposisi, sesuai dengan yang diharapkan.Basis | Amplitude | Probability | Phase ----------------------------------------------- |101⟩ | 1.0000+0.0000𝑖 | 100.0000% | 0.0000 Your random number is: 5
Dengan Q#, Anda dapat membuat sistem qubit, menempatkan qubit ke dalam status superposisi, dan memeriksa bagaimana sistem berubah saat Anda menerapkan operasi kuantum atau mengambil pengukuran.