

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.

# Ejemplo de tareas cuánticas en Amazon Braket
<a name="braket-submit-tasks-to-braket"></a>

En esta sección se explican las etapas de ejecución de una tarea cuántica de ejemplo, desde la selección del dispositivo hasta la visualización del resultado. Como práctica recomendada para Amazon Braket, le recomendamos que comience por ejecutar el circuito en un simulador, como SV1.

**Topics**
+ [Especificación del dispositivo](#braket-example-specify-device)
+ [Envío de una de tarea cuántica de ejemplo](#braket-submit-example-task)
+ [Envío de una tarea parametrizada](#braket-submit-parametrized-task)
+ [Especifique shots.](#braket-shots)
+ [Sondeo de resultados](#braket-polling-results)
+ [Visualización de los resultados de ejemplo](#braket-example-results)

## Especificación del dispositivo
<a name="braket-example-specify-device"></a>

Primero, seleccione y especifique el dispositivo para su tarea cuántica. En este ejemplo se muestra cómo elegir el simulador SV1.

```
from braket.aws import AwsDevice

# Choose the on-demand simulator to run the circuit
device = AwsDevice("arn:aws:braket:::device/quantum-simulator/amazon/sv1")
```

Puede ver algunas de las propiedades de este dispositivo de la siguiente manera:

```
print(device.name)
for iter in device.properties.action['braket.ir.jaqcd.program']:
    print(iter)
```

```
SV1
('version', ['1.0', '1.1'])
('actionType', 'braket.ir.jaqcd.program')
('supportedOperations', ['ccnot', 'cnot', 'cphaseshift', 'cphaseshift00', 'cphaseshift01', 'cphaseshift10', 'cswap', 'cy', 'cz', 'ecr', 'h', 'i', 'iswap', 'pswap', 'phaseshift', 'rx', 'ry', 'rz', 's', 'si', 'swap', 't', 'ti', 'unitary', 'v', 'vi', 'x', 'xx', 'xy', 'y', 'yy', 'z', 'zz'])
('supportedResultTypes', [ResultType(name='Sample', observables=['x', 'y', 'z', 'h', 'i', 'hermitian'], minShots=1, maxShots=100000), ResultType(name='Expectation', observables=['x', 'y', 'z', 'h', 'i', 'hermitian'], minShots=0, maxShots=100000), ResultType(name='Variance', observables=['x', 'y', 'z', 'h', 'i', 'hermitian'], minShots=0, maxShots=100000), ResultType(name='Probability', observables=None, minShots=1, maxShots=100000), ResultType(name='Amplitude', observables=None, minShots=0, maxShots=0)])
('disabledQubitRewiringSupported', None)
```

## Envío de una de tarea cuántica de ejemplo
<a name="braket-submit-example-task"></a>

Envíe una tarea cuántica de ejemplo para ejecutarla en el simulador bajo demanda.

```
from braket.circuits import Circuit, Observable

# Create a circuit with a result type
circ = Circuit().rx(0, 1).ry(1, 0.2).cnot(0, 2).variance(observable=Observable.Z(), target=0)
# Add another result type
circ.probability(target=[0, 2])

# Set up S3 bucket (where results are stored)
my_bucket = "amazon-braket-s3-demo-bucket"  # The name of the bucket
my_prefix = "your-folder-name"  # The name of the folder in the bucket
s3_location = (my_bucket, my_prefix)

# Submit the quantum task to run
my_task = device.run(circ, s3_location, shots=1000, poll_timeout_seconds=100, poll_interval_seconds=10)
# The positional argument for the S3 bucket is optional if you want to specify a bucket other than the default

# Get results of the quantum task
result = my_task.result()
```

El comando `device.run()` crea una tarea cuántica a través de la API de `CreateQuantumTask`. Tras un breve período de inicialización, la tarea cuántica se pone en cola hasta que exista la capacidad de ejecutarla en un dispositivo. En este caso, el dispositivo es SV1. Una vez que el dispositivo completa el cómputo, Amazon Braket escribe los resultados en la ubicación de Amazon S3 especificada en la llamada. El argumento posicional `s3_location` es necesario para todos los dispositivos excepto para el simulador local.

**nota**  
La acción de la tarea cuántica de Braket tiene un tamaño limitado de 3 MB.

## Envío de una tarea parametrizada
<a name="braket-submit-parametrized-task"></a>

 Amazon Braket ofrece simuladores locales y bajo demanda, y QPUs también admite la especificación de valores de parámetros libres al enviar la tarea. Puede hacer esto utilizando el argumento `inputs` para `device.run()`, como se muestra en el siguiente ejemplo. Las `inputs` deben ser un diccionario de pares cadena-número flotante, donde las claves son los nombres de los parámetros.

La compilación paramétrica puede mejorar el rendimiento de la ejecución de ciertos circuitos paramétricos. QPUs Al enviar un circuito paramétrico como tarea cuántica a una QPU compatible, Braket compilará el circuito una vez y almacenará en caché el resultado. No se produce la recompilación en las actualizaciones posteriores de los parámetros del mismo circuito, lo que se traduce en tiempos de ejecución más rápidos para las tareas que utilizan el mismo circuito. Braket utiliza automáticamente los datos de calibración actualizados del proveedor de hardware al compilar su circuito para garantizar resultados de la máxima calidad.

**nota**  
La compilación paramétrica es compatible con todos los sistemas superconductores basados en compuertas, Rigetti Computing con la excepción de los QPUs programas de nivel de pulso.

```
from braket.circuits import Circuit, FreeParameter, Observable

# Create the free parameters
alpha = FreeParameter('alpha')
beta = FreeParameter('beta')

# Create a circuit with a result type
circ = Circuit().rx(0, alpha).ry(1, alpha).cnot(0, 2).xx(0, 2, beta)
circ.variance(observable=Observable.Z(), target=0)

# Add another result type
circ.probability(target=[0, 2])

# Submit the quantum task to run
my_task = device.run(circ, inputs={'alpha': 0.1, 'beta': 0.2}, shots=100)
```

## Especifique shots.
<a name="braket-shots"></a>

El argumento shots se refiere al número de shots de medición deseados. Los simuladores como SV1 admiten dos modos de simulación.
+ Para shots = 0, el simulador realiza una simulación exacta y devuelve los valores verdaderos de todos los tipos de resultados. (No disponible en TN1).
+ Para valores distintos de ceroshots, el simulador toma muestras de la distribución de salida para emular el ruido real. shot QPUs Los dispositivos QPU solo permiten shots > 0.

Para obtener información sobre el número máximo de shots por tarea cuántica, consulte la sección [Cuotas de Braket](braket-quotas.md).

## Sondeo de resultados
<a name="braket-polling-results"></a>

Al ejecutar `my_task.result()`, el SDK comienza a sondear en busca de un resultado con los parámetros que usted define al crear la tarea cuántica:
+  `poll_timeout_seconds` es el número de segundos que se tarda en sondear la tarea cuántica antes de que se agote el tiempo de espera al ejecutar la tarea cuántica en el simulador bajo demanda o en los dispositivos QPU. El valor predeterminado es 432 000 segundos, lo que equivale a 5 días.
+  **Nota:** En el caso de los dispositivos QPU como Rigetti y IonQ, le recomendamos que espere unos días. Si el tiempo de espera del sondeo es demasiado corto, es posible que los resultados no se devuelvan dentro del tiempo de sondeo. Por ejemplo, cuando una QPU no está disponible, se devuelve un error de tiempo de espera local.
+  `poll_interval_seconds` es la frecuencia con la que se sondea la tarea cuántica. Especifica la frecuencia con la que se llama a la API de Braket para obtener el estado cuando la tarea cuántica se ejecuta en el simulador bajo demanda y en dispositivos QPU. El valor predeterminado es 1 segundo.

Esta ejecución asíncrona facilita la interacción con dispositivos QPU que no siempre están disponibles. Por ejemplo, un dispositivo podría no estar disponible durante un período de mantenimiento regular.

El resultado devuelto contiene una serie de metadatos asociados a la tarea cuántica. Puede utilizar estos comandos para comprobar el resultado de medición:

```
print('Measurement results:\n', result.measurements)
print('Counts for collapsed states:\n', result.measurement_counts)
print('Probabilities for collapsed states:\n', result.measurement_probabilities)
```

```
Measurement results:
 [[1 0 1]
 [0 0 0]
 [0 0 0]
 ...
 [0 0 0]
 [0 0 0]
 [1 0 1]]
Counts for collapsed states:
 Counter({'000': 766, '101': 220, '010': 11, '111': 3})
Probabilities for collapsed states:
 {'101': 0.22, '000': 0.766, '010': 0.011, '111': 0.003}
```

## Visualización de los resultados de ejemplo
<a name="braket-example-results"></a>

Como también especificó el `ResultType`, puede ver los resultados devueltos. Los tipos de resultados aparecen en el orden en que se añadieron al circuito.

```
print('Result types include:\n', result.result_types)
print('Variance=', result.values[0])
print('Probability=', result.values[1])

# Plot the result and do some analysis
import matplotlib.pyplot as plt
plt.bar(result.measurement_counts.keys(), result.measurement_counts.values())
plt.xlabel('bitstrings')
plt.ylabel('counts')
```

```
Result types include:
 [ResultTypeValue(type=Variance(observable=['z'], targets=[0], type=<Type.variance: 'variance'>), value=0.693084), ResultTypeValue(type=Probability(targets=[0, 2], type=<Type.probability: 'probability'>), value=array([0.777, 0.   , 0.   , 0.223]))]
Variance= 0.693084
Probability= [0.777 0.    0.    0.223]
Text(0, 0.5, 'counts')
```

![\[Gráfico de barras que muestra el número de recuentos de diferentes cadenas de bits, siendo la barra más alta la de «000», con más de 700 recuentos.\]](http://docs.aws.amazon.com/es_es/braket/latest/developerguide/images/demo-result.png)
