Liste der Ergebnistypen - Amazon Braket

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Liste der Ergebnistypen

Amazon Braket kann verschiedene Arten von Ergebnissen zurückgeben, wenn ein Stromkreis mit ResultType gemessen wird. Ein Stromkreis kann die folgenden Arten von Ergebnissen zurückgeben.

  • AdjointGradientgibt den Gradienten (Vektorableitung) des Erwartungswerts einer angegebenen Observablen zurück. Diese Observable wirkt auf ein vorgegebenes Ziel in Bezug auf bestimmte Parameter, wobei die Methode der adjungierten Differenzierung verwendet wird. Sie können diese Methode nur verwenden, wenn shots=0 ist.

  • Amplitudegibt die Amplitude der angegebenen Quantenzustände in der Ausgangswellenfunktion zurück. Sie ist nur auf den Simulatoren SV1 und vor Ort verfügbar.

  • Expectationgibt den Erwartungswert einer bestimmten Observablen zurück, der mit der später in diesem Kapitel eingeführten Observable Klasse spezifiziert werden kann. Das zur Messung der beobachtbaren Größe qubits verwendete Ziel muss angegeben werden, und die Anzahl der angegebenen Ziele muss der Anzahl entsprechen, qubits auf die die beobachtbare Größe einwirkt. Wenn keine Ziele angegeben sind, darf die Observable nur mit 1 arbeiten qubit und sie wird auf alle qubits parallel.

  • Probabilitygibt die Wahrscheinlichkeiten für die Messung von Zuständen auf rechnerischer Basis zurück. Wenn keine Ziele angegeben sind, wird die Wahrscheinlichkeit Probability zurückgegeben, mit der alle Basiszustände gemessen wurden. Wenn Ziele angegeben sind, werden nur die Randwahrscheinlichkeiten der Basisvektoren für die angegebenen qubits Werte zurückgegeben. Verwaltete Simulatoren, die auf maximal 15 Qubits begrenzt QPUs sind, und lokale Simulatoren sind auf die Speichergröße des Systems beschränkt.

  • Reduced density matrixgibt eine Dichtematrix für ein Subsystem eines bestimmten Ziels qubits aus einem System von zurück. qubits Um die Größe dieses Ergebnistyps zu begrenzen, begrenzt Braket die Anzahl der Ziele qubits auf maximal 8.

  • StateVectorgibt den vollständigen Zustandsvektor zurück. Er ist auf dem lokalen Simulator verfügbar.

  • Samplegibt die Anzahl der Messungen eines bestimmten qubit Zielsatzes und eines beobachtbaren Zielwerts zurück. Wenn keine Ziele angegeben sind, darf die Observable nur mit 1 arbeiten qubit und sie wird auf alle qubits parallel. Wenn Ziele angegeben sind, muss die Anzahl der angegebenen Ziele der Anzahl entsprechen, qubits auf die die beobachtbare Größe einwirkt.

  • Variancegibt die Varianz (mean([x-mean(x)]2)) des angegebenen qubit Zielsatzes und Observable als angeforderten Ergebnistyp zurück. Wenn keine Ziele angegeben sind, darf die Observable nur mit 1 arbeiten qubit und sie wird auf alle qubits parallel. Andernfalls muss die Anzahl der angegebenen Ziele der Anzahl entsprechen, auf die qubits die beobachtbare Größe angewendet werden kann.

Die unterstützten Ergebnistypen für verschiedene Geräte:

Lokale SIM

SV1

DM1

TN1

Rigetti

IonQ

IQM

Adjungierter Gradient

N

Y

N

N

N

N

N

Amplitude

Y

Y

N

N

N

N

N

Erwartung

Y

Y

Y

Y

Y

Y

Y

Probability (Wahrscheinlichkeit)

Y

Y

Y

N

Y

Y

Y

Matrix mit reduzierter Dichte

Y

N

Y

N

N

N

N

Zustandsvektor

Y

N

N

N

N

N

N

Beispiel

Y

Y

Y

Y

Y

Y

Y

Varianz

Y

Y

Y

Y

Y

Y

Y

Sie können die unterstützten Ergebnistypen anhand der Geräteeigenschaften überprüfen, wie im folgenden Beispiel gezeigt.

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

Um a aufzurufenResultType, hängen Sie es an einen Schaltkreis an, wie im folgenden Beispiel gezeigt.

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])
Anmerkung

Verschiedene Quantengeräte liefern Ergebnisse in verschiedenen Formaten. RigettiGeräte geben beispielsweise Messwerte zurück, während IonQ Geräte Wahrscheinlichkeiten liefern. Das Amazon Braket SDK bietet eine Messeigenschaft für alle Ergebnisse. Bei Geräten, die Wahrscheinlichkeiten zurückgeben, werden diese Messungen jedoch nachberechnet und basieren auf den Wahrscheinlichkeiten, da keine Messungen pro Schuss verfügbar sind. Um festzustellen, ob ein Ergebnis nachberechnet wurde, überprüfen Sie den Wert auf dem Ergebnisobjekt. measurements_copied_from_device Dieser Vorgang ist in der Datei gate_model_quantum_task_result.py im Amazon Braket GitHub SDK-Repository detailliert beschrieben.

Observablen

Mit der Observable Klasse von Amazon Braket können Sie eine bestimmte beobachtbare Größe messen.

Sie können jeweils nur ein eindeutiges beobachtbares Objekt ohne Identität zuweisen. qubit Ein Fehler tritt auf, wenn Sie zwei oder mehr verschiedene Observablen ohne Identität für dasselbe angeben. qubit Zu diesem Zweck zählt jeder Faktor eines Tensorprodukts als einzelne beobachtbare Größe. Das bedeutet, dass Sie mehrere Tensorprodukte auf demselben System haben könnenqubit, solange die Faktoren, die darauf einwirken, gleich qubit bleiben.

Eine Observable kann skaliert werden und weitere Observablen (skaliert oder nicht) hinzugefügt werden. Dadurch entsteht eineSum, die im Ergebnistyp verwendet werden kann. AdjointGradient

Die Observable Klasse umfasst die folgenden Observablen.

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)))

Parameter

Schaltungen können freie Parameter enthalten. Diese freien Parameter müssen nur einmal erstellt werden, um sie mehrfach auszuführen, und können zur Berechnung von Gradienten verwendet werden.

Jeder freie Parameter verwendet einen in einer Zeichenfolge codierten Namen, der für folgende Zwecke verwendet wird:

  • Parameterwerte festlegen

  • Identifizieren Sie, welche Parameter verwendet werden sollen

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)

Adjungierter Gradient

Das SV1 Gerät berechnet den adjungierten Gradienten eines beobachtbaren Erwartungswerts, einschließlich eines Hamilton-Werts mit mehreren Termen. Geben Sie zur Unterscheidung von Parametern ihren Namen (im Zeichenkettenformat) oder als direkte Referenz an.

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])

Wenn feste Parameterwerte als Argumente an einen parametrisierten Schaltkreis übergeben werden, werden die freien Parameter entfernt. Das Ausführen dieser Schaltung mit AdjointGradient erzeugt einen Fehler, da die freien Parameter nicht mehr existieren. Das folgende Codebeispiel zeigt die korrekte und falsche Verwendung:

# 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})