기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
결과 유형 목록
Amazon Braket은를 사용하여 회로를 측정할 때 다양한 유형의 결과를 반환할 수 있습니다ResultType
. 회로는 다음과 같은 유형의 결과를 반환할 수 있습니다.
-
AdjointGradient
는 제공된 관찰 가능한의 예상 값의 그라데이션(벡터 도함수)을 반환합니다. 이 관찰 가능한는 관절 차별화 방법을 사용하여 지정된 파라미터와 관련하여 제공된 대상에 대해 작용합니다. 샷=0인 경우에만이 방법을 사용할 수 있습니다. -
Amplitude
는 출력 웨이브 함수에서 지정된 양자 상태의 진폭을 반환합니다. 에서 사용할 수 있습니다.SV1 및 로컬 시뮬레이터만 해당됩니다. -
Expectation
는 지정된 관찰 가능의 예상 값을 반환하며,이 값은이 장의 뒷부분에 소개된Observable
클래스로 지정할 수 있습니다. 대상 qubits 관찰 가능을 측정하는 데 사용되는를 지정해야 하며 지정된 대상 수는의 수와 같아야 합니다.qubits 관찰 가능한 작업이 있는 입니다. 대상이 지정되지 않은 경우 관찰 가능은 1에서만 작동해야 합니다.qubit 모든에 적용됩니다.qubits 병렬로. -
Probability
는 계산 기준 상태를 측정할 확률을 반환합니다. 대상이 지정되지 않은 경우는 모든 기준 상태를 측정할 확률을Probability
반환합니다. 대상이 지정된 경우 지정된에 있는 기본 벡터의 한계 확률만 qubits 가 반환됩니다. -
Reduced density matrix
지정된 대상의 하위 시스템에 대한 밀도 매트릭스를 반환합니다.qubits 의 시스템에서 qubits. 이 결과 유형의 크기를 제한하기 위해 Braket은 대상 수를 제한합니다.qubits 최대 8개까지 가능합니다. -
StateVector
는 전체 상태 벡터를 반환합니다. 로컬 시뮬레이터에서 사용할 수 있습니다. -
Sample
지정된 대상의 측정 수를 반환합니다.qubit 설정 및 관찰 가능. 대상이 지정되지 않은 경우 관찰 가능은 1에서만 작동해야 합니다.qubit 모든에 적용됩니다.qubits 병렬로. 대상이 지정된 경우 지정된 대상의 수는의 수와 같아야 합니다.qubits 관찰 가능한 작업이 있는 입니다. -
Variance
지정된 대상의 분산(mean([x-mean(x)]2)
)을 반환합니다.qubit 요청된 결과 유형으로를 설정하고 관찰할 수 있습니다. 대상이 지정되지 않은 경우 관찰 가능은 1에서만 작동해야 합니다.qubit 모든에 적용됩니다.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 |
참고
* Rigetti 는 최대 40개의 확률 결과 유형만 지원합니다.qubits.
다음 예제와 같이 디바이스 속성을 검사하여 지원되는 결과 유형을 확인할 수 있습니다.
device = AwsDevice("arn:aws:braket:us-west-1::device/qpu/rigetti/Ankaa-2") # 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 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). 는 결과에 대한 측정 속성을 SDK 제공하지만 확률을 반환하는 디바이스의 경우 사후 계산됩니다. 따라서에서 제공하는 디바이스와 같은 디바이스는 IonQ 는 샷당 측정값이 반환되지 않기 때문에 확률에 따라 측정 결과를 결정합니다. 이 파일에measurements_copied_from_device
에서를 확인하여 결과가 사후 계산되는지 확인할 수 있습니다.
관찰 가능
Amazon Braket에는 측정할 관찰 가능을 지정하는 데 사용할 수 있는 Observable
클래스가 포함되어 있습니다.
각에 관찰 가능한 고유한 비식별성을 하나 이상 적용할 수 있습니다.qubit. 동일한에 두 개 이상의 서로 다른 비식별 관찰 가능 항목을 지정하는 경우 qubit, 오류가 표시됩니다. 이를 위해 텐서 제품의 각 요소는 개별 관찰 가능으로 간주되므로 여러 텐서 제품이 동일한 텐서 제품에 대해 작동하는 것은 허용됩니다.qubit, 단, 해당에 대해 작용하는 요인은 qubit 는 동일합니다.
또한 관찰 가능한를 조정하고 관찰 가능한를 추가할 수 있습니다(스케일링 여부). 그러면 AdjointGradient
결과 유형에 사용할 수 Sum
있는가 생성됩니다.
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