So erstellen Sie Rauschmodelle für Simulationen von Neutralatom-Geräten im QDK

Die Microsoft Quantum Development Kit (QDK) enthält eine Reihe von neutralen Atomgerätesimulations-APIs, mit denen Sie modellieren können, wie Ihr Programm auf einem neutralen Atom-Quantencomputer ausgeführt wird. Diese APIs modellieren die Typen von Rauschen, die speziell auf neutraler Atomhardware auftreten. Mit QDKPython dem Paket können Sie Rauschmodelle für Simulationen mit der NoiseConfig Klasse erstellen.

Weitere Informationen zu Rauschmodellen in Simulationen mit QDK finden Sie unter So erstellen Sie Rauschmodelle für Quantensimulationen in QDK.

Anweisungen zum Installieren und Verwenden der QDK Simulatoren finden Sie unter Installieren und Ausführen der QDK Quantensimulatoren.

Die neutralen Atomgerätesimulations-APIs

Dazu QDK gehören zwei neutrale Atomgerätesimulations-APIs NeutralAtomDevice und NeutralAtomBackend. Diese APIs modellieren das Rauschen, das speziell auf neutralen Atom-Quantencomputern auftritt. Weitere Informationen finden Sie unter Simulieren von Quantenprogrammen auf neutraler Atomgerätehardware.

Arten von Rauschen in neutralen Atomgerätesimulatoren

In neutralen Atomgeräten bewegen Laser physisch die Qubits zwischen verschiedenen Zonen im Gerät. Rauschen können in den folgenden Situationen in neutralen Atomgeräten auftreten:

  • Qubit-Bewegungen zwischen Zonen
  • Quanten-Gatter-Operationen auf Qubits im Interaktionsbereich
  • Qubit-Messungen in der Messzone

Geräte auf Basis neutraler Atome haben einen begrenzten Satz an Quantentoren. Neutralatom-Gerätesimulationen in QDK unterstützen Rauschen aus den folgenden Quellen.

Rauschquelle Rauschmodellparameter Quellbeschreibung
$S_X$-Quantengatter sx Einzel-Qubit-Gate, Halbbit-Flip
$R_Z$-Quantengatter rz Single-Qubit-Gate, allgemeine Phasendrehung
$CZ$ Quantengatter cz Zwei-Qubit-Gate, kontrolliertes $Z$ Phasen-Flip
Qubit-Messung und Zurücksetzen mresetz Single-Qubit-Messung und Zurücksetzen auf den Zustand 0
Qubit-Bewegung mov Qubit-Bewegung zwischen Gerätezonen

Für diese Rauschquellen können Sie alle Rauschtypen konfigurieren, die von den QDK Simulatoren unterstützt werden.

Ihr Quantenprogramm kann jede Art von Gate enthalten, die das QIR-Zielprofil unterstützt. Die neutralen Atomsimulations-APIs kompilieren die Eingabe-QIR und zerlegen die Tore Ihres Programms in den Satz von Toren, die auf neutralen Atomgeräten vorhanden sind: $S_X$, $R_Z$ und $CZ$. Wenn Sie NeutralAtomDevice und NeutralAtomBackend für Ihre Simulationen verwenden, konfigurieren Sie kein Rauschen für andere Gatter, da sich dieses Rauschen nicht auf diese Simulation auswirkt. Wenn Ihr Programm beispielsweise Hadamard-Tore enthält und Sie Rauschen für Hadamard-Tore konfigurieren, wird dieses Rauschen in der Simulation nicht angezeigt, da die Hadamard-Tore in neutrale Atomgerätetore zerlegt werden.

Die neutralen Atomsimulations-APIs konvertieren alle Messungen in Ihrem Programm in Mess- und Rücksetzungsanweisungen. Um Messrauschen zu berücksichtigen, konfigurieren Sie das Messrauschen auf mresetz. Das Rauschen an mz wird in der Simulation nicht berücksichtigt.

Erstellen eines Rauschmodells zur Simulation eines Neutralatom-Geräts

Führen Sie die folgenden Schritte aus, um ein Rauschmodell zur Simulation eines Neutralatom-Geräts zu erstellen.

  1. VS CodeÖffnen Sie im Menü "Ansicht" das Menü "Ansicht", und wählen Sie "Befehlspalette" aus.

  2. Geben Sie "Erstellen: Neu" Jupyter Notebookein. Eine leere Jupyter Notebook Datei wird auf einer neuen Registerkarte geöffnet.

  3. Importieren Sie in der ersten Zelle des Notizbuchs die erforderlichen Python Objekte.

    from qdk import init, TargetProfile
    from qdk.openqasm import compile
    from qdk.simulation import NeutralAtomDevice, NoiseConfig
    from qdk.widgets import Histogram
    
  4. Legen Sie in einer neuen Zelle das Geräte-QIR-Zielprofil fest und kompilieren Sie ein OpenQASM-Programm 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)
    
  5. Erstellen Sie ein NoiseConfig-Objekt, um Ihr Rauschmodell zu erstellen. Führen Sie beispielsweise den folgenden Code in einer neuen Zelle aus.

    noise = NoiseConfig()
    
    noise.sx.x = 0.01
    noise.rz.z = 0.01
    noise.cz.iy = 0.02
    noise.mov.loss = 0.005
    

    Dieser Code erzeugt das folgende Rauschmodell, wobei das Rauschverhältnis die Wahrscheinlichkeit ist, mit der die Quelle den entsprechenden Rauschtyp verursacht.

    Rauschquelle Rauschtyp Rauschrate
    $S_X$ Gate Bit-Flip 1 %
    $R_Z$-Gate Phasendrehung 1 %
    $CZ$-Gate Bitflipping und Phasenflipping auf dem Ziel-Qubit 2%
    Qubit-Bewegung Qubit-Verlust 0,5 %
  6. Führen Sie den Simulator mit dem Rauschmodell aus, und zeigen Sie ein Histogramm der Messergebnisse an. Führen Sie beispielsweise den folgenden Code in einer neuen Zelle aus, um 1.000 Aufnahmen Ihres Programms im Clifford-Simulator auszuführen.

    device = NeutralAtomDevice()
    
    results = device.simulate(qir, shots=1000, noise=noise, type="clifford")
    Histogram(results, labels="kets")