Beispiele für Quantenaufgaben auf Amazon Braket - 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.

Beispiele für Quantenaufgaben auf Amazon Braket

In diesem Abschnitt werden die einzelnen Phasen der Ausführung einer Beispiel-Quantenaufgabe beschrieben, von der Auswahl des Geräts bis hin zur Anzeige des Ergebnisses. Als bewährte Methode für Amazon Braket empfehlen wir, dass Sie die Schaltung zunächst auf einem Simulator ausführen, z. B. SV1.

Geben Sie das Gerät an

Wählen und spezifizieren Sie zunächst das Gerät für Ihre Quantenaufgabe. Dieses Beispiel zeigt, wie Sie den Simulator auswählen, 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")

Sie können einige Eigenschaften dieses Geräts wie folgt anzeigen:

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

Reichen Sie ein Beispiel für eine Quantenaufgabe ein

Reichen Sie eine Beispiel-Quantenaufgabe ein, die auf dem On-Demand-Simulator ausgeführt werden soll.

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

Der device.run() Befehl erstellt eine Quantenaufgabe über CreateQuantumTask API. Nach einer kurzen Initialisierungszeit wird die Quantenaufgabe in die Warteschlange gestellt, bis die Kapazität zur Ausführung der Quantenaufgabe auf einem Gerät vorhanden ist. In diesem Fall ist das Gerät SV1. Nachdem das Gerät die Berechnung abgeschlossen hat, Amazon Braket schreibt die Ergebnisse an den im Anruf angegebenen Amazon S3 S3-Speicherort. Das Positionsargument s3_location ist für alle Geräte außer dem lokalen Simulator erforderlich.

Anmerkung

Die Braket-Quanten-Task-Aktion ist auf eine Größe von 3 MB begrenzt.

Reichen Sie eine parametrisierte Aufgabe ein

Amazon Braket On-Demand-Simulatoren und lokale Simulatoren und unterstützt QPUs auch die Angabe von Werten freier Parameter bei der Aufgabenübergabe. Sie können dies tun, indem Sie das inputs Argument to verwendendevice.run(), wie im folgenden Beispiel gezeigt. inputsEs muss sich um ein Wörterbuch mit String-Float-Paaren handeln, wobei die Schlüssel die Parameternamen sind.

Die parametrische Kompilierung kann die Leistung bei der Ausführung parametrischer Schaltungen in bestimmten Fällen verbessern. QPUs Wenn Braket eine parametrische Schaltung als Quantenaufgabe an einen unterstützten Computer sendetQPU, kompiliert Braket die Schaltung einmal und speichert das Ergebnis im Cache. Für nachfolgende Parameteraktualisierungen derselben Schaltung ist keine Neukompilierung erforderlich, was zu schnelleren Laufzeiten für Aufgaben führt, die dieselbe Schaltung verwenden. Braket verwendet bei der Kompilierung Ihrer Schaltung automatisch die aktualisierten Kalibrierungsdaten des Hardwareanbieters, um Ergebnisse von höchster Qualität zu gewährleisten.

Anmerkung

Die parametrische Kompilierung wird auf allen supraleitenden Gate-basierten Systemen unterstützt QPUs Rigetti Computing mit Ausnahme von Pulspegelprogrammen.

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

Spezifizieren shots

Das Tool shots Argument bezieht sich auf die Anzahl der gewünschten Messungen shots. Simulatoren wie SV1 unterstützt zwei Simulationsmodi.

  • Wählen Sie in der &Snowconsole; Ihren Auftrag aus der Tabelle. shots = 0, der Simulator führt eine exakte Simulation durch und gibt die wahren Werte für alle Ergebnistypen zurück. (Nicht verfügbar auf TN1.)

  • Für Werte ungleich Null von shots, der Simulator verwendet Stichproben aus der Ausgabeverteilung, um das zu emulieren shot QPUsEchtes Geräusch. QPUGeräte erlauben nur shots > 0.

Informationen zur maximalen Anzahl von Schüssen pro Quantenaufgabe finden Sie unter Braket Quotas.

Umfrage nach Ergebnissen

Bei der Ausführung my_task.result() SDK beginnt der mit der Abfrage nach einem Ergebnis mit den Parametern, die Sie bei der Erstellung der Quantenaufgabe definiert haben:

  • poll_timeout_secondsist die Anzahl der Sekunden, die für die Abfrage der Quantenaufgabe benötigt werden, bevor das Timeout eintritt, wenn die Quantenaufgabe auf dem On-Demand-Simulator und/oder den QPU Geräten ausgeführt wird. Der Standardwert ist 432.000 Sekunden, was 5 Tagen entspricht.

  • Hinweis: Für QPU Geräte wie Rigetti and IonQ, wir empfehlen Ihnen, einige Tage einzuplanen. Wenn Ihr Abfrage-Timeout zu kurz ist, werden die Ergebnisse möglicherweise nicht innerhalb der Abfragezeit zurückgegeben. Wenn beispielsweise a nicht verfügbar QPU ist, wird ein lokaler Timeout-Fehler zurückgegeben.

  • poll_interval_secondsist die Frequenz, mit der die Quantenaufgabe abgefragt wird. Sie gibt an, wie oft du den Braket anrufst API um den Status abzurufen, wenn die Quantenaufgabe auf dem On-Demand-Simulator und auf QPU Geräten ausgeführt wird. Der Standardwert ist 1 Sekunde.

Diese asynchrone Ausführung erleichtert die Interaktion mit QPU Geräten, die nicht immer verfügbar sind. Beispielsweise könnte ein Gerät während eines regulären Wartungsfensters nicht verfügbar sein.

Das zurückgegebene Ergebnis enthält eine Reihe von Metadaten, die mit der Quantenaufgabe verknüpft sind. Sie können das Messergebnis mit den folgenden Befehlen überprüfen:

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}

Sehen Sie sich die Beispielergebnisse an

Da Sie auch die angegeben habenResultType, können Sie die zurückgegebenen Ergebnisse anzeigen. Die Ergebnistypen werden in der Reihenfolge angezeigt, in der sie dem Schaltkreis hinzugefügt wurden.

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]
Balkendiagramm, das die Anzahl der Zählungen für verschiedene Bitstrings zeigt, wobei der höchste Balken für „000" über 700 Zählungen enthält.