Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De Microsoft Quantum Development-kit (QDK) bevat een set kwantumsimulators die modelleren hoe uw programma wordt uitgevoerd op een kwantumcomputer. Programma's die u op een kwantumcomputer uitvoert, bevatten altijd een bepaald type en mate van ruis.
QDK
Python Met het pakket kunt u aangepaste ruismodellen bouwen voor gebruik in uw simulaties via de NoiseConfig API.
Zie De QDKQDK simulatoren.
Soorten ruis
Elke bewerking of instructie in een kwantumprogramma kan ruis veroorzaken. De volgende tabel bevat alle bewerkingen en instructies waarvoor u ruis kunt instellen.
| Ruisbron | Ruismodelparameter | Bronbeschrijving |
|---|---|---|
| $X$ poort | x |
Enkelqubit-Pauli-poort, bitflip |
| $Y$ poort | y |
Single-qubit-Pauli-poort, bitomkering en faseomkering |
| $Z$ poort | z |
Enkelqubit-Pauli-poort, faseomkering |
| $H$ poort | h |
Hadamard-poort met één qubit, maakt gelijke superpositiestatus |
| $S$ poort | s |
Enkel-qubitpoort, halve-pi faseomkering |
| $S^\dagger$-poort | s_adj |
Eén qubitpoort, aangrenzend aan $S$ |
| $T$ poort | t |
Poort met één qubit, quarter-pi-faselip |
| $T^\dagger$-poort | t_adj |
Eén qubitpoort, aangrenzend aan $T$ |
| $S_X$-poort | sx |
Poort met één qubit, halve bit flip |
| $S_X^\dagger$-poort | sx_adj |
Eén qubitpoort, aangrenzend aan $S_X$ |
| $R_X$-poort | rx |
Enkel-qubitpoort, algemene faserotatie rond de $x$-as |
| $R_Y$-poort | ry |
enkel-qubitpoort, algemene faserotatie om de $y$-as |
| $R_Z$-poort | rz |
enkel-qubitpoort, algemene faserotatie rond de $z$-as |
| $CX$ poort | cx |
Twee qubitpoorten, gecontroleerde $X$ poort |
| $CY$ poort | cy |
Twee qubitpoorten, gecontroleerde $Y$ poort |
| $CZ$ poort | cz |
Twee qubitpoorten, gecontroleerde $Z$ poort |
| $R_{XX}$ poort | rxx |
Twee qubitpoorten, vergelijkbaar met $R_X$ |
| $R_{YY}$ poort | ryy |
Twee qubitpoorten, vergelijkbaar met $R_Y$ |
| $R_{ZZ}$ poort | rzz |
Twee qubitpoorten, vergelijkbaar met $R_Z$ |
| $SWAP$ poort | swap |
Twee qubit-gate, wisselt de statussen van de qubits |
| $CCX$ poort | ccx |
Poort met drie qubits, twee qubit gecontroleerde-$X$ poort |
| Qubitverplaatsing | mov |
Verplaatsing van qubits tussen zones van het apparaat (voor simulatie van een neutraal-atoomapparaat) |
| Qubitmeting | mz |
Meting van één qubit in de Pauli-$Z$-basis |
| Meting en reset van qubits | mresetz |
Meting met één qubit en opnieuw instellen op de status 0 |
Met NoiseConfig, kunt u vier verschillende soorten ruis toepassen op de voorgaande bewerkingen met specifieke waarschijnlijkheden. De volgende tabel bevat de parameters voor het ruistype waarmee u kunt instellen NoiseConfig, inclusief een parameter voor geen ruis.
| Ruistype | Ruismodelparameter | Beschrijving van ruis | Voorbeeld van gebruik | Voorbeeldbeschrijving |
|---|---|---|---|---|
| Pauli $X$ ruis | x |
Bit flippen | noise.z.x = 0.03 |
Bitflip treedt op bij 3% van de $Z$-bewerkingen |
| Pauli $Y$ ruis | y |
Bit flippen en fase flippen | noise.sx.y = 0.01 |
Bit-flip en fase-flip vinden plaats in 1% van $S_X$ bewerkingen |
| Pauli $Z$ ruis | z |
Fase-omkering | noise.h.z = 0.02 |
Fasespiegeling vindt plaats in 2% van $H$ bewerkingen |
| Geen ruis | i |
Identiteitsbewerking, geen effect | noise.cz.ix = 0.02 |
Bitflip op alleen de doeldqubit vindt plaats bij 2% van de $CZ$-bewerkingen. |
| Qubitverlies | l |
Qubit is verloren gegaan uit het apparaat | noise.mov.l = 0.03 |
Qubit gaat verloren in 3% van bewegingen tussen apparaatzones op een neutrale kwantumcomputer |
De ruis treedt op na de bronbewerking, niet in plaats van de bronbewerking. Betekent bijvoorbeeld noise.z.x dat het programma de beoogde $Z$ poort toepast op de qubit en vervolgens een onbedoelde $X$ poort toepast op de qubit. Omdat de ruis na de bron van toepassing is, kunt u ruis configureren die hetzelfde effect heeft als de bron.
noise.x.x voert bijvoorbeeld een onbedoelde bitomkering uit na de bedoelde bitomkering.
Note
De neutraal atom-apparaatsimulatie-API's ondersteunen ruis van een beperkt aantal bronnen. Zie voor meer informatie Hoe u ruismodellen bouwt voor simulaties van apparaten met neutrale atomen in de QDK.
Een ruismodel bouwen
Als u een ruismodel voor een simulatie wilt maken en de effecten van die ruis op de resultaten van uw kwantumprogramma wilt bekijken, volgt u deze stappen.
Open VS Codehet menu Beeld en kies Opdrachtpalet.
Voer Creëren: Nieuw Jupyter Notebook in. Er wordt een leeg Jupyter Notebook bestand geopend op een nieuw tabblad.
Importeer de vereiste Python objecten in de eerste cel van het notebook.
from qdk import init, TargetProfile from qdk.openqasm import compile from qdk.simulation import NoiseConfig, run_qir from qdk.widgets import HistogramStel in een nieuwe cel het QIR-doelprofiel van het apparaat in en compileer uw OpenQASM-circuit in QIR.
init(target_profile=TargetProfile.Base) qasm_src = """ include "stdgates.inc"; qubit[2] qs; bit[2] r; h qs[0]; cx qs[0], qs[1]; r = measure qs; """ qir = compile(qasm_src)Maak een
NoiseConfigobject en bouw uw ruismodel.noise = NoiseConfig() noise.h.x = 0.01 noise.cx.zi = 0.02Deze code produceert het volgende ruismodel, waarbij de ruissnelheid de waarschijnlijkheid is dat de bron het bijbehorende type ruis veroorzaakt.
Ruisbron Ruistype Ruissnelheid $H$ poort Bit flippen 1% $CX$ poort Faseomkering op de controlqubit 2% Voer de simulator uit met het ruismodel en bekijk een histogram met meetresultaten. Voer bijvoorbeeld de volgende code uit om 1000 opnamen van uw programma te simuleren in de Clifford-simulator.
results = run_qir(qir, shots=1000, noise=noise, type="clifford") Histogram(results, labels="kets")Als u de ruisresultaten wilt vergelijken met een ruisloze simulatie, voert u de simulatie opnieuw uit zonder ruismodel.
results = run_qir(qir, shots=1000, type="clifford") Histogram(results, labels="kets")
Verschillende soorten ruis instellen op dezelfde bron
U kunt verschillende soorten ruis op dezelfde bron modelleren, met verschillende waarschijnlijkheden voor elk type ruis. Met de volgende code wordt bijvoorbeeld ingesteld dat er na een Hadamard-poort 1% kans is op een bitflip en 3% kans op een faseflip.
noise.h.x = 0.01
noise.h.z = 0.03
Wanneer u meerdere ruistypen voor dezelfde bewerking configureert, kan slechts één ruistype worden toegepast op elke bewerking in uw programma. Elke Hadamard-poort kan bijvoorbeeld $X$ ruis of $Z$ ruis hebben, maar niet beide.
Functies van het ruismodel
In plaats van parameters voor ruismodellen kunt u de volgende set ruisfuncties gebruiken om uw ruismodel te bouwen.
Pauli-ruis instellen
Als u Pauli-ruis in uw model wilt opnemen, roept u de set_pauli_noise functie aan op een poort- of bewegingsbewerking.
Voor bewerkingen met één qubit geeft u een Pauli-tekenreeks met één teken en een ruissnelheid door. Met de volgende code wordt bijvoorbeeld een 1% kans ingesteld dat een bit flip optreedt tijdens de qubitverplaatsing.
# Equivalent to: noise.mov.x = 0.01
noise.mov.set_pauli_noise('X', 0.01)
Geef voor bewerkingen met twee qubits een Pauli-tekenreeks met twee tekens en een ruissnelheid door. Het eerste teken van de Pauli-tekenreeks komt overeen met ruis op de controle-qubit en het tweede teken komt overeen met ruis op de doel-qubit. De volgende code stelt bijvoorbeeld gecorreleerde faseflips in bij 1% van de $CX$-bewerkingen.
# Equivalent to: noise.cx.zz = 0.01
noise.cx.set_pauli_noise('ZZ', 0.01)
Depolariserende ruis instellen
De set_depolarizing functie stelt gelijke maar niet-gerelateerde ruissnelheden in voor alle drie de soorten Pauli-ruis. Met de volgende code wordt bijvoorbeeld een 3% kans ingesteld dat Pauli-ruis optreedt na een $H$-bewerking, gelijkmatig verdeeld als een kans van 1% voor elk van de drie Pauli-ruistypen.
# Equivalent to:
# noise.h.x = 0.01
# noise.h.y = 0.01
# noise.h.z = 0.01
noise.h.set_depolarizing(0.03)
Bit flip-ruis instellen
Als u het ruisniveau voor bitflips wilt instellen, gebruikt u de set_bitflip functie op een poortbewerking of bewegingsbewerking. Bijvoorbeeld stelt de volgende code een kans van 1% in dat er na een $R_Z$-bewerking een faseomkering optreedt.
# Equivalent to: noise.rz.x = 0.01
noise.rz.set_bitflip(0.01)
Faseomkeringsruis instellen
Als u het ruisniveau wilt instellen voor faseflips in een bewerking, gebruikt u de set_phaseflip functie op een poort- of bewegingsbewerking. De volgende code stelt bijvoorbeeld een kans van 1% in dat er na een $R_Y$-bewerking een faseomkering optreedt.
# Equivalent to: noise.ry.z = 0.01
noise.ry.set_phaseflip(0.01)