Visual Studio Code için QDK uzantısında kuantum simülasyonları çalıştırın

VS Code Visual Studio Code (Q#) için OpenQASM (QDK) uzantısı, Microsoft ve Quantum Development Kit programlarını yerel seyrek simülatöründe otomatik olarak çalıştırır.

Bu makalede, programları yerel simülatörde çalıştırma ve Q# gürültüyü Pauli simülasyonlara ekleme işlemleri açıklanmaktadır. QDK Python'den diğer simülatörleri kullanmak için Python konusuna bakın.

Yerel simülatör nasıl çalışır?

Seyrek simülatör, kuantum durumunun yalnızca sıfır olmayan genliklerini depolar. Çoğu hesaplama temel genliği sıfır olduğunda, bu gösterim daha az bellek kullanır ve tüm genlikleri depolayan tam durum simülatörünün simüle edebildiğinden daha fazla kubite sahip bazı programları simüle edebilir.

Performans avantajı, kuantum durumunun hesaplama temelinde seyrek kalıp kalmadığına bağlıdır. Daha fazla bilgi için bkz. Jaques ve Häner (arXiv:2105.01533).

Bir kuantum programını VS Code içinde çalıştırın

  1. VS Code için QDK uzantısını yükleyin.
  2. Bir Q# (.qs) veya OpenQASM (.qasm) dosyası açın.
  3. Dosyanın başındaki veya Q#Main işleminin üstündeki CodeLens'ten Çalıştır'ı seçin.

Simülasyon çıktısı terminalde VS Code görünür. Q# programları için, programın çalışırken kuantum durumunu incelemek üzere Hata Ayıkla'yı seçin.

Simülasyonlara Q#gürültüPauli ekle

Seyrek simülatör, QDK programlar için Q# gürültüyü Pauli uzantısında destekler. Bir programda $X$, $Y$ ve $Z$ hatalarının olasılıklarını ayarlamak için Pauli kullanınConfigurePauliNoise. Uzantı QDK ayarları genel bir Pauli gürültü modelini de destekler.

Note

Uzantıdaki OpenQASM simülasyonuna QDK gürültü modeli ekleyemezsiniz. Q# veya NoiseConfig programları için işleme özgü gürültü modelleri oluşturmak üzere QDKPython paketini ve OpenQASM API'sini kullanın.

VS Code gürültü Pauli ayarlarda ekleme

  • VS Code içinde, Pauli uzantısı için QDK kullanıcı ayarında Q# programları için genel Q# gürültüyü ayarlayın.

QDK içindeki VS Codeuzantının genel Q#Pauli gürültü ayarlarının ekran görüntüsü.

Gürültü ayarları, Q# içindeki tüm programlardaki VS Code tüm geçitler, ölçümler ve kubitler için histogram sonuçlarına uygulanır.

Gürültü olmadan, bu GHZ örnek program için histogramda ölçümlerin yaklaşık yarısı için $\ket{00000}$ ve diğer yarısı için $\ket{11111}$ gösterilir.

import Std.Diagnostics.*;
import Std.Measurement.*;

operation Main() : Result[] {
    let num = 5;
    return GHZSample(num);
}

operation GHZSample(n: Int) : Result[] {
    use qs = Qubit[n];
    H(qs[0]);
    ApplyCNOTChain(qs);
    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

Gürültüsüz ve tüm kubitlerin sıfır olduğu veya tüm kubitlerin bir olduğu durumlarda tepelere sahip bir histogramın ekran görüntüsü.

%1 bit-flip gürültü oranında sonuçlar dağılmaya başlar. 25%'te histogram saf gürültüden ayırt edilemez.

1% ve 25% bit çevirme gürültü oranlarına sahip bir Q# programın histogramlarının ekran görüntüsü.

Tek tek Pauli programlara gürültü ekleme Q#

Bir Q#ConfigurePauliNoise programının gürültü modelini ayarlamak veya değiştirmek ve gürültünün ne zaman ve nerede oluşacağını denetlemek için kullanın.

Note

VS Code ayarları, tüm Q# programlara gürültü uygular, ancak ConfigurePauliNoise bu ayarları onu çağıran program için geçersiz kılar.

Önceki programda, kubit ayırmadan hemen sonra gürültü ekleyin:

operation GHZSample(n: Int) : Result[] {
    use qs = Qubit[n];

    // 5% bit-flip noise applies to all subsequent operations.
    ConfigurePauliNoise(0.05, 0.0, 0.0);

    H(qs[0]);
    ApplyCNOTChain(qs);
    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

Kubit ayrılmasından sonra %5 bit çevirme gürültüsü başladığında histogram sonuçlarının ekran görüntüsü.

Yalnızca ölçüm işlemine gürültü uygulamak için, gürültü modelini ölçümden hemen önce ayarlayın ve daha sonra temizleyin:

operation GHZSample(n: Int) : Result[] {
    use qs = Qubit[n];
    H(qs[0]);
    ApplyCNOTChain(qs);

    // Noise applies only to the measurement operation.
    ConfigurePauliNoise(0.05, 0.0, 0.0);

    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

Ölçümden hemen önce 5% bit çevirme gürültüsü başladığında histogram sonuçlarının ekran görüntüsü.

Programınızın farklı noktalarında gürültü yapılandırmasını değiştirmek veya temizlemek için ConfigurePauliNoise öğesini birden çok kez çağırın. Örneğin, Hadamard kapısına 5% bit çevirme gürültüsü uygulayın ve ardından programın geri kalanı için gürültü yapılandırmasını temizleyin.

operation GHZSample(n: Int) : Result[] {
    use qs = Qubit[n];

    // Noise applies to the H operation.
    ConfigurePauliNoise(0.05, 0.0, 0.0);
    
    H(qs[0]);

    // Clear the noise settings.
    ConfigurePauliNoise(0.0, 0.0, 0.0);
    
    ApplyCNOTChain(qs);
    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

Diğer Q# gürültü işlevleri

ConfigurePauliNoise tüm Pauli gürültü modellerini destekler. Gürültüyü yapılandırmak veya uygulamak için Std.Diagnostics ad alanındaki bu işlevleri ve işlemleri kullanın:

İşlev Description Örnek
ConfigurePauliNoise Simülasyon için gürültüyü ayarlar Pauli. Pauli $X$, $Y$ ve $Z$ hatalarının olasılıklarını veya bir Pauli gürültü modelini geçirin. Yapılandırma, bir Q# programındaki sonraki tüm geçitler, ölçümler ve kubitler için geçerlidir ve VS Code uzantısının gürültü ayarlarını geçersiz kılar. Sonraki çağrılar önceki yapılandırmaları geçersiz kılar. ConfigurePauliNoise(0.1, 0.0, 0.5)
veya
ConfigurePauliNoise(BitFlipNoise(0.1))
BitFlipNoise Belirtilen olasılıkta yalnızca Pauli $X$ hatalarıyla bir gürültü modeli döndürür. 10% bit çevirme gürültüsü:
ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0)
PhaseFlipNoise Belirtilen olasılıkta yalnızca Pauli $Z$ hataları olan bir gürültü modeli döndürür. 10% faz çevirme gürültüsü:
ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1)
DepolarizingNoise Pauli $X$, $Y$ ve $Z$ hataları için eşit olasılıklara sahip bir gürültü modeli döndürür. 6% depolarize edici gürültü:
ConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.02, 0.02, 0.02)
NoNoise Sıfır hata olasılığına sahip bir model döndürür. Geçerli gürültü yapılandırmasını temizlemek için bunu ConfigurePauliNoise öğesine iletin. ConfigurePauliNoise(NoNoise()) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.0)
ApplyIdleNoise Simülasyon sırasında tek bir kubite yapılandırılmış gürültü uygular. ...
use q = Qubit[2];
ConfigurePauliNoise(0.1, 0.0, 0.0);
ApplyIdleNoise(q[0]);
...