Mula pantas Estimator
Primitif Estimator mengira nilai jangkaan untuk satu atau lebih boleh pantau berkenaan dengan keadaan yang disediakan oleh Circuit kuantum. Circuit boleh berparameter, selagi nilai parameter juga disediakan sebagai input kepada primitif.
Primitif ini mempunyai beberapa teknik pengurangan ralat dan penindasan ralat terbina dalam, termasuk dynamical decoupling, Pauli-twirling, ZNE lipatan gate, PEA, dan PEC. Ia juga menyokong pilihan resilience_level yang membolehkan anda mengkonfigurasi pertukaran kos dan ketepatan dengan mudah.
Langkah-langkah dalam topik ini menerangkan cara menyediakan Estimator, meneroka pilihan yang boleh anda gunakan untuk mengkonfigurasinya, dan memanggilnya dalam program.
Versi pakej
Kod di halaman ini dibangunkan menggunakan keperluan berikut. Kami syorkan menggunakan versi ini atau yang lebih baru.
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
```json
{/*Verified the v2 examples 2/29/24 - updated 10/29/24*/}
## Langkah-langkah untuk menggunakan primitif Estimator \{#steps-to-use-the-estimator-primitive}
### 1. Mulakan akaun \{#1-initialize-the-account}
Kerana Qiskit Runtime adalah perkhidmatan terurus, anda perlu memulakan akaun anda terlebih dahulu. Anda kemudian boleh memilih QPU yang ingin anda gunakan untuk mengira nilai jangkaan.
Ikuti langkah-langkah dalam [Sediakan akaun IBM Cloud anda](cloud-setup) jika anda belum mempunyai akaun.
:::note[gate pecahan]
Untuk menggunakan [gate pecahan](/guides/fractional-gates) yang baru disokong, tetapkan `use_fractional_gates=True` apabila meminta Backend dari instans `QiskitRuntimeService`. Contohnya:
```python
service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)
Ini adalah ciri eksperimen dan mungkin berubah pada masa depan.
:::
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)
print(backend.name)
ibm_fez
2. Cipta Circuit dan boleh pantau
Anda memerlukan sekurang-kurangnya satu Circuit dan satu boleh pantau sebagai input kepada primitif Estimator.
from qiskit.circuit.library import qaoa_ansatz
from qiskit.quantum_info import SparsePauliOp
entanglement = [tuple(edge) for edge in backend.coupling_map.get_edges()]
observable = SparsePauliOp.from_sparse_list(
[("ZZ", [i, j], 0.5) for i, j in entanglement],
num_qubits=backend.num_qubits,
)
circuit = qaoa_ansatz(observable, reps=2)
# The circuit is parametrized, so we will define the parameter values for execution
param_values = [0.1, 0.2, 0.3, 0.4]
Circuit dan boleh pantau perlu ditransformasi untuk hanya menggunakan arahan yang disokong oleh QPU (dirujuk sebagai Circuit set seni bina arahan (ISA)). Gunakan Transpiler untuk melakukan ini.
from qiskit.transpiler import generate_preset_pass_manager
pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)
print(f">>> Circuit ops (ISA): {isa_circuit.count_ops()}")
>>> Circuit ops (ISA): OrderedDict([('rz', 4472), ('sx', 1884), ('cz', 1120)])
3. Mulakan Estimator Qiskit Runtime
Apabila anda memulakan Estimator, gunakan parameter mode untuk menentukan mod yang anda mahu ia jalankan. Nilai yang mungkin adalah objek batch, session, atau backend untuk mod pelaksanaan kumpulan, session, dan kerja masing-masing. Untuk maklumat lanjut, lihat Pengenalan kepada mod pelaksanaan Qiskit Runtime. Perhatikan bahawa pengguna Pelan Terbuka tidak boleh menghantar kerja session.
from qiskit_ibm_runtime import EstimatorV2 as Estimator
estimator = Estimator(mode=backend)
4. Panggil Estimator dan dapatkan keputusan
Seterusnya, panggil kaedah run() untuk mengira nilai jangkaan bagi Circuit dan boleh pantau input. Circuit, boleh pantau, dan set nilai parameter pilihan dimasukkan sebagai tupel blok bersatu primitif (PUB).
job = estimator.run([(isa_circuit, isa_observable, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")
>>> Job ID: d82869ntjchs73bnokog
>>> Job Status: QUEUED
result = job.result()
print(f">>> {result}")
print(f" > Expectation value: {result[0].data.evs}")
print(f" > Metadata: {result[0].metadata}")
>>> PrimitiveResult([PubResult(data=DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})], metadata={'dynamical_decoupling': {'enable': False, 'sequence_type': 'XX', 'extra_slack_distribution': 'middle', 'scheduling_method': 'alap'}, 'twirling': {'enable_gates': False, 'enable_measure': True, 'num_randomizations': 'auto', 'shots_per_randomization': 'auto', 'interleave_randomizations': True, 'strategy': 'active-accum'}, 'resilience': {'measure_mitigation': True, 'zne_mitigation': False, 'pec_mitigation': False}, 'version': 2})
> Expectation value: 30.60337496305257
> Metadata: {'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}
Langkah seterusnya
- Ketahui cara menguji secara tempatan sebelum menjalankan pada komputer kuantum.
- Semak contoh terperinci.
- Amalkan penggunaan primitif melalui pelajaran Fungsi kos dalam IBM Quantum Learning.
- Ketahui cara mentransail secara tempatan dalam bahagian Transpil.
- Cuba panduan Bandingkan tetapan Transpiler.
- Ketahui cara menggunakan pilihan primitif.
- Lihat API untuk pilihan Estimator.
- Baca Migrasi ke primitif V2.