스파스 양자 시뮬레이터

스파스 시뮬레이터는 양자 상태 벡터의 스파스 표현을 사용합니다. 스파스 양자 상태는 진폭 계수의 대부분이 0인 상태입니다. 스파스 표현을 사용하면 스파스 시뮬레이터가 양자 상태를 나타내는 데 필요한 메모리 공간을 최소화할 수 있으므로 더 많은 수의 큐비트에 대한 시뮬레이션이 가능합니다. 스파스 시뮬레이터는 계산 기준으로 스파스인 양자 상태를 사용하는 프로그램에 효율적입니다. 스파스 시뮬레이터를 사용하면 전체 상태 시뮬레이터가 지수적으로 많은 수의 0 진폭에서 메모리와 시간을 낭비하기 때문에 사용자는 전체 상태 시뮬레이터보다 더 큰 애플리케이션을 탐색할 수 있습니다.

스파스 시뮬레이터에 대한 자세한 내용은 Jaques 및 Häner(arXiv:2105.01533)를 참조하세요.

스파스 시뮬레이터 호출

스파스 시뮬레이터는 Microsoft(퀀텀 개발 키트)에 대한 QDKVisual Studio Code(VS Code) 확장의 기본 로컬 시뮬레이터입니다. 스파스 시뮬레이터를 사용하는 방법은 개발 환경에 따라 달라집니다.

개발 환경 스파스 시뮬레이터를 호출하는 방법
VS Code에서의 Q# 또는 OpenQASM 프로그램 Q# 또는 OpenQASM 파일 실행
Python 프로그램과 qdk 라이브러리 사용 qsharp.run
또는
openqasm.run
또는
qiskit.QSharpBackend
Notebook 셀에서 %%qsharp 프로그램 진입 작업을 호출합니다. 예를 들어
Main()

스파스 시뮬레이터에 Pauli 노이즈를 VS Code에 추가하세요.

스파스 시뮬레이터는 VS Code 확장을 통해 Pauli 노이즈를 프로그램의 시뮬레이션에 Q# 추가할 수 있도록 지원합니다. 이 기능을 사용하면 양자 작업 및 측정에 대한 노이즈가 미치는 영향을 시뮬레이션할 수 있습니다. 프로그램에서 노이즈 모델을 Q# 지정하려면 함수를 ConfigurePauliNoise 사용합니다. 이 함수는 연산자Pauli, X, YZ 노이즈가 발생할 확률을 설정합니다. 확장 설정에서 전역 노이즈 모델을 구성할 수도 있습니다.

Pauli 노이즈를 추가하려면 VS Code 설정을 사용하십시오.

전역 Pauli 노이즈를 프로그램 내에서 설정하려면 QDK 확장의 Q#> 시뮬레이션:Pauli 노이즈 사용자 지정 설정을 구성합니다.

VS Code의 QDK 확장에 대한 글로벌 Q# 노이즈 설정을 보여주는 스크린샷

VS Code 내의 모든 프로그램에서 모든 게이트, 측정값, 큐비트의 히스토그램 결과에 Q# 노이즈 설정이 적용됩니다.

예를 들어 노이즈를 구성하지 않은 다음 GHz 샘플 프로그램에 대한 히스토그램은 측정값의 약 절반에 대해 $\ket{00000}$, 나머지 절반은 $\ket{11111}$의 결과를 보여 줍니다.

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

노이즈가 없는 결과를 보여 주는 스크린샷.

1% 비트 플립 노이즈 비율을 추가하면 결과가 분산되기 시작합니다. 25개의% 비트 플립 노이즈가 있는 히스토그램은 순수한 노이즈와 구별할 수 없습니다.

VS Code의 QDK 스크린샷으로, 1% 및 25% 비트 플립 노이즈 속도의 프로그램에 대한 히스토그램 결과를 보여줍니다.

개별 Pauli 프로그램에 노이즈 추가 Q#

함수를 ConfigurePauliNoise 사용하여 개별 Q# 프로그램에 대한 노이즈 모델을 설정하거나 수정합니다. 이 ConfigurePauliNoise 함수를 사용하면 프로그램에서 노이즈가 발생하는 시기와 위치를 제어할 수 Q# 있습니다.

비고

설정에서 노이즈를 VS Code 구성하면 노이즈가 모든 Q# 프로그램에 적용됩니다. 그러나 함수는 ConfigurePauliNoise 함수를 VS Code 호출하는 프로그램의 노이즈 설정을 재정의합니다.

예를 들어 이전 프로그램에서 큐비트 할당 직후 노이즈를 추가할 수 있습니다.

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

큐비트 할당 후 노이즈가 추가된 히스토그램 결과를 보여주는 스크린샷.

또는 측정 작업에만 노이즈를 추가할 수 있습니다.

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

측정 직전에 노이즈가 추가된 히스토그램 결과를 보여주는 스크린샷.

프로그램의 여러 지점에서 노이즈 구성을 수정하거나 지우려면 여러 번 호출 ConfigurePauliNoise 합니다. 예를 들어 5% 비트 전환 노이즈를 Hadamard 게이트에 설정하고, 그 다음 나머지 프로그램 부분에는 노이즈를 설정하지 않습니다.

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

기타 Q# 노이즈 함수

ConfigureNoiseFunction 함수는 프로그램에서 모든 종류의 Pauli 노이즈를 모델링하기에 충분하지만 Q# 사용할 수 있는 다른 노이즈 함수도 있습니다. 다음 함수는 Std.Diagnostics 라이브러리에서 Q# 프로그램의 노이즈를 구성하는 데 사용할 수 있습니다.

기능 Description Example
ConfigurePauliNoise 시뮬레이터 실행에 대한 노이즈를 구성합니다 Pauli . 매개 변수는 X, Y 및 Z 게이트 Pauli 노이즈 확률을 나타냅니다. 노이즈 구성은 프로그램의 모든 후속 게이트, 측정 및 큐비트에 적용됩니다 Q# . 확장 기능VS Code 노이즈 설정을 재정의합니다. 후속 호출인 ConfigurePauliNoise는 이전 호출에서 설정된 노이즈를 재정의합니다. ConfigurePauliNoise(0.1, 0.0, 0.5)
또는
ConfigurePauliNoise(BitFlipNoise(0.1))
BitFlipNoise 지정된 확률로 X 게이트 노이즈만 구성합니다. 10% 비트 플립 노이즈:
ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0)
PhaseFlipNoise 지정된 확률로 Z 게이트 노이즈만 구성합니다. 10% 위상 대칭 이동 노이즈:
ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1)
DepolarizingNoise 노이즈를 확률이 같은 X, Y 또는 Z 게이트로 구성합니다. 6% 노이즈 분해:
ConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.2, 0.2, 0.2)
NoNoise 노이즈가 없도록 노이즈 모델을 다시 설정합니다. ConfigurePauliNoise(NoNoise()) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.0)
ApplyIdleNoise 시뮬레이션 중에 구성된 노이즈를 단일 큐비트에 적용합니다. ...
use q = Qubit[2];
ConfigurePauliNoise(0.1, 0.0, 0.0);
ApplyIdleNoise(q[0]);
...