Přeskočit na hlavní obsah

Rychlý start s Estimatorem

Primitivum Estimator vypočítává střední hodnoty pro jeden nebo více pozorovatelů 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.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*/}

## Kroky k použití primitiva Estimator \{#steps-to-use-the-estimator-primitive}

### 1. Inicializace účtu \{#1-initialize-the-account}

Protože Qiskit Runtime je spravovaná služba, musíš nejprve 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](cloud-setup).

:::note[Zlomková hradla]

Chceš-li používat nově podporovaná [zlomková hradla](/guides/fractional-gates), nastav `use_fractional_gates=True` při žádosti o backend z instance `QiskitRuntimeService`. Například:
```python
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 pozorovatele

Pro primitivum Estimator potřebuješ alespoň jeden obvod a jeden pozorovatel 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 pozorovatel 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 Qiskit Runtime 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 prováděcích režimů Qiskit Runtime. Upozorňujeme, ž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 pozorovatele. Obvod, pozorovatel 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: 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}

Další kroky

Doporučení