Ile kuantum devresi diyagramlarını görselleştirme Q#

Kuantum devresi diyagramları, kuantum işlemlerinin görsel bir gösterimidir. Kubitlerin, kendilerine uygulanan geçitler ve ölçümler de dahil olmak üzere kuantum programı aracılığıyla akışını gösterirler.

Bu makalede, Visual Studio Code ve Jupyter Notebook'ları kullanarak kuantum devre diyagramlarıyla kuantum algoritmalarını görsel olarak temsil etmeyi öğreneceksiniz.

Kuantum devresi diyagramı kuralları hakkında daha fazla bilgi için bkz . Kuantum devreleri kuralları.

Önkoşullar

Kuantum devrelerini görselleştirmek için Visual Studio Code kullanmak istiyorsanız şunları yapmanız gerekir:

Visual Studio Code ile kuantum devreleri

Visual Studio Code'da programların kuantum devrelerini Q# görselleştirmek için bu adımları izleyin. Kuantum devresi diyagramı kuralları hakkında daha fazla bilgi için bkz . Kuantum devreleri kuralları.

Bir Q# program için devre diyagramlarını görüntüleme

  1. Q# bir dosyayı Visual Studio Code açın veya kuantum örneklerinden birini yükleyin.

  2. Programın kuantum devresini Q# görselleştirmek için Görünüm -> Komut Paleti'ni seçin ve "devre" yazın. Bu seçenek : Bağlantı hattını göster seçeneğini ortaya çıkarmalıdırQ#. Ayrıca, aşağıdaki @EntryPoint()komut listesinden Devre'ye tıklayabilirsiniz.

    kod merceği bağlantı hattı komutunun Q# nerede bulunacağı Visual Studio Code dosyasının ekran görüntüsü.

  3. Devre, devre penceresinde görüntülenir Q# . Örneğin, aşağıdaki bağlantı hattı bir kubiti bir süper pozisyona yerleştiren ve ardından ölçen bir işleme karşılık gelir. Devre diyagramı, |0⟩ durumuna başlatıldığı bir kubit yazmaç gösterir. Ardından kubite bir Hadamard kapısı ( H) uygulanır ve ardından ölçüm simgesiyle temsil edilen bir ölçüm işlemi uygulanır.

    Q# Rastgele bit işlemi için sonuçta elde edilen devre diyagramını gösteren devre penceresinin ekran görüntüsü.

İşlemler için devre diyagramlarını görüntüleme

Kuantum devresini tek Q# bir işlem için görselleştirebilirsiniz. Bunu yapmak için işlem bildiriminin üzerinde görünen kod merceğindeki Devre düğmesine tıklayın.

Programda hata ayıkladıktan sonra devreleri devreler bölmesinde görselleştirmeyi Q# gösteren Visual Studio Code ekran görüntüsü.

Hata ayıklama sırasında devre diyagramlarını görüntüleme

Bir Q#programda hata ayıklarken, kuantum devresini programın geçerli durumuna göre görselleştirebilirsiniz.

  1. Aşağıdaki @EntryPoint()kod merceği komutları listesinden Hata Ayıkla düğmesine tıklayın.

  2. Sol taraftaki Çalıştır ve hata ayıklama görünümünde, programda ilerlerken devreyi göstermek için Değişkenler bölmesinin altındaki Kuantum Devresi bölümünü genişletin.

    Bir programda hata ayıklarken bağlantı hattının nasıl görselleştiriliyor olduğunu gösteren Visual Studio Code ekran görüntüsü.

  3. Program çalıştırılırken bağlantı hattı güncelleştirmesini görmek için kodda adım adım ilerleyebilir ve çeşitli noktalarda kesme noktaları ayarlayabilirsiniz.

  4. Geçerli kuantum devresi Devre panelinde gösterilirQ#. Bu devre diyagramı simülatörün geçerli durumunu, yani geçerli yürütme noktasına kadar uygulanan kapıları temsil eder.

    Tek bir Q# işlem için bağlantı hattını görselleştirmeyi gösteren Visual Studio Code ekran görüntüsü.

