Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Daftar jenis hasil
Amazon Braket dapat mengembalikan berbagai jenis hasil ketika sirkuit diukur menggunakan ResultType
. Sirkuit dapat mengembalikan jenis hasil berikut.
-
AdjointGradient
mengembalikan gradien (turunan vektor) dari nilai ekspektasi dari observable yang disediakan. Observable ini bekerja pada target yang diberikan sehubungan dengan parameter yang ditentukan menggunakan metode diferensiasi adjoint. Anda hanya dapat menggunakan metode ini ketika shots=0. -
Amplitude
mengembalikan amplitudo keadaan kuantum tertentu dalam fungsi gelombang keluaran. Ini tersedia di SV1 dan simulator lokal saja. -
Expectation
mengembalikan nilai ekspektasi dari observable yang diberikan, yang dapat ditentukan denganObservable
kelas diperkenalkan nanti dalam chapter ini. Targetnya qubits digunakan untuk mengukur observable harus ditentukan, dan jumlah target yang ditentukan harus sama dengan jumlah qubits di mana tindakan yang dapat diamati. Jika tidak ada target yang ditentukan, yang dapat diamati harus beroperasi hanya pada 1 qubit dan itu diterapkan untuk semua qubits secara paralel. -
Probability
mengembalikan probabilitas pengukuran keadaan basis komputasi. Jika target tidak ditentukan,Probability
mengembalikan probabilitas mengukur semua keadaan dasar. Jika target ditentukan, hanya probabilitas marjinal dari vektor dasar pada yang ditentukan qubits dikembalikan. -
Reduced density matrix
mengembalikan matriks kepadatan untuk subsistem target tertentu qubits dari sebuah sistem qubits. Untuk membatasi ukuran jenis hasil ini, Braket membatasi jumlah target qubits hingga maksimal 8. -
StateVector
mengembalikan vektor status penuh. Ini tersedia di simulator lokal. -
Sample
mengembalikan jumlah pengukuran dari target tertentu qubit diatur dan diamati. Jika tidak ada target yang ditentukan, yang dapat diamati harus beroperasi hanya pada 1 qubit dan itu diterapkan untuk semua qubits secara paralel. Jika target ditentukan, jumlah target yang ditentukan harus sama dengan jumlah qubits di mana tindakan yang dapat diamati. -
Variance
mengembalikan varians (mean([x-mean(x)]2)
) dari target yang ditentukan qubit set dan diamati sebagai jenis hasil yang diminta. Jika tidak ada target yang ditentukan, yang dapat diamati harus beroperasi hanya pada 1 qubit dan itu diterapkan untuk semua qubits secara paralel. Jika tidak, jumlah target yang ditentukan harus sama dengan jumlah qubits yang dapat diamati dapat diterapkan.
Jenis hasil yang didukung untuk perangkat yang berbeda:
Sim lokal |
SV1 |
DM1 |
TN1 |
Rigetti |
IonQ |
IQM |
|
Gradien Bersebelahan |
T |
T |
T |
T |
T |
T |
T |
Amplitudo |
T |
T |
T |
T |
T |
T |
T |
Perkiraan |
T |
Y |
Y |
Y |
Y |
Y |
T |
probabilitas |
T |
Y |
T |
T |
Y* |
T |
T |
Mengurangi matriks kepadatan |
T |
T |
T |
T |
T |
T |
T |
Vektor keadaan |
T |
T |
T |
T |
T |
T |
T |
Sampel |
T |
Y |
Y |
Y |
Y |
Y |
T |
Varians |
T |
Y |
Y |
Y |
Y |
Y |
T |
catatan
* Rigetti hanya mendukung jenis hasil probabilitas hingga 40 qubits.
Anda dapat memeriksa jenis hasil yang didukung dengan memeriksa properti perangkat, seperti yang ditunjukkan pada contoh berikut.
device = AwsDevice("arn:aws:braket:us-west-1::device/qpu/rigetti/Ankaa-2") # print the result types supported by this device for iter in device.properties.action['braket.ir.openqasm.program'].supportedResultTypes: print(iter)
name='Sample' observables=['x', 'y', 'z', 'h', 'i'] minShots=10 maxShots=50000 name='Expectation' observables=['x', 'y', 'z', 'h', 'i'] minShots=10 maxShots=50000 name='Variance' observables=['x', 'y', 'z', 'h', 'i'] minShots=10 maxShots=50000 name='Probability' observables=None minShots=10 maxShots=50000
Untuk memanggil aResultType
, tambahkan ke sirkuit, seperti yang ditunjukkan pada contoh berikut.
from braket.circuits import Observable circ = Circuit().h(0).cnot(0, 1).amplitude(state=["01", "10"]) circ.probability(target=[0, 1]) circ.probability(target=0) circ.expectation(observable=Observable.Z(), target=0) circ.sample(observable=Observable.X(), target=0) circ.state_vector() circ.variance(observable=Observable.Z(), target=0) # print one of the result types assigned to the circuit print(circ.result_types[0])
catatan
Beberapa perangkat menyediakan pengukuran (misalnya Rigetti) sebagai hasil dan lainnya memberikan probabilitas sebagai hasil (misalnya IonQ). SDKIni menyediakan properti pengukuran pada hasil, tetapi untuk perangkat yang mengembalikan probabilitas, itu adalah pasca-dihitung. Dengan demikian, perangkat seperti yang disediakan oleh IonQ memiliki hasil pengukuran yang ditentukan oleh probabilitas karena pengukuran per tembakan tidak dikembalikan. Anda dapat memeriksa apakah hasilnya dihitung pasca dengan melihat objek hasil seperti yang ditunjukkan dalam file ini. measurements_copied_from_device
Dapat diamati
Amazon Braket termasuk Observable
kelas, yang dapat digunakan untuk menentukan observable untuk diukur.
Anda dapat menerapkan paling banyak satu non-identitas unik yang dapat diamati untuk masing-masing qubit. Jika Anda menentukan dua atau lebih yang dapat diamati non-identitas yang berbeda ke yang sama qubit, Anda melihat kesalahan. Untuk tujuan ini, setiap faktor produk tensor dihitung sebagai individu yang dapat diamati, sehingga diperbolehkan untuk memiliki beberapa produk tensor yang bekerja pada yang sama qubit, asalkan faktor yang bertindak atas itu qubit adalah sama.
Anda juga dapat menskalakan yang dapat diamati dan menambahkan yang dapat diamati (diskalakan atau tidak). Ini menciptakan Sum
yang dapat digunakan dalam tipe AdjointGradient
hasil.
Observable
Kelas ini mencakup observable berikut.
Observable.I() Observable.H() Observable.X() Observable.Y() Observable.Z() # get the eigenvalues of the observable print("Eigenvalue:", Observable.H().eigenvalues) # or whether to rotate the basis to be computational basis print("Basis rotation gates:",Observable.H().basis_rotation_gates) # get the tensor product of observable for the multi-qubit case tensor_product = Observable.Y() @ Observable.Z() # view the matrix form of an observable by using print("The matrix form of the observable:\n",Observable.Z().to_matrix()) print("The matrix form of the tensor product:\n",tensor_product.to_matrix()) # also factorize an observable in the tensor form print("Factorize an observable:",tensor_product.factors) # self-define observables given it is a Hermitian print("Self-defined Hermitian:",Observable.Hermitian(matrix=np.array([[0, 1],[1, 0]]))) print("Sum of other (scaled) observables:", 2.0 * Observable.X() @ Observable.X() + 4.0 * Observable.Z() @ Observable.Z())
Eigenvalue: [ 1 -1] Basis rotation gates: (Ry('angle': -0.7853981633974483, 'qubit_count': 1),) The matrix form of the observable: [[ 1.+0.j 0.+0.j] [ 0.+0.j -1.+0.j]] The matrix form of the tensor product: [[ 0.+0.j 0.+0.j 0.-1.j 0.-0.j] [ 0.+0.j -0.+0.j 0.-0.j 0.+1.j] [ 0.+1.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j -0.-1.j 0.+0.j -0.+0.j]] Factorize an observable: (Y('qubit_count': 1), Z('qubit_count': 1)) Self-defined Hermitian: Hermitian('qubit_count': 1, 'matrix': [[0.+0.j 1.+0.j], [1.+0.j 0.+0.j]]) Sum of other (scaled) observables: Sum(TensorProduct(X('qubit_count': 1), X('qubit_count': 1)), TensorProduct(Z('qubit_count': 1), Z('qubit_count': 1)))
Parameter
Sirkuit dapat mencakup parameter bebas, yang dapat Anda gunakan dengan cara “membangun sekali - jalankan berkali-kali” dan untuk menghitung gradien. Parameter gratis memiliki nama yang disandikan string yang dapat Anda gunakan untuk menentukan nilainya atau untuk menentukan apakah akan membedakannya.
from braket.circuits import Circuit, FreeParameter, Observable theta = FreeParameter("theta") phi = FreeParameter("phi") circ = Circuit().h(0).rx(0, phi).ry(0, phi).cnot(0, 1).xx(0, 1, theta) circ.adjoint_gradient(observable=Observable.Z() @ Observable.Z(), target=[0, 1], parameters = ["phi", theta]
Untuk parameter yang ingin Anda bedakan, tentukan keduanya dengan menggunakan namanya (sebagai string) atau dengan referensi langsung. Perhatikan bahwa menghitung gradien menggunakan tipe AdjointGradient
hasil dilakukan sehubungan dengan nilai ekspektasi yang dapat diamati.
Catatan: Jika Anda telah memperbaiki nilai parameter bebas dengan meneruskannya sebagai argumen ke sirkuit berparameter, menjalankan sirkuit dengan AdjointGradient
jenis hasil dan parameter yang ditentukan akan menghasilkan kesalahan. Ini karena parameter yang kita gunakan untuk membedakan dengan tidak lagi ada. Lihat contoh berikut ini.
device.run(circ(0.2), shots=0) # will error, as no free parameters will be present device.run(circ, shots=0, inputs={'phi'=0.2, 'theta'=0.2) # will succeed