Contoh tugas kuantum di Amazon Braket - Amazon Braket

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Contoh tugas kuantum di Amazon Braket

Bagian ini berjalan melalui tahapan menjalankan contoh tugas kuantum, mulai dari memilih perangkat hingga melihat hasilnya. Sebagai praktik terbaik untuk Amazon Braket, kami sarankan Anda mulai dengan menjalankan sirkuit pada simulator, seperti SV1.

Tentukan perangkat

Pertama, pilih dan tentukan perangkat untuk tugas kuantum Anda. Contoh ini menunjukkan bagaimana memilih simulator, 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")

Anda dapat melihat beberapa properti perangkat ini sebagai berikut:

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

Kirimkan contoh tugas kuantum

Kirimkan contoh tugas kuantum untuk dijalankan di simulator sesuai permintaan.

# 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 = "amzn-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()

device.run()Perintah menciptakan tugas kuantum melalui CreateQuantumTaskAPI. Setelah waktu inisialisasi yang singkat, tugas kuantum diantrian sampai ada kapasitas untuk menjalankan tugas kuantum pada perangkat. Dalam hal ini, perangkat adalah SV1. Setelah perangkat menyelesaikan perhitungan, Amazon Braket menulis hasilnya ke lokasi Amazon S3 yang ditentukan dalam panggilan. Argumen posisi s3_location diperlukan untuk semua perangkat kecuali simulator lokal.

catatan

Tindakan tugas kuantum Braket dibatasi hingga 3MB.

Kirim tugas parametris

Amazon Braket sesuai permintaan dan simulator lokal dan QPUs juga mendukung menentukan nilai parameter gratis pada pengiriman tugas. Anda dapat melakukan ini dengan menggunakan inputs argumen untukdevice.run(), seperti yang ditunjukkan pada contoh berikut. inputsHarus berupa kamus pasangan string-float, di mana kuncinya adalah nama parameter.

Kompilasi parametrik dapat meningkatkan kinerja mengeksekusi sirkuit parametrik pada tertentu. QPUs Saat mengirimkan rangkaian parametrik sebagai tugas kuantum ke yang didukungQPU, Braket akan mengkompilasi rangkaian sekali, dan menyimpan hasilnya. Tidak ada kompilasi ulang untuk pembaruan parameter berikutnya ke sirkuit yang sama, menghasilkan runtime yang lebih cepat untuk tugas yang menggunakan sirkuit yang sama. Braket secara otomatis menggunakan data kalibrasi yang diperbarui dari penyedia perangkat keras saat menyusun sirkuit Anda untuk memastikan hasil dengan kualitas terbaik.

catatan

Kompilasi parametrik didukung pada semua superkonduktor, berbasis gerbang dari QPUs Rigetti Computing dengan pengecualian program tingkat denyut nadi.

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

Tentukan shots

Bagian shots Argumen mengacu pada jumlah pengukuran yang diinginkan shots. Simulator seperti SV1 mendukung dua mode simulasi.

  • Untuk shots = 0, simulator melakukan simulasi yang tepat, mengembalikan nilai sebenarnya untuk semua jenis hasil. (Tidak tersedia di TN1.)

  • Untuk nilai bukan nol shots, sampel simulator dari distribusi output untuk meniru shot kebisingan nyataQPUs. QPUperangkat hanya mengizinkan shots > 0.

Untuk informasi tentang jumlah maksimum bidikan per tugas kuantum, silakan merujuk ke Kuota Braket.

Polling untuk hasil

Saat mengeksekusimy_task.result(), polling SDK dimulai untuk hasil dengan parameter yang Anda tentukan pada pembuatan tugas kuantum:

  • poll_timeout_secondsadalah jumlah detik untuk polling tugas kuantum sebelum waktu habis saat menjalankan tugas kuantum pada simulator dan atau QPU perangkat sesuai permintaan. Nilai default adalah 432,000 detik, yaitu 5 hari.

  • Catatan: Untuk QPU perangkat seperti Rigetti and IonQ, kami sarankan Anda mengizinkan beberapa hari. Jika waktu jajak pendapat terlalu singkat, hasil mungkin tidak dikembalikan dalam waktu jajak pendapat. Misalnya, ketika a tidak QPU tersedia, kesalahan batas waktu lokal dikembalikan.

  • poll_interval_secondsadalah frekuensi tugas kuantum yang disurvei. Ini menentukan seberapa sering Anda memanggil Braket API untuk mendapatkan status ketika tugas kuantum dijalankan pada simulator sesuai permintaan dan pada QPU perangkat. Nilai default adalah 1 detik.

Eksekusi asinkron ini memfasilitasi interaksi dengan QPU perangkat yang tidak selalu tersedia. Misalnya, perangkat mungkin tidak tersedia selama window perawatan rutin.

Hasil yang dikembalikan berisi berbagai metadata yang terkait dengan tugas kuantum. Anda dapat memeriksa hasil pengukuran dengan perintah berikut:

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}

Contoh: Lihat hasilnya

Karena Anda juga telah menentukan ResultType, Anda dapat melihat hasil yang dikembalikan. Jenis hasil muncul dalam urutan penambahannya ke sirkuit.

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]
Bagan batang menunjukkan jumlah hitungan ke bitstring yang berbeda, dengan bilah tertinggi untuk “000" yang berisi lebih dari 700 hitungan.