Liste des types de résultats - Amazon Braket

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Liste des types de résultats

Amazon Braket peut renvoyer différents types de résultats lorsqu'un circuit est mesuré à l'aide de. ResultType Un circuit peut renvoyer les types de résultats suivants.

  • AdjointGradientrenvoie le gradient (dérivé vectoriel) de la valeur attendue d'un observable fourni. Cet observable agit sur une cible donnée par rapport à des paramètres spécifiés en utilisant la méthode de différenciation adjointe. Vous ne pouvez utiliser cette méthode que lorsque shots=0.

  • Amplituderenvoie l'amplitude des états quantiques spécifiés dans la fonction d'onde de sortie. Il n'est disponible que sur les simulateurs locaux SV1 et sur les simulateurs.

  • Expectationrenvoie la valeur attendue d'un observable donné, qui peut être spécifiée avec la Observable classe présentée plus loin dans ce chapitre. La cible qubits utilisée pour mesurer l'observable doit être spécifiée, et le nombre de cibles spécifiées doit être égal au nombre de cibles qubits sur lesquelles l'observable agit. Si aucune cible n'est spécifiée, l'observable ne doit fonctionner que sur 1 qubit et il est appliqué à tous qubits en parallèle.

  • Probabilityrenvoie les probabilités de mesure des états de base de calcul. Si aucune cible n'est spécifiée, Probability renvoie la probabilité de mesurer tous les états de base. Si des cibles sont spécifiées, seules les probabilités marginales des vecteurs de base sur les cibles spécifiées qubits sont renvoyées. Les simulateurs gérés QPUs sont limités à 15 qubits maximum, et les simulateurs locaux sont limités à la taille de la mémoire du système.

  • Reduced density matrixrenvoie une matrice de densité pour un sous-système d'une cible spécifiée qubits à partir d'un système dequbits. Pour limiter la taille de ce type de résultat, Braket limite le nombre de cibles qubits à un maximum de 8.

  • StateVectorrenvoie le vecteur d'état complet. Il est disponible sur le simulateur local.

  • Samplerenvoie le nombre de mesures d'un qubit ensemble cible spécifié et observable. Si aucune cible n'est spécifiée, l'observable ne doit fonctionner que sur 1 qubit et il est appliqué à tous qubits en parallèle. Si des cibles sont spécifiées, le nombre de cibles spécifiées doit être égal au nombre de cibles qubits sur lesquelles l'observable agit.

  • Variancerenvoie la variance (mean([x-mean(x)]2)) de l'qubitensemble de cibles spécifié et observable en tant que type de résultat demandé. Si aucune cible n'est spécifiée, l'observable ne doit fonctionner que sur 1 qubit et il est appliqué à tous qubits en parallèle. Dans le cas contraire, le nombre de cibles spécifiées doit être égal qubits au nombre auquel l'observable peut être appliqué.

Les types de résultats pris en charge pour les différents appareils :

SIM locale

SV1

DM1

TN1

Rigetti

IonQ

IQM

Gradient Adjoint

N

Y

N

N

N

N

N

Amplitude

Y

Y

N

N

N

N

N

Espérance

Y

Y

Y

Y

Y

Y

Y

Probability

Y

Y

Y

N

Y

Y

Y

Matrice à densité réduite

Y

N

Y

N

N

N

N

Vecteur d'état

Y

N

N

N

N

N

N

Exemple

Y

Y

Y

Y

Y

Y

Y

Variance

Y

Y

Y

Y

Y

Y

Y

Vous pouvez vérifier les types de résultats pris en charge en examinant les propriétés de l'appareil, comme indiqué dans l'exemple suivant.

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

Pour appeler aResultType, ajoutez-le à un circuit, comme indiqué dans l'exemple suivant.

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

Différents appareils quantiques fournissent des résultats sous différents formats. Par exemple, les Rigetti appareils renvoient des mesures, tandis que IonQ les appareils fournissent des probabilités. Le SDK Amazon Braket propose une propriété de mesures pour tous les résultats. Toutefois, pour les appareils qui renvoient des probabilités, ces mesures sont post-calculées et basées sur les probabilités, car les mesures par tir ne sont pas disponibles. Pour déterminer si un résultat a été post-calculé, cochez la case measurements_copied_from_device sur l'objet du résultat. Cette opération est détaillée dans le fichier gate_model_quantum_task_result.py du référentiel Amazon Braket SDK GitHub .

Observables

La Observable classe d'Amazon Braket vous permet de mesurer un observable spécifique.

Vous ne pouvez appliquer qu'une seule observable de non-identité unique à chacun. qubit Une erreur se produit si vous spécifiez deux ou plusieurs observables non identitaires différents pour la même chose. qubit À cette fin, chaque facteur d'un produit tensoriel compte comme un observable individuel. Cela signifie que vous pouvez avoir plusieurs produits tensoriels sur le même produitqubit, à condition que les facteurs agissant sur ceux-ci qubit restent les mêmes.

Un observable peut être redimensionné et ajouter d'autres observables (mis à l'échelle ou non). Cela crée un Sum qui peut être utilisé dans le type de AdjointGradient résultat.

La Observable classe inclut les observables suivants.

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

Paramètres

Les circuits peuvent intégrer des paramètres libres. Ces paramètres libres ne doivent être créés qu'une seule fois pour être exécutés plusieurs fois et peuvent être utilisés pour calculer des dégradés.

Chaque paramètre gratuit utilise un nom codé sous forme de chaîne qui permet de :

  • Définir les valeurs des paramètres

  • Identifier les paramètres à utiliser

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)

Gradient adjoint

L'SV1appareil calcule le gradient adjoint d'une valeur attendue observable, y compris un hamiltonien à plusieurs termes. Pour différencier les paramètres, spécifiez leur nom (sous forme de chaîne) ou par référence directe.

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

Le fait de transmettre des valeurs de paramètres fixes en tant qu'arguments à un circuit paramétré supprimera les paramètres libres. L'exécution de ce circuit AdjointGradient produit une erreur, car les paramètres libres n'existent plus. L'exemple de code suivant illustre l'utilisation correcte et incorrecte :

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