Langkau ke kandungan utama
Projek ini dalam fasa beta. Jumpa pepijat? Buat isu GitHub. Ada soalan atau idea? Tanya dalam Discussions — kami suka dengar maklum balas anda!
Bagaimana kualiti terjemahan pada halaman ini?

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 keseimbangan antara 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.

Pelaksanaan Estimator baharu

Pelaksanaan baharu antara muka Qiskit SamplerV2 dan EstimatorV2 telah diperkenalkan dalam qiskit-ibm-runtime v0.50.0. Primitif sisi klien ini melaksanakan sebahagian besar prapemprosesan dan pascapemprosesan di sisi klien dan mendelegasikan pelaksanaan kepada primitif Executor. Pelaksanaan di sisi klien memberikan ketelusan yang lebih baik, maklum balas nyahpepijat yang lebih pantas, dan kawalan yang lebih halus.

Kerana ia melaksanakan API yang sama, primitif sisi klien ini sebahagian besarnya boleh menggantikan terus primitif sisi pelayan warisan, dengan satu-satunya perubahan ialah pernyataan import. Lihat Migrasi daripada Sampler dan Estimator sisi pelayan ke sisi klien untuk maklumat lanjut.

Versi pakej

Kod di halaman ini dibangunkan menggunakan keperluan berikut. Kami syorkan menggunakan versi ini atau yang lebih baru.

qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.47.0

Langkah-langkah untuk menggunakan primitif Estimator​

1. Mulakan akaun​

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 jika anda belum mempunyai akaun.

Gate pecahan

Untuk menggunakan gate pecahan yang baru disokong, tetapkan use_fractional_gates=True apabila meminta Backend dari instans QiskitRuntimeService. Contohnya:

service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)

Ini adalah ciri eksperimen dan mungkin berubah pada masa depan.

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"qiskit": "qiskit", "qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
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 IBM Quantum Estimator​

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, sesi, dan kerja masing-masing. Untuk maklumat lanjut, lihat Pengenalan kepada mod pelaksanaan IBM Quantum Compute Service. Perhatikan bahawa pengguna Open Plan tidak boleh menghantar kerja sesi.

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import 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: dab7lfurrl7c7386gjn0
>>> 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: 28.60306448415693
> Metadata: {'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}

Langkah seterusnya​

Cadangan