Jupyter Notebooks ile kuantum devreleri

Jupyter Notebooks'ta, paketini kullanarak qsharp-widgets kuantum devrelerini görselleştirebilirsiniz. Bu paket, kuantum devresi diyagramını SVG görüntüsü olarak işleyen bir pencere öğesi sağlar.

  1. Visual Studio Code'da Komut paleti Görüntüle'yi > seçin ve İçerik Oluşturucu: Yeni Jupyter Notebook'yi seçin.

  2. Not defterinin ilk hücresinde aşağıdaki kodu çalıştırarak modülü içeri aktarınQ#.

    import qsharp
    
  3. Yeni bir hücre ekleyin ve kodu girin Q# . Örneğin, aşağıdaki kod bir Bell State hazırlar.

    %%qsharp
    
    // Prepare a Bell State.
    use register = Qubit[2];
    H(register[0]);
    CNOT(register[0], register[1]);
    
  4. işlevini kullanarak dump_circuit() programın geçerli durumuna göre bir kuantum devresi görüntüleyebilirsiniz. Örneğin, devre diyagramı |0⟩ durumuna başlatılan iki kubit yazmaç gösterir. Ardından, ilk kubite bir Hadamard kapısı ( H) uygulanır. Bundan sonra, denetim olarak ilk kubit kullanılarak bir CNOT kapısı uygulanır; bu nokta olarak gösterilir ve ikinci kubit targetde X olarak gösterilir.

    qsharp.dump_circuit()
    
    q_0    ── H ──── ● ──
    q_1    ───────── X ──
    
  5. Paketini kullanarak qsharp-widgets kuantum devrelerini SVG görüntüsü olarak görselleştirebilirsiniz. Bu durumda, CNOT kapısı iki kubiti bağlayan bir çizgi olarak temsil edilir ve denetim kubiti üzerinde bir nokta ve kubit üzerinde target bir kesişim çizilir. Daha fazla bilgi için bkz . Kuantum devreleri kuralları.

    from qsharp_widgets import Circuit
    
    Circuit(qsharp.dump_circuit())
    

    İşlem için bağlantı hattını görselleştirmeyi gösteren bir Q# Jupyter Notebook ekran görüntüsü.

Giriş ifadesi için devre diyagramlarını görüntüleme

Giriş ifadesini çağırıp qsharp.circuit() bağımsız değişken olarak geçirerek giriş ifadesi içeren herhangi bir program için devre diyagramı oluşturabilirsiniz.

  1. Örneğin, yeni bir hücre ekleyin ve GHZ durumunu hazırlayan aşağıdaki kodu kopyalayın.

    %%qsharp
    
    open Microsoft.Quantum.Diagnostics;
    open Microsoft.Quantum.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. Yeni bir hücre ekleyin ve bağlantı hattını görselleştirmek için aşağıdaki kodu çalıştırın. Örneğin, 3 kubitli bir GHZ durumu hazırlayın.

    Circuit(qsharp.circuit("GHZSample(3)"))
    

Kubitli işlemler için devre diyagramlarını görüntüleme

Kubitleri veya kubit dizilerini alan herhangi bir işlem için devre diyagramları oluşturabilirsiniz. Diyagramda giriş kubiti kadar kablo ve işlem içinde ayrılan ek kubitler gösterilir. İşlem bir kubit (Qubit[])dizisi aldığında, bağlantı hattı dizisini 2 kubitin bir yazmaç olarak gösterir.

  1. Yeni bir hücre ekleyin ve aşağıdaki örneği kopyalayın. Bu kod bir kedi durumu hazırlar.

    %%qsharp
    
    operation PrepareCatState(register : Qubit[]) : Unit {
        H(register[0]);
        ApplyToEach(CNOT(register[0], _), register[1...]);
    }
    
  2. Yeni bir hücre ekleyin ve işlemin devresini PrepareCatState görselleştirmek için aşağıdaki kodu çalıştırın.

    Circuit(qsharp.circuit(operation="PrepareCatState"))
    

Devre diyagramlarını etkileyen koşullar

