Cara memvisualisasikan diagram sirkuit kuantum dengan Q#
Diagram sirkuit kuantum adalah representasi visual dari operasi kuantum. Mereka menunjukkan aliran qubit melalui program kuantum, termasuk gerbang dan pengukuran yang diterapkan pada mereka.
Dalam artikel ini, Anda akan mempelajari cara mewakili algoritma kuantum secara visual dengan diagram sirkuit kuantum menggunakan Visual Studio Code atau Jupyter Notebooks.
Untuk informasi selengkapnya tentang konvensi diagram sirkuit kuantum, lihat Konvensi sirkuit Quantum.
Prasyarat
Visual Studio Code
Versi terbaru Visual Studio Code atau buka VISUAL Code di Web.
Versi terbaru ekstensi Azure Quantum Development Kit.
Paket Azure Quantum
qsharp
danazure-quantum
Python terbaru.python -m pip install --upgrade qsharp azure-quantum
Jupyter Notebooks
Versi terbaru Visual Studio Code atau buka VISUAL Code di Web.
Visual Studio Code dengan ekstensi Azure Quantum Development Kit, Python, dan Jupyter terinstal.
Azure Quantum
qsharp
danqsharp-widgets
paket terbaru, serta paketnyaipykernel
.python -m pip install --upgrade qsharp qsharp-widgets ipykernel
Sirkuit Quantum dengan Visual Studio Code
Ikuti langkah-langkah ini untuk memvisualisasikan Q# sirkuit kuantum program di Visual Studio Code. Untuk informasi selengkapnya tentang konvensi diagram sirkuit kuantum, lihat Konvensi sirkuit Quantum.
Menampilkan diagram sirkuit untuk program Q#
Q# Buka file di Visual Studio Code, atau muat salah satu sampel kuantum.
Untuk memvisualisasikan sirkuit Q# kuantum program, pilih Lihat -> Palet Perintah dan ketik "sirkuit" yang harus memunculkan Q#opsi : Tampilkan sirkuit . Anda juga dapat mengklik Sirkuit dari daftar perintah sebelumnya
Main()
.Sirkuit ditampilkan di Q# jendela sirkuit. Misalnya, sirkuit berikut sesuai dengan operasi yang menempatkan qubit dalam superposisi lalu mengukurnya. Diagram sirkuit memperlihatkan satu daftar qubit yang diinisialisasi ke status |0⟩. Kemudian, gerbang Hadamard, H, diterapkan ke qubit, diikuti oleh operasi pengukuran, yang diwakili oleh simbol meter.
Menampilkan diagram sirkuit untuk operasi
Anda dapat memvisualisasikan sirkuit kuantum untuk satu Q# operasi. Untuk melakukan ini, klik tombol Sirkuit di lensa kode yang muncul di atas deklarasi operasi.
Menampilkan diagram sirkuit saat penelusuran kesalahan
Saat men-debug Q# program, Anda dapat memvisualisasikan sirkuit kuantum berdasarkan status program saat ini.
Pilih tombol Debug dari daftar perintah lensa kode sebelumnya
Main()
.Di tampilan Jalankan dan debug di sisi kiri, perluas bagian Sirkuit Quantum di bawah panel Variabel untuk menampilkan sirkuit saat Anda menelusuri program.
Anda dapat menelusuri kode dan mengatur titik henti di berbagai titik untuk melihat pembaruan sirkuit saat program dijalankan.
Sirkuit kuantum saat ini ditampilkan di Q# panel Sirkuit. Diagram sirkuit ini mewakili status simulator saat ini, yaitu gerbang yang telah diterapkan hingga titik eksekusi saat ini.
Sirkuit Quantum dengan Jupyter Notebooks
Di Jupyter Notebooks, Anda dapat memvisualisasikan sirkuit kuantum menggunakan qsharp-widgets
paket. Paket ini menyediakan widget yang merender diagram sirkuit kuantum sebagai gambar SVG.
Di Visual Studio Code, pilih Tampilkan > palet Perintah dan pilih Buat: Jupyter Notebook Baru.
Di sel pertama notebook, jalankan kode berikut untuk mengimpor Q# modul.
import qsharp
Tambahkan sel baru dan masukkan Q# kode. Misalnya, kode berikut menyiapkan Status Bel.
%%qsharp // Prepare a Bell State. use register = Qubit[2]; H(register[0]); CNOT(register[0], register[1]);
Anda dapat menggunakan
dump_circuit()
fungsi untuk menampilkan sirkuit kuantum berdasarkan status program saat ini. Misalnya, diagram sirkuit menunjukkan dua register kubit yang diinisialisasi ke status |0⟩ . Kemudian, gerbang Hadamard, H, diterapkan ke qubit pertama. Setelah itu, gerbang CNOT diterapkan menggunakan qubit pertama sebagai kontrol, yang diwakili sebagai titik, dan qubit kedua sebagai target, yang direpresentasikan sebagai X.qsharp.dump_circuit()
q_0 ── H ──── ● ── q_1 ───────── X ──
Anda dapat memvisualisasikan sirkuit kuantum sebagai gambar SVG dengan menggunakan
qsharp-widgets
paket . Dalam hal ini, gerbang CNOT direpresentasikan sebagai garis yang menghubungkan dua qubit, dengan titik pada qubit kontrol dan salib yang disunat pada target qubit. Untuk informasi selengkapnya, lihat Konvensi sirkuit Quantum.from qsharp_widgets import Circuit Circuit(qsharp.dump_circuit())
Menampilkan diagram sirkuit untuk ekspresi entri
Anda dapat membuat diagram sirkuit untuk program apa pun dengan ekspresi entri dengan memanggil qsharp.circuit()
dan meneruskan ekspresi entri sebagai argumen.
Misalnya, tambahkan sel baru dan salin kode berikut, yang menyiapkan status GHZ.
%%qsharp import Std.Diagnostics.*; import Std.Measurement.*; operation GHZSample(n: Int) : Result[] { use qs = Qubit[n]; H(qs[0]); ApplyToEach(CNOT(qs[0], _), qs[1...]); let results = MeasureEachZ(qs); ResetAll(qs); return results; }
Tambahkan sel baru dan jalankan kode berikut untuk memvisualisasikan sirkuit. Misalnya, siapkan status GHZ dengan 3 qubit.
Circuit(qsharp.circuit("GHZSample(3)"))
Menampilkan diagram sirkuit untuk operasi dengan qubit
Anda dapat menghasilkan diagram sirkuit untuk operasi apa pun yang mengambil qubit atau array qubit. Diagram menunjukkan kabel sebanyak ada qubit input, ditambah qubit tambahan apa pun yang dialokasikan dalam operasi. Ketika operasi mengambil array qubit , (Qubit[])
sirkuit menunjukkan array sebagai daftar 2 qubit.
Tambahkan sel baru dan salin contoh berikut. Kode ini menyiapkan status kucing.
%%qsharp operation PrepareCatState(register : Qubit[]) : Unit { H(register[0]); ApplyToEach(CNOT(register[0], _), register[1...]); }
Tambahkan sel baru dan jalankan kode berikut untuk memvisualisasikan sirkuit
PrepareCatState
operasi.Circuit(qsharp.circuit(operation="PrepareCatState"))
Kondisi yang memengaruhi diagram sirkuit
Saat memvisualisasikan sirkuit kuantum, kondisi berikut dapat memengaruhi visualisasi diagram sirkuit.
Sirkuit dinamis
Diagram sirkuit dihasilkan dengan menjalankan semua logika klasik dalam Q# program dan melacak setiap qubit yang telah dialokasikan atau gerbang yang telah diterapkan. Perulangan dan kondisi yang didukung selama hanya berurusan dengan nilai klasik.
Namun, program yang berisi perulangan dan ekspresi kondisional yang menggunakan hasil pengukuran kubit lebih sulit untuk diwakili dengan diagram sirkuit. Misalnya, ekspresi seperti berikut ini
if (M(q) == One) {
X(q)
}
tidak dapat diwakili dengan diagram sirkuit yang mudah, karena gerbang bersyukur pada hasil pengukuran. Sirkuit seperti itu disebut sirkuit dinamis .
Diagram sirkuit dapat dihasilkan untuk sirkuit dinamis dengan menjalankan program di simulator kuantum, dan melacak gerbang saat diterapkan. Ini disebut mode pelacakan , karena qubit dan gerbang sedang ditelusuri saat simulasi sedang dilakukan.
Kelemahan sirkuit yang dilacak adalah bahwa mereka hanya menangkap hasil pengukuran, dan aplikasi gerbang yang konsekuensinya, untuk satu simulasi. Dalam contoh di atas, jika hasil pengukuran adalah Zero
, Anda tidak melihat X
gerbang dalam diagram. Eksekusi lain dari simulasi dapat menunjukkan sirkuit yang sedikit berbeda.
Target profil
Profil yang saat ini dipilih target memengaruhi bagaimana diagram sirkuit dihasilkan. Target profil digunakan untuk menentukan kemampuan target perangkat keras, dan pembatasan yang diberlakukan pada program kuantum.
target Ketika profil diatur ke Tidak Dibatasi atau QIR Adaptive RI, diagram sirkuit menunjukkan operasi kuantum yang dipanggil dalam Q# program. target Ketika profil diatur ke basis QIR, diagram sirkuit menunjukkan operasi kuantum yang akan dijalankan pada perangkat keras jika program dikirimkan ke Azure Quantum dengan profil initarget.
Catatan
Untuk memilih target profil di Visual Studio Code, pilih Tampilkan -> Palet Perintah dan pilih Q#: Atur profil QIR target Azure Quantum. Anda dapat memilih
QIR base
,QIR Adaptive RI
, atauunrestricted
dari daftar dropdown.Untuk memilih target profil di Python, panggil
qsharp.init(target_profile=qsharp.TargetProfile.Base)
,qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RI)
atauqsharp.init(target_profile=qsharp.TargetProfile.Unrestricted)
.
Secara khusus, dekomposisi gerbang diterapkan yang akan membuat sirkuit yang dihasilkan kompatibel dengan kemampuan target perangkat keras. Ini adalah dekomposisi yang sama yang akan diterapkan selama pembuatan kode dan pengiriman ke Azure Quantum.
Misalnya, pertimbangkan program berikut Q# yang mengukur qubit dan array qubit.
import Std.Measurement.*; operation Main() : (Result, Result[]) { // The `M` operation performs a measurement of a single qubit in the // computational basis, also known as the Pauli Z basis. use q = Qubit(); let result = M(q); Reset(q); // The `MeasureEachZ` operation measures each qubit in an array in the // computational basis and returns an array of `Result` values. use qs = Qubit[2]; let results = MeasureEachZ(qs); return (result, results); }
Ketika target profil diatur ke Unrestricted atau QIR Adaptive RI, gerbang yang ditampilkan di sirkuit sesuai persis dengan operasi kuantum yang dipanggil dalam Q# program.
target Ketika profil adalah basis QIR, sirkuit terlihat berbeda. Karena profil targets Dasar tidak mengizinkan penggunaan kembali qubit setelah pengukuran, pengukuran sekarang dilakukan pada kubit terjerat sebagai gantinya. Karena
Reset
operasi bukan gerbang yang didukung di Profil Dasar, operasi akan dihilangkan. Sirkuit yang dihasilkan cocok dengan apa yang akan dijalankan pada perangkat keras jika program ini dikirimkan ke Azure Quantum dengan profil ini target .