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 membuat tugas kuantum melalui CreateQuantumTask API. Setelah waktu inisialisasi yang singkat, tugas kuantum diantrian sampai ada kapasitas untuk menjalankan tugas kuantum pada perangkat. Dalam hal ini, perangkatnyaSV1. 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 sirkuit parametrik sebagai tugas kuantum ke QPU yang didukung, 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 QPUs dari Rigetti Computing dengan pengecualian program tingkat pulsa.

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

shotsArgumen mengacu pada jumlah pengukuran yang diinginkanshots. Simulator seperti SV1 mendukung dua mode simulasi.

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

  • Untuk nilai bukan nolshots, sampel simulator dari distribusi output untuk meniru shot kebisingan nyata. QPUs Perangkat QPU hanya shots mengizinkan> 0.

Untuk informasi tentang jumlah maksimum bidikan per tugas kuantum, lihat Kuota Braket.

Polling untuk hasil

Saat mengeksekusimy_task.result(), SDK memulai polling 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 on-demand dan atau perangkat QPU. Nilai default adalah 432,000 detik, yaitu 5 hari.

  • Catatan: Untuk perangkat QPU seperti Rigetti danIonQ, kami sarankan Anda mengizinkan beberapa hari. Jika waktu jajak pendapat terlalu singkat, hasil mungkin tidak dikembalikan dalam waktu jajak pendapat. Sebagai contoh, ketika QPU tidak tersedia, kesalahan waktu habis lokal dikembalikan.

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

Eksekusi asinkron ini memfasilitasi interaksi dengan perangkat QPU 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 menentukanResultType, 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.