Esempi di attività quantistiche su Amazon Braket - Amazon Braket

Impara le basi dell'informatica quantistica con! AWS Iscriviti all'Amazon Braket Digital Learning Plan e ottieni il tuo badge digitale dopo aver completato una serie di corsi di apprendimento e una valutazione digitale.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esempi di attività quantistiche su Amazon Braket

Questa sezione illustra le fasi dell'esecuzione di un'attività quantistica di esempio, dalla selezione del dispositivo alla visualizzazione del risultato. Come best practice per Amazon Braket, ti consigliamo di iniziare facendo funzionare il circuito su un simulatore, ad esempio. SV1

Specificare il dispositivo

Innanzitutto, selezionate e specificate il dispositivo per l'operazione quantistica. Questo esempio mostra come scegliere il simulatore,. SV1

# choose the on-demand simulator to run the circuit from braket.aws import AwsDevice device = AwsDevice("arn:aws:braket:::device/quantum-simulator/amazon/sv1")

È possibile visualizzare alcune delle proprietà di questo dispositivo come segue:

print (device.name) for iter in device.properties.action['braket.ir.jaqcd.program']: print(iter)
SV1 ('version', ['1.0', '1.1']) ('actionType', <DeviceActionType.JAQCD: 'braket.ir.jaqcd.program'>) ('supportedOperations', ['ccnot', 'cnot', 'cphaseshift', 'cphaseshift00', 'cphaseshift01', 'cphaseshift10', 'cswap', 'cy', 'cz', '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)])

Invia un esempio di attività quantistica

Invia un esempio di task quantistico da eseguire sul simulatore on-demand.

# 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-your-s3-bucket-name" # 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()

Il device.run() comando crea un'attività quantistica tramite l'API. CreateQuantumTask Dopo un breve periodo di inizializzazione, l'attività quantistica viene messa in coda fino a quando non esiste la capacità necessaria per eseguirla su un dispositivo. In questo caso, il dispositivo è. SV1 Dopo che il dispositivo ha completato il calcolo, Amazon Braket scrive i risultati nella posizione Amazon S3 specificata nella chiamata. L'argomento posizionale s3_location è obbligatorio per tutti i dispositivi tranne il simulatore locale.

Nota

L'azione del task quantistico di Braket ha una dimensione limitata a 3 MB.

Invia un'attività parametrizzata

I simulatori e le QPU locali e on-demand di Amazon Braket supportano anche la specificazione di valori di parametri liberi al momento dell'invio delle attività. Puoi farlo utilizzando l'inputsargomento todevice.run(), come mostrato nell'esempio seguente. inputsDeve essere un dizionario di coppie string-float, in cui le chiavi sono i nomi dei parametri.

La compilazione parametrica può migliorare le prestazioni di esecuzione di circuiti parametrici su determinate QPU. Quando invia un circuito parametrico come attività quantistica a una QPU supportata, Braket compilerà il circuito una volta e memorizzerà nella cache il risultato. Non è prevista alcuna ricompilazione per i successivi aggiornamenti dei parametri sullo stesso circuito, con conseguente tempi di esecuzione più rapidi per le attività che utilizzano lo stesso circuito. Braket utilizza automaticamente i dati di calibrazione aggiornati del fornitore di hardware durante la compilazione del circuito per garantire risultati della massima qualità.

Nota

La compilazione parametrica è supportata su tutte le QPU superconduttrici basate su gate di e ad eccezione dei programmi a livello di impulsi. Rigetti Computing Oxford Quantum Circuits

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

Specifica shots

L'shotsargomento si riferisce al numero di misurazioni desiderate. shots Simulatori come ad esempio SV1 supportano due modalità di simulazione.

  • Per shots = 0, il simulatore esegue una simulazione esatta, restituendo i valori reali per tutti i tipi di risultati. (Non disponibile suTN1.)

  • Per valori diversi da zero dishots, il simulatore campiona dalla distribuzione di uscita per emulare il shot rumore delle QPU reali. I dispositivi QPU consentono solo > 0. shots

Per informazioni sul numero massimo di scatti per operazione quantistica, consulta Braket Quotas.

Sondaggio per visualizzare i risultati

Durante l'esecuzionemy_task.result(), l'SDK inizia a ricercare un risultato con i parametri definiti al momento della creazione dell'attività quantistica:

  • poll_timeout_secondsè il numero di secondi necessari per eseguire il polling dell'attività quantistica prima che scada quando si esegue l'attività quantistica sul simulatore on-demand e/o sui dispositivi QPU. Il valore predefinito è 432.000 secondi, ovvero 5 giorni.

  • Nota: per i dispositivi QPU come Rigetti eIonQ, si consiglia di attendere alcuni giorni. Se il timeout per i sondaggi è troppo breve, è possibile che i risultati non vengano restituiti entro il tempo di polling. Ad esempio, quando una QPU non è disponibile, viene restituito un errore di timeout locale.

  • poll_interval_secondsè la frequenza con cui viene analizzato il task quantistico. Specifica la frequenza con cui si chiama il Braket API per ottenere lo stato quando l'attività quantistica viene eseguita sul simulatore on-demand e sui dispositivi QPU. Il valore predefinito è 1 secondo.

Questa esecuzione asincrona facilita l'interazione con dispositivi QPU che non sono sempre disponibili. Ad esempio, un dispositivo potrebbe non essere disponibile durante una normale finestra di manutenzione.

Il risultato restituito contiene una serie di metadati associati al task quantistico. È possibile controllare il risultato della misurazione con i seguenti comandi:

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] [1 0 1] ... [0 0 0] [0 0 0] [0 0 0]] Counts for collapsed states: Counter({'000': 761, '101': 226, '010': 10, '111': 3}) Probabilities for collapsed states: {'101': 0.226, '000': 0.761, '111': 0.003, '010': 0.01}

Visualizza i risultati di esempio

Poiché hai anche specificato ilResultType, puoi visualizzare i risultati restituiti. I tipi di risultati vengono visualizzati nell'ordine in cui sono stati aggiunti al circuito.

print('Result types include:\n', result.result_types) print('Variance=',result.values[0]) print('Probability=',result.values[1]) # you can 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={'observable': ['z'], 'targets': [0], 'type': 'variance'}, value=0.7062359999999999), ResultTypeValue(type={'targets': [0, 2], 'type': 'probability'}, value=array([0.771, 0. , 0. , 0.229]))] Variance= 0.7062359999999999 Probability= [0.771 0. 0. 0.229]

                  risultato dimostrativo