Langkau ke kandungan utama

Mula menggunakan primitif

Model pelaksanaan baharu, kini dalam keluaran beta

Keluaran beta bagi model pelaksanaan baharu kini tersedia. Model pelaksanaan terarah memberikan lebih fleksibiliti apabila menyesuaikan aliran kerja mitigasi ralat anda. Lihat panduan Model pelaksanaan terarah untuk maklumat lanjut.

nota

Walaupun dokumentasi ini menggunakan primitif dari Qiskit Runtime, yang membolehkan anda menggunakan Backend IBM®, primitif boleh dijalankan pada mana-mana penyedia dengan menggunakan primitif Backend sebagai gantinya. Selain itu, anda boleh menggunakan primitif rujukan untuk dijalankan pada simulator statevector tempatan. Lihat Simulasi tepat dengan primitif Qiskit untuk butiran.

# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime

Langkah-langkah dalam topik ini menerangkan cara menyediakan primitif, meneroka pilihan yang boleh anda gunakan untuk mengkonfigurasinya, dan memanggilnya dalam program.

Menggunakan Gate Pecahan

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

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

Perhatikan bahawa ini adalah ciri eksperimental dan mungkin berubah pada masa hadapan.

Versi pakej

Kod pada halaman ini dibangunkan menggunakan keperluan berikut. Kami mengesyorkan penggunaan versi ini atau lebih baharu.

qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1

Mula menggunakan Estimator​

1. Mulakan akaun​

Kerana Qiskit Runtime Estimator adalah perkhidmatan yang diurus, anda perlu memulakan akaun anda terlebih dahulu. Anda kemudian boleh memilih QPU yang ingin anda gunakan untuk mengira nilai jangkaan.

Ikuti langkah-langkah dalam topik Pasang dan sediakan jika anda belum mempunyai akaun.

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)

print(backend.name)
ibm_torino

2. Cipta Circuit dan boleh jadi​

Anda memerlukan sekurang-kurangnya satu Circuit dan satu boleh jadi 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]

print(f">>> Observable: {observable.paulis}")
>>> Observable: ['IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...', ...]

Circuit dan boleh jadi perlu ditransformasi untuk hanya menggunakan arahan yang disokong oleh QPU (dirujuk sebagai Circuit seni bina set arahan (ISA)). Kami akan menggunakan 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', 3826), ('sx', 1601), ('cz', 968)])

3. Mulakan Qiskit Runtime Estimator​

Apabila anda memulakan Estimator, gunakan parameter mode untuk menentukan mod yang anda inginkan untuk dijalankan. Nilai yang boleh dipilih adalah objek batch, session, atau backend untuk mod pelaksanaan kelompok, Session, dan kerja, masing-masing. Untuk maklumat lanjut, lihat Pengenalan kepada mod pelaksanaan Qiskit Runtime.

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 untuk Circuit dan boleh jadi input. Circuit, boleh jadi, dan set nilai parameter pilihan dimasukkan sebagai tupel primitive unified bloc (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: d5k96c4jt3vs73ds5smg
>>> 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: 25.8930784649363
> Metadata: {'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}

Mula menggunakan Sampler​

1. Mulakan akaun​

Kerana Qiskit Runtime Sampler adalah perkhidmatan yang diurus, anda perlu memulakan akaun anda terlebih dahulu. Anda kemudian boleh memilih QPU yang ingin anda gunakan untuk mengira nilai jangkaan.

Ikuti langkah-langkah dalam topik Pasang dan sediakan jika anda belum menyediakan akaun.

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)

2. Cipta Circuit​

Anda memerlukan sekurang-kurangnya satu Circuit sebagai input kepada primitif Sampler.

import numpy as np
from qiskit.circuit.library import efficient_su2

circuit = efficient_su2(127, entanglement="linear")
circuit.measure_all()
# The circuit is parametrized, so we will define the parameter values for execution
param_values = np.random.rand(circuit.num_parameters)

Gunakan Transpiler untuk mendapatkan Circuit ISA.

from qiskit.transpiler import generate_preset_pass_manager

pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
print(f">>> Circuit ops (ISA): {isa_circuit.count_ops()}")
>>> Circuit ops (ISA): OrderedDict([('sx', 3089), ('rz', 3036), ('cz', 1092), ('measure', 127), ('barrier', 1)])

3. Mulakan Qiskit Runtime Sampler​

Apabila anda memulakan Sampler, gunakan parameter mode untuk menentukan mod yang anda inginkan untuk dijalankan. Nilai yang boleh dipilih adalah objek batch, session, atau backend untuk mod pelaksanaan kelompok, 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 SamplerV2 as Sampler

sampler = Sampler(mode=backend)

4. Panggil Sampler dan dapatkan keputusan​

Seterusnya, panggil kaedah run() untuk menjana output. Circuit dan set nilai parameter pilihan dimasukkan sebagai tupel primitive unified bloc (PUB).

job = sampler.run([(isa_circuit, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")
>>> Job ID: d5k96rsjt3vs73ds5tig
>>> Job Status: QUEUED
result = job.result()

# Get results for the first (and only) PUB
pub_result = result[0]
print(
f"First ten results for the 'meas' output register: {pub_result.data.meas.get_bitstrings()[:10]}"
)
First ten results for the 'meas' output register: ['0101001101010000011001110001011000010010001100001000100110011111011110000010110001101000110011101010000100011011000110101111000', '0100111000000100110001100100000101111000111001101000110111101110110010010100001101001111001010011101010000010011000110000010001', '0101111101111111010011010101000000110100000010000010011101100011100011001100000100100001000101000000100001010101010011001101100', '1100110101111111001110010000010100101010101010001000001100100110011111010000000010001000110111010000010101100000100000110111001', '0010000001111001111010100100010111101000101000100000101100001000011100000100011010110110100011100110001001110110111101010011000', '0101110000001000100100010010100100111000010100000000010010000000010110010010000110000001110110010100000111001110100100111101100', '0100011111101001000111110011011101101101110101110001010111011101111110011101001000000001110000011110000101010000001010000100000', '0001010101011000110100000100111111100001011000111110000011000111001101010000010001001100000110000000100000110101010010101110010', '0100011010001110011110000110100101100100101001001111010100100101010100010000000010100000101010110010000000001000010101011111110', '0000011000000111000001000101111111110110101100110000001100010010011101011100001010000100011010001010001101000000000000010001001']

Mula menggunakan primitif Backend​

Tidak seperti primitif khusus penyedia, primitif Backend adalah pelaksanaan generik yang boleh digunakan dengan objek backend sembarang, selagi ia melaksanakan antara muka Backend.

Sesetengah penyedia melaksanakan primitif secara asli. Lihat halaman Ekosistem Qiskit untuk butiran.

Contoh: BackendEstimator​

from qiskit.primitives import BackendEstimatorV2
from <some_qiskit_provider> import QiskitProvider

provider = QiskitProvider()
backend = provider.get_backend('backend_name')
estimator = BackendEstimatorV2(backend)

Contoh: BackendSampler​

from qiskit.primitives import BackendSamplerV2
from <some_qiskit_provider> import QiskitProvider

provider = QiskitProvider()
backend = provider.get_backend('backend_name')
sampler = BackendSamplerV2(backend)

Persamaan dan perbezaan antara primitif Backend dan Runtime​

Langkah seterusnya​

Cadangan
Source: IBM Quantum docs — updated 27 Apr 2026
English version on doQumentation — updated 7 Mei 2026
This translation based on the English version of 11 Mac 2026