Sparsní kvantový simulátor

Řídký simulátor využívá zhuštěnou reprezentaci kvantových stavových vektorů. Řídký kvantový stav je stav, ve kterém je většina amplitudových koeficientů nula. Řídké reprezentace umožňují řídkému simulátoru minimalizovat nároky na paměť vyžadované k reprezentaci kvantových stavů, což umožňuje simulaci nad větším počtem qubitů. Řídký simulátor je efektivní pro programy s kvantovými stavy, které jsou řídké ve výpočetním základu. Řídký simulátor umožňuje uživatelům zkoumat větší aplikace než simulátor plného stavu, protože simulátory plného stavu plýtvají pamětí a časem na exponenciálně velký počet nulových amplitud.

Další informace o řídkém simulátoru viz Jaques a Häner (arXiv:2105.01533).

Zavolejte sporý simulátor

Řídký simulátor je výchozí místní simulátor v rozšíření MicrosoftQuantum Development Kit (QDK) pro Visual Studio Code (VS Code). Způsob použití simulátoru závisí na vašem vývojovém prostředí.

Vývojové prostředí Jak použít řídký simulátor
V programu Q# nebo OpenQASM v VS Code Spusťte soubor Q# nebo OpenQASM
V programu Python s balíčkem qdk qsharp.run
nebo
openqasm.run
nebo
qiskit.QSharpBackend
V buňce poznámkového %%qsharp bloku Zavolejte vstupní operaci programu, například:
Main()

Přidejte Pauli šum do řídkého simulátoru v VS Code

Řídký simulátor podporuje přidání šumu Pauli do simulací vašich Q# programů s rozšířením VS Code . Tato funkce umožňuje simulovat účinky šumu na kvantové operace a měření. K určení modelu šumu v Q# programu použijte ConfigurePauliNoise funkci. Funkce nastaví pravděpodobnosti pro Pauli operátory X, Y a Z, aby došlo k šumu. V nastavení rozšíření můžete také nakonfigurovat globální modely šumu.

Přidejte Pauli šum pomocí VS Code nastavení.

Pokud chcete nastavit globální Pauli šum pro Q# programy v VS Code, nakonfigurujte Q#> Simulaci:Pauli Nastavení uživatelského šumu pro QDK rozšíření.

Snímek obrazovky, který zobrazuje globální Q# nastavení šumu QDK pro rozšíření v VS Codesouboru .

Nastavení šumu platí pro výsledky histogramu pro všechna hradla, měření a qubity ve všech Q# programech v VS Code.

Například histogram pro následující ukázkový program GHz bez nakonfigurovaného šumu ukazuje výsledek $\ket{00000}$ přibližně pro polovinu měření a $\ket{11111}$ pro druhou polovinu.

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;
}

Snímek obrazovky zobrazující výsledky bez šumu

Pokud přidáte jen 1% míru šumu způsobeného překlápěním bitů, začnou se výsledky rozptylovat. Při 25% bit-flip šumu je histogram nerozeznatelný od samotného šumu.

Snímek obrazovky QDKVS Code s výsledky histogramu pro program s 1% a 25% rychlostí šumu způsobeného překlopením bitů

Přidání Pauli šumu do jednotlivých Q# programů

ConfigurePauliNoise Pomocí funkce můžete nastavit nebo upravit model šumu pro jednotlivé Q# programy. Funkce ConfigurePauliNoise vám dává kontrolu nad tím, kdy a kde ve vašich Q# programech dochází k šumu.

Poznámka:

Pokud v nastavení nakonfigurujete šum VS Code , použije se šum pro všechny Q# programy. Funkce ConfigurePauliNoise však přepíše nastavení šumu VS Code pro program, který funkci volá.

Například v předchozím programu můžete přidat šum hned po přidělení qubitu.

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

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

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

Snímek obrazovky znázorňující výsledky histogramů s šumem přidaným po přidělení qubitu

Nebo můžete přidat šum pouze do operace měření.

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

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

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

Snímek obrazovky znázorňující výsledky histogramu s šumem přidaným těsně před měřením

Pokud chcete upravit nebo vymazat konfigurace šumu v různých bodech programu, zavolejte ConfigurePauliNoise několikrát. Můžete například nastavit 5% chyby překlápění bitů pro Hadamardovu bránu a pak žádný šum nenastavovat pro zbytek programu.

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;
}

Další Q# funkce šumu

Funkce ConfigureNoiseFunction je dostatečná k modelování jakéhokoli druhu šumu Pauli v programu, ale Q# má další funkce šumu, které můžete také použít. V knihovně Std.Diagnostics jsou k dispozici následující funkce pro konfiguraci šumu v Q# programech:

Funkce Description Example
ConfigurePauliNoise Nakonfiguruje Pauli šum pro spuštění simulátoru. Parametry představují pravděpodobnosti šumu brány Pauli X, Y a Z. Konfigurace šumu se vztahuje na všechny následné brány, měření a qubity v Q# programu. Přepíše nastavení šumu VS Code rozšíření. Následná volání přepíší šum nastavený předchozími voláními prostřednictvím ConfigurePauliNoise. ConfigurePauliNoise(0.1, 0.0, 0.5)
nebo
ConfigurePauliNoise(BitFlipNoise(0.1))
BitFlipNoise Konfiguruje pouze šum brány X se zadanou pravděpodobností. 10% šum z bit-flipů
ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0)
PhaseFlipNoise Konfiguruje pouze šum brány Z se zadanou pravděpodobností. 10% šum při překlápění fáze
ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1)
DepolarizingNoise Konfiguruje šum tak, aby s rovnoměrnou pravděpodobností používal bránu X, Y nebo Z. 6% depolarizační šum
ConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.2, 0.2, 0.2)
NoNoise Resetuje model šumu tak, aby neměl žádný šum. ConfigurePauliNoise(NoNoise()) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.0)
ApplyIdleNoise Použije nakonfigurovaný šum na jeden qubit během simulace. ...
use q = Qubit[2];
ConfigurePauliNoise(0.1, 0.0, 0.0);
ApplyIdleNoise(q[0]);
...