기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
결과 유형 목록
Amazon Braket은를 사용하여 회로를 측정할 때 다양한 유형의 결과를 반환할 수 있습니다ResultType
. 회로는 다음과 같은 유형의 결과를 반환할 수 있습니다.
-
AdjointGradient
는 제공된 관찰 가능한의 예상 값의 그라데이션(벡터 파생)을 반환합니다. 이 관찰 가능한는 관절 차별화 방법을 사용하여 지정된 파라미터와 관련하여 제공된 대상에 작용합니다. shots=0인 경우에만이 방법을 사용할 수 있습니다. -
Amplitude
는 출력 웨이브 함수에서 지정된 양자 상태의 진폭을 반환합니다. 및 SV1 로컬 시뮬레이터에서만 사용할 수 있습니다. -
Expectation
는 지정된 관찰 가능의 예상 값을 반환하며,이 값은이 장의 뒷부분에 소개된Observable
클래스로 지정할 수 있습니다. 관찰 가능한를 측정하는 데 qubits 사용되는 대상을 지정해야 하며, 지정된 대상 수는 관찰 가능한 qubits가 작동하는 수와 같아야 합니다. 대상이 지정되지 않은 경우 관찰 가능 qubit는 1에서만 작동해야 하며 모든에 병렬qubits로 적용됩니다. -
Probability
는 계산 기준 상태를 측정할 확률을 반환합니다. 대상이 지정되지 않은 경우는 모든 기준 상태를 측정할 확률을Probability
반환합니다. 대상이 지정되면 지정된에 있는 기본 벡터의 한계 확률만 반환qubits됩니다. 관리형 시뮬레이터 및 QPUs는 최대 15쿼비트로 제한되며 로컬 시뮬레이터는 시스템의 메모리 크기로 제한됩니다. -
Reduced density matrix
는의 시스템에서 지정된 대상의 하위 시스템에 대한 밀도 매트릭스qubits를 반환합니다qubits. 이 결과 유형의 크기를 제한하기 위해 Braket은 대상 수를 최대 8qubits개로 제한합니다. -
StateVector
는 전체 상태 벡터를 반환합니다. 로컬 시뮬레이터에서 사용할 수 있습니다. -
Sample
는 지정된 대상 qubit 세트 및 관찰 가능한 측정 수를 반환합니다. 대상이 지정되지 않은 경우 관찰 가능 qubit는 1에서만 작동해야 하며 모든에 병렬qubits로 적용됩니다. 대상이 지정된 경우 지정된 대상의 수는 관찰 가능한 동작qubits의 수와 같아야 합니다. -
Variance
는 지정된 대상 qubit 세트의 분산(mean([x-mean(x)]2)
)을 반환하며 요청된 결과 유형으로 관찰할 수 있습니다. 대상이 지정되지 않은 경우 관찰 가능 qubit는 1에서만 작동해야 하며 모든에 병렬qubits로 적용됩니다. 그렇지 않으면 지정된 대상 수는 관찰 가능한를 적용할 수 qubits 있는 수와 같아야 합니다.
다양한 디바이스에 지원되는 결과 유형:
로컬 심 |
SV1 |
DM1 |
TN1 |
Rigetti |
IonQ |
IQM |
|
관절 그라데이션 |
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 |
다음 예제와 같이 디바이스 속성을 검사하여 지원되는 결과 유형을 확인할 수 있습니다.
from braket.aws import AwsDevice device = AwsDevice("arn:aws:braket:us-west-1::device/qpu/rigetti/Ankaa-3") # Print the result types supported by this device for iter in device.properties.action['braket.ir.openqasm.program'].supportedResultTypes: print(iter)
name='Sample' observables=['x', 'y', 'z', 'h', 'i'] minShots=10 maxShots=50000 name='Expectation' observables=['x', 'y', 'z', 'h', 'i'] minShots=10 maxShots=50000 name='Variance' observables=['x', 'y', 'z', 'h', 'i'] minShots=10 maxShots=50000 name='Probability' observables=None minShots=10 maxShots=50000
를 호출하려면 다음 예제와 같이 회로에 ResultType
추가합니다.
from braket.circuits import Circuit, 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 디바이스는 확률을 제공합니다. Amazon Braket SDK는 모든 결과에 대한 측정 속성을 제공합니다. 그러나 확률을 반환하는 디바이스의 경우 샷당 측정값을 사용할 수 없으므로 이러한 측정값은 사후 계산되며 확률을 기반으로 합니다. 결과가 사후 계산되었는지 확인하려면 결과 객체measurements_copied_from_device
에서를 확인합니다. 이 작업은 Amazon Braket SDK GitHub 리포지토리의 gate_model_quantum_task_result.py
관찰 가능
Amazon Braket의 Observable
클래스를 사용하면 관찰 가능한 특정를 측정할 수 있습니다.
각에 고유한 비식별성만 적용할 수 있습니다qubit. 동일한에 대해 두 개 이상의 서로 다른 비식별 관찰 항목을 지정하는 경우 오류가 발생합니다qubit. 이를 위해 텐서 제품의 각 요소는 관찰 가능한 개별 요소로 계산됩니다. 즉qubit,에서 작동하는 요소가 동일하게 qubit 유지되는 한 동일한에 여러 텐서 제품을 보유할 수 있습니다.
관찰 가능한를 조정하고 다른 관찰 가능한를 추가할 수 있습니다(스케일링 여부에 관계없이). 그러면 AdjointGradient
결과 유형에 사용할 수 Sum
있는이 생성됩니다.
Observable
클래스에는 다음과 같은 관찰 항목이 포함됩니다.
import numpy as np Observable.I() Observable.H() Observable.X() Observable.Y() Observable.Z() # Get the eigenvalues of the observable print("Eigenvalue:", Observable.H().eigenvalues) # Or rotate the basis to be computational basis print("Basis rotation gates:", Observable.H().basis_rotation_gates) # Get the tensor product of the 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()) # 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)))
파라미터
회로는 무료 파라미터를 통합할 수 있습니다. 이러한 무료 파라미터는 한 번만 구성하면 여러 번 실행할 수 있으며 그라데이션을 계산하는 데 사용할 수 있습니다.
각 사용 가능한 파라미터는 다음을 수행하는 데 사용되는 문자열로 인코딩된 이름을 사용합니다.
-
파라미터 값 설정
-
사용할 파라미터 식별
from braket.circuits import Circuit, FreeParameter, observables from braket.parametric import FreeParameter theta = FreeParameter("theta") phi = FreeParameter("phi") circ = Circuit().h(0).rx(0, phi).ry(0, phi).cnot(0, 1).xx(0, 1, theta)
관절 그라데이션
SV1 디바이스는 다중 용어 해밀토니아어를 포함하여 관찰 가능한 예상 값의 인접 그라데이션을 계산합니다. 파라미터를 구분하려면 이름(문자열 형식) 또는 직접 참조를 지정합니다.
from braket.aws import AwsDevice from braket.devices import Devices device = AwsDevice(Devices.Amazon.SV1) circ.adjoint_gradient(observable=3 * Observable.Z(0) @ Observable.Z(1) - 0.5 * observables.X(0), parameters = ["phi", theta])
고정된 파라미터 값을 파라미터화된 회로에 인수로 전달하면 사용 가능한 파라미터가 제거됩니다. 이 회로를 로 실행하면 사용 가능한 파라미터가 더 이상 존재하지 않기 때문에 오류가 AdjointGradient
발생합니다. 다음 코드 예제에서는 올바른 사용법과 잘못된 사용법을 보여줍니다.
# Will error, as no free parameters will be present #device.run(circ(0.2), shots=0) # Will succeed device.run(circ, shots=0, inputs={'phi': 0.2, 'theta': 0.2})