Skip to main content
IBM Quantum Platform

Specificare le opzioni di Estimator

  • 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
    

È possibile utilizzare le opzioni per personalizzare la primitiva Estimator. Sebbene l'interfaccia del metodo run() delle primitive sia comune a tutte le implementazioni, le relative opzioni non lo sono. Per informazioni sulle opzioni qiskit.primitives.BaseEstimatorV2 qiskit_aer.BaseEstimatorV2 e, consultare la documentazione dell'API.

Note:

Note sulla specificazione delle opzioni nelle primitive di Estimator
  • È possibile visualizzare le opzioni disponibili e aggiornare i valori delle opzioni durante o dopo l'inizializzazione di Estimator.
  • Utilizza il update() metodo per applicare le modifiche all'attributo options .
  • Se non si specifica un valore per un'opzione, le viene assegnato il valore speciale e vengono utilizzati i valori predefiniti del Unset server.
  • options L'attributo è di dataclass tipo Python. È possibile utilizzare il metodo integrato asdict per convertirlo in un dizionario.

Imposta le opzioni di Estimator

È possibile impostare le opzioni al momento dell'inizializzazione di Estimator, dopo l'inizializzazione di Estimator oppure (solo in precision questo caso) nel run() metodo.

Inizializzazione primitiva

Durante l'inizializzazione di Estimator è possibile passare un'istanza della classe delle opzioni o un dizionario; Estimator provvederà quindi a crearne una copia. Pertanto, la modifica del dizionario originale o dell'istanza delle opzioni non influisce sulle opzioni associate alla primitiva.

Corso sulle opzioni

Quando si crea un'istanza della classe Estimator , è possibile passare come parametro un'istanza della classe delle opzioni. Tali opzioni verranno quindi applicate quando utilizzerai per run() eseguire il calcolo. Specificare le opzioni in questo formato:. options.option.sub-option.sub-sub-option = choice Ad esempio: options.dynamical_decoupling.enable = True

Esempio:

from qiskit_ibm_runtime import QiskitRuntimeService

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

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator
from qiskit_ibm_runtime.options_models import EstimatorOptions

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

options = EstimatorOptions(
    resilience_level=2,
    resilience={"zne_mitigation": True, "zne": {"noise_factors": [1, 3, 5]}},
)

# or...
options = EstimatorOptions()
options.resilience_level = 2
options.resilience.zne_mitigation = True
options.resilience.zne.noise_factors = [1, 3, 5]

estimator = Estimator(mode=backend, options=options)

Dizionario

È possibile specificare le opzioni sotto forma di dizionario al momento dell'inizializzazione di Estimator.

from qiskit_ibm_runtime import QiskitRuntimeService

# 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

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

# Setting options during initialization
estimator = Estimator(
    backend,
    options={
        "resilience_level": 2,
        "resilience": {
            "zne_mitigation": True,
            "zne": {"noise_factors": [1, 3, 5]},
        },
    },
)

Opzioni di aggiornamento dopo l'inizializzazione

È possibile specificare le opzioni in questo formato: estimator.options.option.sub-option.sub-sub-option = choice per usufruire del completamento automatico, oppure utilizzare il update() metodo per effettuare aggiornamenti in blocco.

Non è necessario istanziare la classe delle opzioni Estimator (EstimatorOptions) se si impostano le opzioni dopo aver inizializzato il tipo primitivo.

from qiskit_ibm_runtime import QiskitRuntimeService

# 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

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

estimator = Estimator(mode=backend)

# Setting options after initialization
# This uses auto-complete.
estimator.options.default_precision = 0.01
# This does bulk update.
estimator.options.update(
    default_precision=0.02, resilience={"zne_mitigation": True}
)

Metodo Run()

Gli unici valori che è possibile passare run() sono quelli definiti nell'interfaccia. Cioè, precision per Estimator. Questo sovrascrive qualsiasi valore impostato per default_precision nell'esecuzione corrente.

from qiskit_ibm_runtime import QiskitRuntimeService

# 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
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp

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

circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()

observable = SparsePauliOp("Z" * 3)

pass_manager = generate_preset_pass_manager(
    optimization_level=3, backend=backend
)

transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
isa_observable1 = observable.apply_layout(transpiled1.layout)
isa_observable2 = observable.apply_layout(transpiled2.layout)

estimator = Estimator(mode=backend)
# Default precision to use if not specified in run()
estimator.options.default_precision = 0.01
# Run two circuits, requiring a precision of .02 for both.
estimator.run(
    [(transpiled1, isa_observable1), (transpiled2, isa_observable2)],
    precision=0.02,
)

Output:

<RuntimeJobV2('dab7lhjvpcac73ddekcg', 'estimator')>

Caso particolare: precisione

