翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
結果タイプのリスト
Amazon Braket は、ResultType
を使用して回路を測定すると、異なるタイプの結果を返すことができます。回路は次のタイプの結果を返すことができます。
-
AdjointGradient
は、指定されたオブザーバブルの期待値の勾配 (ベクトル派生) を返します。このオブザーバブルは、ジョイントの区別方法を使用して、指定されたパラメータに関して指定されたターゲットに対して動作します。このメソッドは、shots=0 の場合にのみ使用できます。 -
Amplitude
は、出力波関数で指定された量子状態の振幅を返します。これは、 SV1およびローカルシミュレーターでのみ使用できます。 -
Expectation
は、特定のオブザーバブルの期待値を返します。この値は、この章の後半で導入されたObservable
クラスで指定できます。オブザーバブルの測定qubitsに使用されるターゲットを指定する必要があります。また、指定されたターゲットの数は、オブザーバブルqubitsが動作する の数と等しくなければなりません。ターゲットを指定しない場合、オブザーバブルは 1 でのみ動作qubitし、すべてqubitsに並行して適用されます。 -
Probability
は、計算基準の状態を測定する確率を返します。ターゲットが指定されていない場合、Probability
はすべての基底状態を測定する確率を返します。ターゲットが指定されている場合、指定されたベースベクトルのわずかな確率のみqubitsが返されます。マネージドシミュレーターと QPUs は最大 15 量子ビットに制限され、ローカルシミュレーターはシステムのメモリサイズに制限されます。 -
Reduced density matrix
は、 のqubitsシステムから指定されたターゲットのサブシステムの密度マトリックスを返しますqubits。この結果タイプのサイズを制限するため、Braket はターゲットの数qubitsを最大 8 に制限します。 -
StateVector
はフルステートベクトルを返します。ローカルシミュレーターで利用できます。 -
Sample
は、指定されたターゲットqubitセットとオブザーバブルの測定数を返します。ターゲットを指定しない場合、オブザーバブルは 1 でのみ動作qubitし、すべてqubitsに並行して適用されます。ターゲットを指定する場合、指定されたターゲットの数は、オブザーバブルqubitsが動作する の数と等しくなければなりません。 -
Variance
は、指定されたターゲットqubitセットとオブザーバブルの分散 (mean([x-mean(x)]2)
) をリクエストされた結果タイプとして返します。ターゲットを指定しない場合、オブザーバブルは 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 |
見込み |
Y |
Y |
Y |
N |
Y |
Y |
Y |
低密度マトリックス |
Y |
N |
Y |
N |
N |
N |
N |
状態ベクトル |
Y |
N |
N |
N |
N |
N |
N |
サンプル |
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
クラスでは、特定のオブザーバブルを測定できます。
各 に適用できる一意の非 ID は 1 つだけですqubit。エラーが発生する 同じ に 2 つ以上の異なる非 ID オブザーバブルを指定した場合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})