Kuantum devrelerini görselleştirirken, aşağıdaki koşullar devre diyagramının görselleştirmesini etkileyebilir.

Dinamik devreler

Devre diyagramları, bir Q# program içindeki tüm klasik mantık yürütülerek ve ayrılmış kubitleri veya uygulanan geçitleri izleyerek oluşturulur. Döngüler ve koşullular yalnızca klasik değerlerle ilgilendikleri sürece desteklenir.

Ancak, döngüler ve kubit ölçüm sonuçlarını kullanan koşullu ifadeler içeren programlar, devre diyagramıyla temsil etmek için daha karmaşıktır. Örneğin, aşağıdakine benzer bir ifade

if (M(q) == One) {
   X(q)
}

geçitleri bir ölçüm sonucu üzerinde koşullu olduğundan, basit bir devre diyagramı ile temsil edilemez. Böyle bir devreye dinamik devre adı verilir.

Devre diyagramları, programı kuantum simülatöründe çalıştırarak ve uygulandıkça geçitleri izleyerek dinamik devreler için oluşturulabilir. Bu, simülasyon yapılırken kubitler ve geçitler izlendiğinden izleme modu olarak adlandırılır.

İzlenen devrelerin dezavantajı, tek bir simülasyon için yalnızca ölçüm sonucunu ve sonuçta elde edilen kapı uygulamalarını yakalamasıdır. Yukarıdaki örnekte ölçüm sonucu ise Zero, diyagramda geçidi görmezsiniz X . Simülasyonun başka bir çalıştırması biraz farklı bir devre gösterebilir.

Hedef profil

Şu anda seçili target olan profil, devre diyagramlarının nasıl oluşturulduğunu etkiler. Hedef profiller, donanımın özelliklerini target ve kuantum programına uygulanan kısıtlamaları belirtmek için kullanılır.

target Profil Sınırsız olarak ayarlandığında, devre diyagramları programda Q# çağrılan kuantum işlemlerini gösterir. target Profil QIR tabanına ayarlandığında devre diyagramları, program bu target profille Azure Quantum'a gönderilirse donanımda çalıştırılacak kuantum işlemlerini gösterir.

Not

  • VS Code'da profil seçmek target için Görünüm -> Komut Paleti'ne gidin ve şunu yazın Q#: Azure Quantum QIR target profilini ayarlayın. Açılan listeden veya QIR Base Profile seçebilirsinizUnrestricted.

  • Python'da profil seçmek target için veya qsharp.init(target_profile=qsharp.TargetProfile.Base)yazınqsharp.init(target_profile=qsharp.TargetProfile.Unrestricted).

Özellikle, elde edilen bağlantı hattının donanımın özellikleriyle uyumlu olmasını sağlayacak kapı ayrıştırmaları target uygulanır. Bunlar, kod oluşturma ve Azure Quantum'a gönderme sırasında uygulanan ayrıştırmalarla aynıdır.

  1. Örneğin, bir kubiti ve kubit dizisini ölçen aşağıdaki Q# programı göz önünde bulundurun.

    namespace Sample {
        open Microsoft.Quantum.Measurement;
    
        @EntryPoint()
        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. target Profil Kısıtlanmamış olarak ayarlandığında, bağlantı hattında görüntülenen geçitler, programda çağrılan kuantum işlemlerine Q# tam olarak karşılık gelir.

    Profil Kısıtlanmamış olduğunda target kuantum devrelerinin ekran görüntüsü.

  3. target Profil QIR tabanı olduğunda bağlantı hattı farklı görünür. Temel Profil targets ölçümden sonra kubitin yeniden kullanılmasına izin vermediğinden, ölçüm artık dolanık kubit üzerinde gerçekleştirilir. Reset İşlem Temel Profilde desteklenen bir geçit olmadığından bırakılır. Sonuçta elde edilen bağlantı hattı, bu program bu profille Azure Quantum'a gönderilirse donanımda çalıştırılacak bağlantı hattıyla target eşleşir.

    Profil QIR tabanı olduğunda target kuantum devrelerinin ekran görüntüsü.