Il metodo Estimator.run accetta due argomenti: un elenco di PUB, ciascuno dei quali può specificare un valore di precisione specifico per il " PUB ", e un argomento chiave denominato "precision". Questi valori di precisione fanno parte dell'interfaccia di esecuzione dell'Estimator e sono indipendenti dalle opzioni dell'Estimator in fase di esecuzione. Hanno la precedenza su qualsiasi valore specificato come opzione, al fine di rispettare l'astrazione dell'Estimator.

Tuttavia, se non precision è specificato né tramite l'opzione PUB né nell'argomento della parola chiave run (o se entrambi sono impostati su None), viene utilizzato il valore di precisione specificato nelle opzioni, in particolare default_precision.

Note

Questi parametri di precisione servono esclusivamente a specificare la precisione desiderata; non è garantito che i risultati raggiungano effettivamente la precisione specificata.

Si noti che le opzioni di Estimator includono sia default_shots che default_precision. Tuttavia, poiché la funzione "gate-twirling" è abilitata per impostazione predefinita, il prodotto di num_randomizations e shots_per_randomization ha la precedenza su queste due opzioni.

In particolare, per qualsiasi file di configurazione dell'Estimator ( PUB ):

  1. Se il parametro PUB specifica la precisione, utilizzare quel valore.
  2. Se nell'argomento è specificato il valore run di precisione, utilizzare quel valore.
  3. Se twirling è abilitato (impostazione predefinita: True), viene utilizzato il prodotto di num_randomizations e shots_per_randomization, come specificato nelle opzioni twirling .
  4. Se estimator.options.default_shots viene specificato, utilizzare quel valore per regolare la quantità di dati.
  5. Se estimator.options.default_precision viene specificato, utilizzare quel valore.

Ad esempio, se la precisione è specificata in tutte e quattro le posizioni, viene utilizzata quella con la precedenza più alta (la precisione specificata nell' PUB ).

Note

Sebbene la precisione specificata nell' PUB e e in run abbia una precedenza maggiore, l'operazione fallisce se twirling è abilitato e il prodotto di e num_randomizations shots_per_randomization è inferiore al numero di shot necessari per raggiungere la precisione. In questo scenario, non Estimator è in grado di distribuire i tiri tra i specificati num_randomizations.

Note

La precisione è inversamente proporzionale all'uso. In altre parole, minore è la precisione, maggiore è il tempo di elaborazione richiesto dalla QPU.

from qiskit_ibm_runtime import QiskitRuntimeService

# 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
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp

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

observable = SparsePauliOp("Z" * 3)

circuit = random_iqp(3)
circuit.measure_all()

pass_manager = generate_preset_pass_manager(
    optimization_level=3, backend=backend
)

isa_circuit = pass_manager.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)

# Setting precision during primitive initialization
estimator = Estimator(mode=backend, options={"default_precision": 0.05})

# Run with precision=0.02, overwriting the default.
estimator.run(
    [(isa_circuit, isa_observable1)],
    precision=0.02,
)

Output:

<RuntimeJobV2('dab7ljjvpcac73ddekgg', 'estimator')>

Disattiva tutte le funzioni di mitigazione e soppressione degli errori

È possibile disattivare tutte le funzioni di mitigazione e soppressione degli errori se, ad esempio, si sta conducendo una ricerca sulle proprie tecniche di mitigazione. Per farlo, imposta resilience_level = 0.

Esempio:

from qiskit_ibm_runtime import QiskitRuntimeService

# 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

# Define the service.  This allows you to access an IBM QPU.
service = QiskitRuntimeService()

# Get a backend
backend = service.least_busy(operational=True, simulator=False)

# Define Estimator
estimator = Estimator(backend)

options = estimator.options

# Turn off all error mitigation and suppression
options.resilience_level = 0

Opzioni disponibili

