Tipe Hasil - Amazon Braket

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

Tipe Hasil

AmazonBraket dapat mengembalikan berbagai jenis hasil ketika rangkaian diukur menggunakanResultType. Sirkuit dapat mengembalikan jenis hasil berikut.

  • AdjointGradientmengembalikan 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.

  • Amplitudemengembalikan amplitudo keadaan kuantum tertentu dalam fungsi gelombang keluaran. Ini hanya tersedia di simulator lokal SV1 dan lokal.

  • Expectationmengembalikan nilai ekspektasi dari observable yang diberikan, yang dapat ditentukan dengan Observable kelas diperkenalkan nanti dalam chapter ini. Target yang qubits digunakan untuk mengukur yang dapat diamati harus ditentukan, dan jumlah target yang ditentukan harus sama dengan jumlah qubits tindakan yang dapat diamati. Jika tidak ada target yang ditentukan, observable harus beroperasi hanya pada 1 qubit dan diterapkan ke semua secara qubits paralel.

  • Probabilitymengembalikan 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 yang dikembalikan. qubits

  • Reduced density matrixmengembalikan matriks kepadatan untuk subsistem target tertentu qubits dari sistem. qubits Untuk membatasi ukuran jenis hasil ini, Braket membatasi jumlah target qubits hingga maksimal 8.

  • StateVectormengembalikan vektor status penuh. Ini tersedia di simulator lokal.

  • Samplemengembalikan jumlah pengukuran dari qubit set target tertentu dan dapat diamati. Jika tidak ada target yang ditentukan, observable harus beroperasi hanya pada 1 qubit dan diterapkan ke semua secara qubits paralel. Jika target ditentukan, jumlah target yang ditentukan harus sama dengan jumlah qubits tindakan yang dapat diamati.

  • Variancemengembalikan varians (mean([x-mean(x)]2)) dari qubit set target yang ditentukan dan dapat diamati sebagai jenis hasil yang diminta. Jika tidak ada target yang ditentukan, observable harus beroperasi hanya pada 1 qubit dan diterapkan ke semua secara qubits 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

OQC

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 40qubits.

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/Aspen-M-3") # print the result types supported by this device for iter in device.properties.action['braket.ir.jaqcd.program'].supportedResultTypes: print(iter)
name='Sample' observables=['x', 'y', 'z', 'h', 'i'] minShots=10 maxShots=100000 name='Expectation' observables=['x', 'y', 'z', 'h', 'i'] minShots=10 maxShots=100000 name='Variance' observables=['x', 'y', 'z', 'h', 'i'] minShots=10 maxShots=100000 name='Probability' observables=None minShots=10 maxShots=100000

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 memberikan pengukuran (misalnyaRigetti) sebagai hasil dan yang lain memberikan probabilitas sebagai hasil (misalnya IonQ danOQC). SDK menyediakan properti pengukuran pada hasil, tetapi untuk perangkat yang mengembalikan probabilitas, itu adalah pasca-dihitung. Dengan demikian, perangkat seperti yang disediakan oleh IonQ dan OQC 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

AmazonBraket 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 pengamatan non-identitas yang berbeda ke yang samaqubit, Anda akan 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 samaqubit, asalkan faktor yang bekerja pada itu qubit 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.

ObservableKelas 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