で中性原子デバイスシミュレーション用のノイズモデルを構築する方法 QDK

Microsoft Quantum Development Kit (QDK) には、ニュートラル原子量子コンピューターでのプログラムの実行方法をモデル化するために使用できる一連のニュートラルアトム デバイス シミュレーション API が含まれています。 これらの API は、ニュートラル アトム ハードウェア上で特に発生するノイズの種類をモデル化します。 QDK Python パッケージを使用すると、NoiseConfig クラスを使用したシミュレーション用のノイズ モデルを使用できます。

QDK シミュレーションのノイズ モデルの詳細については、「QDKで量子シミュレーション用のノイズ モデルを構築する方法」を参照してください

QDK シミュレーターをインストールして使用する方法については、「QDK量子シミュレーターをインストールして実行する方法」を参照してください。

ニュートラルアトムデバイスシミュレーションAPI

QDKには、NeutralAtomDeviceNeutralAtomBackendの 2 つの中性原子デバイス シミュレーション API が含まれています。 これらの API は、特に中性原子量子コンピューターで発生するノイズをモデル化します。 詳細については、「 ニュートラルアトム デバイス ハードウェアで量子プログラムをシミュレートする」を参照してください。

中性原子デバイスシミュレータにおけるノイズの種類

中性原子デバイスでは、レーザーはデバイス内の異なるゾーン間で量子ビットを物理的に移動します。 ノイズは、次の状況で中性原子デバイスで発生する可能性があります。

  • ゾーン間の量子ビット移動
  • 相互作用ゾーン内の量子ビットに対する量子ゲート操作
  • 測定ゾーンの量子ビット測定

中性原子デバイスには、量子ゲートのセットが限られています。 QDKのニュートラルアトムデバイスシミュレーションは、次のソースからのノイズをサポートします。

ノイズ ソース ノイズ モデル パラメーター ソースの説明
$S_X$ 量子ゲート sx シングル量子ビット ゲート、ハーフ ビット フリップ
$R_Z$ 量子ゲート rz 単一量子ビット ゲート、一般位相回転
$CZ$ 量子ゲート cz 2 量子ビット ゲート、制御付き $Z$ 位相反転
量子ビットの測定とリセット mresetz 単一量子ビット測定と 0 状態へのリセット
量子ビット移動 mov デバイス ゾーン間の量子ビット移動

これらのノイズ ソースでは、 QDK シミュレーターがサポートするすべてのノイズ タイプを構成できます。

量子プログラムには、QIR ターゲット プロファイルがサポートする任意の種類のゲートを含めることができます。 ニュートラル原子シミュレーション API は、入力 QIR をコンパイルし、プログラムのゲートを、ニュートラルアトム デバイス上に存在する一連のゲート ($S_X$、$R_Z$、および $CZ$) に分解します。 シミュレーションに NeutralAtomDeviceNeutralAtomBackend を使用する場合は、そのノイズがシミュレーションに影響しないため、他のゲートでノイズを構成しないでください。 たとえば、プログラムに Hadmard ゲートが含まれており、Hadmard ゲートのノイズを構成した場合、Hadmard ゲートがニュートラル原子デバイス ゲートに分解されるため、そのノイズはシミュレーションに表示されません。

ニュートラル原子シミュレーション API は、プログラム内のすべての測定値を測定およびリセット命令に変換します。 測定ノイズを含めるには、 mresetzのノイズを構成します。 mzのノイズはシミュレーションに含まれません。

ニュートラルアトムデバイスシミュレーション用のノイズモデルを構築する

ニュートラルアトム デバイス シミュレーション用のノイズ モデルを構築するには、次の手順に従います。

  1. VS Codeで、[表示] メニューを開き、[コマンド パレット] を選択します。

  2. 「新規作成」と入力します。 空の Jupyter Notebook ファイルが新しいタブで開きます。

  3. ノートブックの最初のセルで、必要な Python オブジェクトをインポートします。

    from qdk import init, TargetProfile
    from qdk.openqasm import compile
    from qdk.simulation import NeutralAtomDevice, NoiseConfig
    from qdk.widgets import Histogram
    
  4. 新しいセルで、デバイス QIR ターゲット プロファイルを設定し、OpenQASM プログラムを 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. NoiseConfig オブジェクトを作成し、ノイズ モデルを構築します。 たとえば、新しいセルで次のコードを実行します。

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

    このコードでは、次のノイズ モデルが生成されます。ノイズ レートは、ソースによって対応する種類のノイズが発生する確率です。

    ノイズ ソース ノイズの種類 ノイズ レート
    $S_X$ ゲート ビット フリップ 1%
    $R_Z$ ゲート 位相反転 1%
    $CZ$ ゲート ターゲット量子ビットでのビットフリップと位相フリップ 2%
    量子ビット移動 量子ビット損失 0.5%
  6. ノイズ モデルを使用してシミュレーターを実行し、測定結果のヒストグラムを表示します。 たとえば、新しいセルで次のコードを実行して、クリフォード シミュレーターでプログラムの 1,000 ショットを実行します。

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