결과 유형 - Amazon Braket

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

결과 유형

AmazonBraket은 를 사용하여 ResultType 회로를 측정할 때 다양한 유형의 결과를 반환할 수 있습니다. 회로는 다음과 같은 유형의 결과를 반환할 수 있습니다.

  • AdjointGradient제공된 관찰 가능 항목의 기대값의 기울기 (벡터 도함수) 를 반환합니다. 이 옵저버블은 지정된 매개변수와 관련하여 제공된 대상에 대해 부속 미분 방법을 사용하여 작용합니다. 이 메서드는 shots=0인 경우에만 사용할 수 있습니다.

  • Amplitude출력 파동 함수에서 지정된 양자 상태의 진폭을 반환합니다. SV1및 로컬 시뮬레이터에서만 사용할 수 있습니다.

  • Expectation주어진 옵저버블의 기대값을 반환하며, 이 값은 이 장의 뒷부분에서 소개할 Observable 클래스를 사용하여 지정할 수 있습니다. 관찰 가능 항목을 측정하는 qubits 데 사용되는 대상을 지정해야 하며, 지정된 대상의 수는 관찰 가능 항목이 작동하는 대상 수와 같아야 합니다. qubits 대상이 지정되지 않은 경우 Observable은 1에서만 작동해야 qubit 하며 병렬로 모두에 qubits 적용됩니다.

  • Probability계산 기반 상태를 측정할 확률을 반환합니다. 대상이 지정되지 않은 경우 모든 기준 상태를 측정할 확률을 Probability 반환합니다. 목표값이 지정된 경우 지정된 기저 벡터의 한계 확률만 반환됩니다. qubits

  • Reduced density matrix의 시스템에서 지정된 qubits 목표값의 하위 시스템에 대한 밀도 행렬을 반환합니다. qubits 이 결과 유형의 크기를 제한하기 위해 Braket은 대상 qubits 수를 최대 8개로 제한합니다.

  • StateVector전체 상태 벡터를 반환합니다. 로컬 시뮬레이터에서 사용할 수 있습니다.

  • Sample지정된 대상 qubit 세트 및 관찰 가능한 대상 세트의 측정 횟수를 반환합니다. 대상이 지정되지 않은 경우 Observable은 1에서만 작동해야 qubit 하며 병렬로 모두에 qubits 적용됩니다. 목표가 지정된 경우 지정된 대상의 수는 관찰 가능 대상이 작용하는 대상의 qubits 수와 같아야 합니다.

  • Variance지정된 대상 qubit 세트와 옵저버블의 variance (mean([x-mean(x)]2)) 를 요청된 결과 유형으로 반환합니다. 대상이 지정되지 않은 경우 Observable은 1에서만 작동해야 qubit 하며 병렬로 모두에 qubits 적용됩니다. 그렇지 않으면 지정된 대상의 수가 옵저버블을 적용할 수 있는 대상의 qubits 수와 같아야 합니다.

다양한 기기에 지원되는 결과 유형:

로컬 SIM

SV1

DM1

TN1

Rigetti

IonQ

OQC

인접 그래디언트

N

Y

N

N

N

N

N

Amplitude

Y

Y

N

N

N

N

N

기대치

Y

Y

Y

Y

Y

Y

Y

Probability

Y

Y

Y

N

Y*

Y

Y

밀도 감소 매트릭스

Y

N

Y

N

N

N

N

상태 벡터

Y

N

N

N

N

N

N

Sample

Y

Y

Y

Y

Y

Y

Y

변화

Y

Y

Y

Y

Y

Y

Y

참고

*는 최대 40개의 확률 결과 Rigetti 유형만 지원합니다qubits.

다음 예와 같이 장치 속성을 검사하여 지원되는 결과 유형을 확인할 수 있습니다.

device = AwsDevice("arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3") # print the result types supported by this device for iter in device.properties.action['braket.ir.jaqcd.program'].supportedResultTypes: print(iter)
name='Sample' observables=['x', 'y', 'z', 'h', 'i'] minShots=10 maxShots=100000 name='Expectation' observables=['x', 'y', 'z', 'h', 'i'] minShots=10 maxShots=100000 name='Variance' observables=['x', 'y', 'z', 'h', 'i'] minShots=10 maxShots=100000 name='Probability' observables=None minShots=10 maxShots=100000

ResultTypea를 호출하려면 다음 예와 같이 회로에 추가하십시오.

from braket.circuits import Observable circ = Circuit().h(0).cnot(0, 1).amplitude(state=["01", "10"]) circ.probability(target=[0, 1]) circ.probability(target=0) circ.expectation(observable=Observable.Z(), target=0) circ.sample(observable=Observable.X(), target=0) circ.state_vector() circ.variance(observable=Observable.Z(), target=0) # print one of the result types assigned to the circuit print(circ.result_types[0])
참고

