Guida rapida a Estimator
La primitiva Estimator calcola i valori attesi di una o più grandezze osservabili rispetto agli stati preparati dai circuiti quantistici. I circuiti possono essere parametrizzati, a condizione che i valori dei parametri vengano forniti anche come input alla primitiva.
Questa primitiva dispone di diverse tecniche integrate di mitigazione e soppressione degli errori, tra cui il disaccoppiamento dinamico, il Pauli-twirling, il gate-folding ZNE, il PEA e il PEC. Supporta inoltre un’opzione resilience_level che consente di configurare facilmente il compromesso tra costo e precisione.
I passaggi descritti in questa sezione spiegano come configurare Estimator, come esplorare le opzioni disponibili per la sua configurazione e come richiamarlo all'interno di un programma.
In qiskit-ibm-runtime v0.50.0 sono state introdotte nuove implementazioni delle interfacce Qiskit SamplerV2 e EstimatorV2. Queste primitive lato client eseguono la maggior parte delle operazioni di pre-elaborazione e post-elaborazione sul lato client e delegano l'esecuzione alla primitiva Executor. L'esecuzione sul lato client garantisce maggiore trasparenza, un feedback più rapido durante il debug e un controllo più preciso.
Poiché implementano la stessa API, queste primitive lato client sostituiscono in gran parte le primitive legacy lato server senza alcuna modifica, con l'unica differenza rappresentata dall'istruzione di importazione. Per ulteriori informazioni, consultare la sezione " Migrazione da Sampler e Estimator lato server a quelli lato client ".
Il codice presente in questa pagina è stato sviluppato sulla base dei seguenti requisiti. Si consiglia di utilizzare queste versioni o quelle più recenti.
qiskit[all]~=2.5.2 qiskit-ibm-runtime~=0.47.0
Procedura per l'utilizzo della primitiva Estimator
1. Inizializza l'account
Per prima cosa devi configurare il tuo account. È quindi possibile selezionare la QPU che si desidera utilizzare per calcolare il valore atteso.
Se non disponi già di un account, segui i passaggi indicati nella guida "Configurazione dell'account IBM Cloud ".
Per utilizzare i gate frazionari ora supportati, impostare use_fractional_gates=True quando si richiede un backend da QiskitRuntimeService un'istanza. Ad esempio:
service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)Si tratta di una funzionalità sperimentale che potrebbe subire modifiche in futuro.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)
print(backend.name)Output:
ibm_fez
2. Creare un circuito e un osservabile
Per la primitiva Estimator sono necessari almeno un circuito e un osservabile come input.
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]Il circuito e l'osservabile devono essere trasformati in modo da utilizzare esclusivamente istruzioni supportate dalla QPU (circuiti denominati "architecture del set di istruzioni" o ISA ). Per farlo, usa il 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()}")Output:
>>> Circuit ops (ISA): OrderedDict([('rz', 4472), ('sx', 1884), ('cz', 1120)])
3. Inizializzare lo stimatore " IBM Quantum "
Quando si avvia Estimator, utilizzare il parametro mode per specificare la modalità in cui si desidera che venga eseguito. I valori possibili sono batch, session, oppure backend oggetti, rispettivamente per le modalità di esecuzione in batch, in sessione e per job. Per ulteriori informazioni, consultare la sezione " Introduzione alle modalità di esecuzione del servizio IBM Quantum Compute ". Si noti che gli utenti Open Plan non possono inviare lavori di sessione.
# 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. Avviare Estimator e ottenere i risultati
Successivamente, richiamare il run() metodo per calcolare i valori attesi per i circuiti di ingresso e le grandezze osservabili. I set di parametri relativi al circuito, osservabili e opzionali vengono immessi sotto forma di tuple di blocchi unificati primitivi ( PUB ).
job = estimator.run([(isa_circuit, isa_observable, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")Output:
>>> 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}")Output:
>>> 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}
Passi successivi
- Scopri come eseguire test in locale prima di passare ai computer quantistici.
- Esamina gli esempi dettagliati.
- Esercitati con le primitive seguendo la lezione sulla funzione «Cost» disponibile su IBM Quantum Learning.
- Scopri come eseguire la transpilazione in locale nella sezione " Transpilazione ".
- Consulta la guida sulle impostazioni del transpiler.
- Scopri come utilizzare le opzioni di base.
- Visualizza le opzioni dell'API per Estimator.