Rychlý start s Estimatorem
Primitivum Estimator vypočítává střední hodnoty pro jednu nebo více pozorovatelných vzhledem ke stavům připraveným kvantovými obvody. Obvody mohou být parametrizované, pokud jsou také poskytnuty hodnoty parametrů jako vstup primitiva.
Toto primitivum má několik vestavěných technik zmírnění a potlačení chyb, včetně dynamického odpojování, Pauliho twirling, gate-folding ZNE, PEA a PEC. Také podporuje možnost resilience_level, která ti umožňuje snadno konfigurovat kompromis mezi náklady a přesností.
Kroky v tomto tématu popisují, jak nastavit Estimator, prozkoumat možnosti pro jeho konfiguraci a spustit ho v programu.
Verze balíčků
Kód na této stránce byl vyvinut s použitím následujících požadavků. Doporučujeme používat tyto verze nebo novější.
qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.47.0
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
Kroky k použití primitiva Estimator
1. Inicializace účtu
Nejprve musíš inicializovat svůj účet. Poté můžeš vybrat QPU, které chceš použít pro výpočet střední hodnoty.
Pokud ještě nemáš nastavený účet, postupuj podle kroků v části Nastavení účtu IBM Cloud.
Chceš-li používat nově podporovaná zlomková hradla, nastav use_fractional_gates=True při žádosti o backend z instance QiskitRuntimeService. Například:
service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)
Toto je experimentální funkce a může se v budoucnu změnit.
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. Vytvoření obvodu a pozorovatelné
Pro primitivum Estimator potřebuješ alespoň jeden obvod a jednu pozorovatelnou jako vstupy.
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]
Obvod a pozorovatelná musí být transformovány tak, aby používaly pouze instrukce podporované QPU (označované jako obvody instrukční sady architektury (ISA)). K tomu použij transpiler.
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. Inicializace IBM Quantum Estimatoru
Při inicializaci Estimatoru použij parametr mode k určení režimu, ve kterém chceš spustit. Možné hodnoty jsou objekty batch, session nebo backend pro dávkový, session a job prováděcí režim. Více informací najdeš v části Úvod do IBM Quantum Compute Service prováděcích režimů. Vezmi v úvahu, že uživatelé plánu Open Plan nemohou odesílat session úlohy.
from qiskit_ibm_runtime import EstimatorV2 as Estimator
estimator = Estimator(mode=backend)
4. Spuštění Estimatoru a získání výsledků
Dále spusť metodu run() pro výpočet středních hodnot pro vstupní obvody a pozorovatelné. Obvod, pozorovatelná a volitelné sady hodnot parametrů jsou jako vstup zadány ve formě n-tic 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: 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}
Další kroky
- Zjisti, jak testovat lokálně před spuštěním na kvantových počítačích.
- Projdi si podrobné příklady.
- Procvič práci s primitivy v lekci cost function v IBM Quantum Learning.
- Zjisti, jak transpilovat lokálně v sekci Transpilace.
- Vyzkoušej průvodce Porovnat nastavení transpileru.
- Zjisti, jak používat možnosti primitiv.
- Zobrazit API pro možnosti Estimatoru.