Lista de tipos de resultados - Amazon Braket

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Lista de tipos de resultados

Amazon Braket puede devolver diferentes tipos de resultados cuando se mide un circuito utilizando. ResultType Un circuito puede devolver los siguientes tipos de resultados.

  • AdjointGradientdevuelve el gradiente (derivado vectorial) del valor esperado de un observable proporcionado. Este observable actúa sobre un objetivo determinado con respecto a parámetros específicos utilizando el método de diferenciación adjunta. Solo puedes usar este método cuando los disparos son iguales a 0.

  • Amplitudedevuelve la amplitud de los estados cuánticos especificados en la función de onda de salida. Solo está disponible en los simuladores SV1 y en los simuladores locales.

  • Expectationdevuelve el valor esperado de un observable dado, que se puede especificar con la Observable clase que se presenta más adelante en este capítulo. Se debe especificar el objetivo qubits utilizado para medir lo observable y el número de objetivos especificados debe ser igual al número qubits sobre el que actúa el observable. Si no se especifican objetivos, el observable debe operar solo en 1 qubit y se aplica a todos qubits en paralelo.

  • Probabilitydevuelve las probabilidades de medir estados básicos computacionales. Si no se especifica ningún objetivo, Probability devuelve la probabilidad de medir todos los estados básicos. Si se especifican los objetivos, solo se devuelven las probabilidades marginales de los vectores base de qubits los especificados. Los simuladores gestionados QPUs están limitados a un máximo de 15 qubits y los simuladores locales están limitados al tamaño de la memoria del sistema.

  • Reduced density matrixdevuelve una matriz de densidad para un subsistema de un objetivo específico de un sistema qubits de. qubits Para limitar el tamaño de este tipo de resultado, Braket limita el número de objetivos qubits a un máximo de 8.

  • StateVectordevuelve el vector de estado completo. Está disponible en el simulador local.

  • Sampledevuelve los recuentos de mediciones de un qubit conjunto objetivo específico y observable. Si no se especifican objetivos, el observable debe operar solo en 1 qubit y se aplica a todos qubits en paralelo. Si se especifican objetivos, el número de objetivos especificados debe ser igual al número qubits sobre el que actúa el observable.

  • Variancedevuelve la varianza (mean([x-mean(x)]2)) del qubit conjunto de objetivos especificado y observable como el tipo de resultado solicitado. Si no se especifican objetivos, el observable debe operar solo en 1 qubit y se aplica a todos qubits en paralelo. De lo contrario, el número de objetivos especificados debe ser igual al número de objetivos qubits a los que se puede aplicar el observable.

Los tipos de resultados admitidos para los diferentes dispositivos:

Sim local

SV1

DM1

TN1

Rigetti

IonQ

IQM

Gradiente adjunto

N

Y

N

N

N

N

N

Amplitude

Y

Y

N

N

N

N

N

Expectativa

Y

Y

Y

Y

Y

Y

Y

Probability

Y

Y

Y

N

Y

Y

Y

Matriz de densidad reducida

Y

N

Y

N

N

N

N

Vector de estado

Y

N

N

N

N

N

N

Muestra

Y

Y

Y

Y

Y

Y

Y

Varianza

Y

Y

Y

Y

Y

Y

Y

Puede comprobar los tipos de resultados admitidos examinando las propiedades del dispositivo, como se muestra en el siguiente ejemplo.

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

Para llamar aResultType, añádalo a un circuito, como se muestra en el siguiente ejemplo.

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

Los diferentes dispositivos cuánticos proporcionan resultados en varios formatos. Por ejemplo, Rigetti los dispositivos devuelven mediciones, mientras que IonQ los dispositivos proporcionan probabilidades. El Amazon Braket SDK ofrece una propiedad de medición para todos los resultados. Sin embargo, en el caso de los dispositivos que devuelven probabilidades, estas mediciones se calculan posteriormente y se basan en las probabilidades, ya que las mediciones por disparo no están disponibles. Para determinar si un resultado se ha poscalculado, compruebe el measurements_copied_from_device objeto resultante. Esta operación se detalla en el archivo gate_model_quantum_task_result.py del repositorio del SDK GitHub de Amazon Braket.

Observables

La Observable clase de Amazon Braket te permite medir un observable específico.

Solo puede aplicar un único observable sin identidad a cada uno. qubit Se produce un error si se especifican dos o más observables distintos que no son de identidad en el mismo. qubit Para ello, cada factor de un producto tensorial cuenta como un observable individual. Esto significa que puede tener varios productos tensoriales al mismo tiempoqubit, siempre y cuando los factores que actúan sobre ellos qubit sigan siendo los mismos.

Se puede escalar un observable y añadir otros observables (escalados o no). Esto crea un Sum que se puede usar en el tipo de resultado. AdjointGradient

La Observable clase incluye los siguientes observables.

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

Parámetros

Los circuitos pueden incorporar parámetros libres. Estos parámetros libres solo necesitan construirse una vez para ejecutarse varias veces y se pueden usar para calcular gradientes.

Cada parámetro libre usa un nombre codificado en cadena que se usa para:

  • Establecer los valores de los parámetros

  • Identifique los parámetros que se van a utilizar

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)

Gradiente adjunto

El SV1 dispositivo calcula el gradiente adjunto de un valor esperado observable, incluido el hamiltoniano multitérmino. Para diferenciar los parámetros, especifique su nombre (en formato de cadena) o por referencia directa.

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

Al pasar valores de parámetros fijos como argumentos a un circuito parametrizado, se eliminarán los parámetros libres. Si se ejecuta este circuito con, se AdjointGradient produce un error, ya que los parámetros libres ya no existen. El siguiente ejemplo de código demuestra el uso correcto e incorrecto:

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