Le seguenti informazioni illustrano le opzioni disponibili nell'ultima versione di qiskit-ibm-runtime. Per visualizzare le versioni precedenti delle opzioni, visita il sito e qiskit-ibm-runtime Riferimento API seleziona una versione precedente.

  • Il numero totale di impulsi da utilizzare per circuito per configurazione.

    Opzioni : numero intero >= 0

    Impostazione predefinita : Nessuna

    default_shots Documentazione API

  • La precisione predefinita da utilizzare per qualsiasi chiamata a PUBrun() che non ne specifichi una.

    Opzioni : Float > 0

    Impostazione predefinita : 0.015625 (1 / √4096)

    default_precision Documentazione API

  • Gestire le impostazioni di mitigazione degli errori di disaccoppiamento dinamico.

    dynamical_decoupling Documentazione API

    • Opzioni : True, False

      Impostazione predefinita : False

    • Opzioni : middle, edges

      Impostazione predefinita : middle

    • Opzioni: asap, alap Impostazione predefinita: alap

    • Opzioni: XX, XpXm, XY4 Impostazione predefinita: XX

    • Opzioni: True, False Impostazione predefinita: False

  • environment Documentazione API

    • Elenco dei tag.

      Opzioni : Nessuna

      Impostazione predefinita : Nessuna

    • Opzioni : DEBUG, INFO, AVVISO, ERRORE, CRITICO

      Impostazione predefinita : AVVISO

    • Opzioni : True, False

      Impostazione predefinita : False

  • execution Documentazione API

    • Se riportare i qubit allo stato fondamentale ad ogni esecuzione.

      Opzioni : True, False

      Impostazione predefinita : True

    • Il ritardo tra una misurazione e il successivo circuito quantistico.

      Opzioni : Valore compreso nell'intervallo specificato da backend.rep_delay_range

      Impostazione predefinita : specificata da backend.default_rep_delay

  • Limita la durata di esecuzione di un processo, in secondi. Per ulteriori dettagli, consulta la guida sul tempo massimo di esecuzione.

    Opzioni : numero intero di secondi compreso tra [1 e 10800]

    Impostazione predefinita : 10800 (3 ore)

  • Opzioni avanzate di resilienza per ottimizzare la strategia di resilienza.

    resilience Documentazione API

    • Opzioni : Sequence[LayerNoiseModel]

      Impostazione predefinita : Nessuna

    • Opzioni : True, False

      Impostazione predefinita : True

    • Opzioni per l'apprendimento del rumore di misurazione.

      resilience.measure_noise_learning Documentazione API

    • Opzioni : numero intero >= 1

      Impostazione predefinita : 32

    • Opzioni : True, False

      Impostazione predefinita : False

    • Opzioni di mitigazione della cancellazione probabilistica degli errori.

      resilience.pec Documentazione API

    • Opzioni : None, numero intero ≥ 1

      Impostazione predefinita : 100

    • Opzioni : auto, numero decimale compreso tra [0 e 1]

      Impostazione predefinita : auto

    • Opzioni : True, False

      Impostazione predefinita : False

    • Opzioni : gate_folding, gate_folding_front, gate_folding_back, pea

      Impostazione predefinita : gate_folding

    • Opzioni : Elenco dei galleggianti

      Impostazione predefinita : [0, *noise_factors]

    • Opzioni : Una o più delle seguenti: exponential, linear, double_exponential, polynomial_degree_(1 <= k <= 7), fallback

      Impostazione predefinita : (exponential, linear)

    • Opzioni : elenco di galleggianti; ogni galleggiante deve essere ≥ 1

      Impostazione predefinita : (1, 1.5, 2) per PEA, e (1, 3, 5) altrimenti

  • Quanto livello di resilienza occorre garantire in caso di errori? Livelli più elevati producono risultati più accurati, ma comportano tempi di elaborazione più lunghi. Per ulteriori informazioni, consulta la sezione sui livelli di resilienza nell'argomento "Gestione del rumore".

    Opzioni : 0, 1, 2

    Impostazione predefinita : 1

    resilience_level Documentazione API

  • Opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzi

    simulator Documentazione API

    • Opzioni : Elenco dei nomi dei gate di base su cui eseguire l'unrolling

      Impostazione predefinita : l'insieme di tutte le porte di base supportate dal simulatore Qiskit Aer

    • Opzioni : Elenco delle interazioni dirette tra due qubit

      Impostazione predefinita : Nessuna, il che implica l'assenza di vincoli di connettività (connettività completa).

    • Opzioni : Qiskit Aer NoiseModel o la sua rappresentazione

      Impostazione predefinita : Nessuna

    • Valori consentiti : numero intero

      Impostazione predefinita : Nessuna

  • Opzioni di rotazione

    twirling Documentazione API

    • Opzioni : Vero, Falso

      Impostazione predefinita : False

    • Opzioni : Vero, Falso

      Impostazione predefinita : True

    • Opzioni : auto, numero intero ≥ 1

      Impostazione predefinita : auto

    • Opzioni : auto, numero intero ≥ 1

      Impostazione predefinita : auto

    • Opzioni : active, active-circuit, active-accum, all

      Impostazione predefinita : active-accum

  • Opzioni sperimentali, se disponibili.


Compatibilità delle funzioni

Alcune funzionalità di runtime non possono essere utilizzate contemporaneamente in un unico processo. Fai clic sulla scheda corrispondente per visualizzare un elenco delle funzionalità incompatibili con quella selezionata:

  • Incompatibile con:

    • Giro della porta
    • PEA
    • Pec
  • Potrebbe non funzionare se si utilizzano gate personalizzati. Incompatibile con:

    • PEA
    • Pec
  • Incompatibile con:

    • Portali frazionati
    • Allungamenti

    Altre note:

    • La rotazione delle misure può essere applicata solo alle misure terminali.
    • Non funziona con intrecciatori non Clifford.
  • Incompatibile con:

    • Portali frazionati
    • ZNE con copertina a libro
    • Pec
  • Incompatibile con:

    • Portali frazionati
    • ZNE con copertina a libro
    • PEA

Passi successivi

Suggerimenti
Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.