일부 장치는 측정값 (예:Rigetti) 을 결과로 제공하고 다른 장치는 확률을 결과로 제공합니다 (예: IonQ 및OQC). SDK는 결과에 대한 측정 속성을 제공하지만 확률을 반환하는 기기의 경우 사후 계산이 이루어집니다. 따라서 에서 제공하는 기기와 같은 기기는 샷당 측정값이 반환되지 않으므로 확률에 따라 측정 결과가 결정됩니다. IonQ OQC 이 파일에 표시된 대로 결과 개체를 보면 결과가 사후 계산되었는지 확인할 수 있습니다. measurements_copied_from_device

관찰 가능 항목

Amazon브라켓에는 측정할 관찰 가능 항목을 지정하는 데 사용할 수 있는 Observable 클래스가 포함되어 있습니다.

각각에 고유한 비동일성 관찰 가능 항목을 최대 하나만 적용할 수 있습니다. qubit 동일하지 않은 옵저버블을 두 개 이상 지정하면 오류가 qubit 발생합니다. 이를 위해 텐서 곱의 각 인자는 개별 관찰 가능 인자로 계산되므로 텐서 곱에 작용하는 인자가 동일하다면 여러 텐서 곱이 동일한 qubit 것에 작용하는 것은 허용됩니다. qubit

옵저버블을 스케일링하고 옵저버블을 추가할 수도 있습니다 (스케일 적용 여부). 이렇게 하면 결과 Sum 유형에 사용할 수 있는 항목이 생성됩니다. AdjointGradient

Observable클래스에는 다음과 같은 옵저버블이 포함됩니다.

Observable.I() Observable.H() Observable.X() Observable.Y() Observable.Z() # get the eigenvalues of the observable print("Eigenvalue:", Observable.H().eigenvalues) # or whether to rotate the basis to be computational basis print("Basis rotation gates:",Observable.H().basis_rotation_gates) # get the tensor product of observable for the multi-qubit case tensor_product = Observable.Y() @ Observable.Z() # view the matrix form of an observable by using print("The matrix form of the observable:\n",Observable.Z().to_matrix()) print("The matrix form of the tensor product:\n",tensor_product.to_matrix()) # also factorize an observable in the tensor form print("Factorize an observable:",tensor_product.factors) # self-define observables given it is a Hermitian print("Self-defined Hermitian:",Observable.Hermitian(matrix=np.array([[0, 1],[1, 0]]))) print("Sum of other (scaled) observables:", 2.0 * Observable.X() @ Observable.X() + 4.0 * Observable.Z() @ Observable.Z())
Eigenvalue: [ 1 -1] Basis rotation gates: (Ry('angle': -0.7853981633974483, 'qubit_count': 1),) The matrix form of the observable: [[ 1.+0.j 0.+0.j] [ 0.+0.j -1.+0.j]] The matrix form of the tensor product: [[ 0.+0.j 0.+0.j 0.-1.j 0.-0.j] [ 0.+0.j -0.+0.j 0.-0.j 0.+1.j] [ 0.+1.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j -0.-1.j 0.+0.j -0.+0.j]] Factorize an observable: (Y('qubit_count': 1), Z('qubit_count': 1)) Self-defined Hermitian: Hermitian('qubit_count': 1, 'matrix': [[0.+0.j 1.+0.j], [1.+0.j 0.+0.j]]) Sum of other (scaled) observables: Sum(TensorProduct(X('qubit_count': 1), X('qubit_count': 1)), TensorProduct(Z('qubit_count': 1), Z('qubit_count': 1)))

Parameters

회로에는 “한 번 생성하여 여러 번 실행” 방식으로 사용하고 그래디언트를 계산하는 데 사용할 수 있는 자유 매개변수가 포함될 수 있습니다. 자유 매개변수는 문자열로 인코딩된 이름을 사용하여 해당 값을 지정하거나 자유 매개 변수를 기준으로 미분할지 여부를 결정하는 데 사용할 수 있습니다.

from braket.circuits import Circuit, FreeParameter, Observable theta = FreeParameter("theta") phi = FreeParameter("phi") circ = Circuit().h(0).rx(0, phi).ry(0, phi).cnot(0, 1).xx(0, 1, theta) circ.adjoint_gradient(observable=Observable.Z() @ Observable.Z(), target=[0, 1], parameters = ["phi", theta]

구별하려는 매개 변수의 경우 이름 (문자열) 을 사용하거나 직접 참조를 사용하여 매개 변수를 지정하십시오. 참고로 AdjointGradient 결과 유형을 사용하여 그래디언트를 계산하는 것은 옵저버블의 기대값을 기준으로 수행됩니다.

참고: 자유 매개변수 값을 매개변수화된 회로에 인수로 전달하여 수정한 경우 지정된 결과 유형과 매개변수를 사용하여 AdjointGradient 회로를 실행하면 오류가 발생합니다. 이는 차별화하는 데 사용하는 매개변수가 더 이상 존재하지 않기 때문입니다. 다음 예를 참조하세요.

device.run(circ(0.2), shots=0) # will error, as no free parameters will be present device.run(circ, shots=0, inputs={'phi'=0.2, 'theta'=0.2) # will succeed