Bagikan melalui


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

Jupyter Notebooks

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#

  1. Q# Buka file di Visual Studio Code, atau muat salah satu sampel kuantum.

  2. 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().

    Q# Cuplikan layar file di Visual Studio Code memperlihatkan tempat menemukan perintah sirkuit lensa kode.

  3. 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.

    Cuplikan layar jendela Q# sirkuit memperlihatkan diagram sirkuit yang dihasilkan untuk operasi bit acak.

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.

Cuplikan layar Visual Studio Code memperlihatkan cara memvisualisasikan sirkuit di Q# panel sirkuit setelah menelusuri kesalahan program.

Menampilkan diagram sirkuit saat penelusuran kesalahan

Saat men-debug Q# program, Anda dapat memvisualisasikan sirkuit kuantum berdasarkan status program saat ini.

  1. Pilih tombol Debug dari daftar perintah lensa kode sebelumnya Main().

  2. Di tampilan Jalankan dan debug di sisi kiri, perluas bagian Sirkuit Quantum di bawah panel Variabel untuk menampilkan sirkuit saat Anda menelusuri program.

    Cuplikan layar Visual Studio Code memperlihatkan cara memvisualisasikan sirkuit saat menelusuri kesalahan program.

  3. Anda dapat menelusuri kode dan mengatur titik henti di berbagai titik untuk melihat pembaruan sirkuit saat program dijalankan.

  4. 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.

    Cuplikan layar Visual Studio Code memperlihatkan cara memvisualisasikan sirkuit untuk satu Q# operasi.

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.

  1. Di Visual Studio Code, pilih Tampilkan > palet Perintah dan pilih Buat: Jupyter Notebook Baru.

  2. Di sel pertama notebook, jalankan kode berikut untuk mengimpor Q# modul.

    import qsharp
    
  3. 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]);
    
  4. 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 ──
    
  5. 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())
    

    Cuplikan layar Jupyter Notebook memperlihatkan cara memvisualisasikan sirkuit untuk Q# operasi.

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.

  1. 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;
    }
    
  2. 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.

  1. 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...]);
    }
    
  2. 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, atau unrestricted 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)atau qsharp.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.

  1. 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);
    }
    
  2. 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.

    Cuplikan layar sirkuit kuantum saat target profil Tidak Dibatasi.

  3. 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 .

    Cuplikan layar sirkuit kuantum saat target profil adalah basis QIR.