Vai al contenuto principale
Questo progetto è in fase beta. Hai trovato un bug? Apri una issue su GitHub. Hai una domanda o un'idea? Chiedi su GitHub Discussions — apprezziamo il tuo feedback!
Com'è la qualità della traduzione su questa pagina?

Introduzione alle opzioni

Puoi usare le opzioni per personalizzare le primitive di IBM Quantum in base alle tue esigenze.

Struttura​

Quando chiami le primitive, puoi passare le opzioni usando una classe di opzioni o un dizionario. Le opzioni usate più comunemente, come resilience_level, sono al primo livello. Altre opzioni sono raggruppate in categorie, come execution. Specifica le opzioni in questo formato: options.option.sub-option.sub-sub-option = choice. Ad esempio: options.dynamical_decoupling.enable = True.

Valori predefiniti​

Se non specifichi un valore per un'opzione, le viene assegnato il valore speciale Unset e vengono utilizzati i valori predefiniti del server. Pertanto, il valore predefinito sarà lo stesso indipendentemente dalla versione del codice.

Le tabelle nella sezione "Riepilogo delle classi di opzioni" nella guida delle "opzioni" di ogni primitiva elencano i valori predefiniti.

Impostare le opzioni​

Le opzioni possono essere definite prima che una primitiva venga costruita e passate alla primitiva come istanza della classe di opzioni o come dizionario. La primitiva ne crea una copia, il che significa che modificare il dizionario o l'istanza di opzioni originale non influisce sulle opzioni della primitiva.

Inoltre, puoi modificare le opzioni dopo che la primitiva è stata costruita. Usa il flusso di lavoro più adatto alla tua applicazione.

Note sulla specifica delle opzioni delle primitive
  • Puoi vedere le opzioni disponibili durante o dopo l'inizializzazione della primitiva.
  • Se non specifichi un valore per un'opzione, le viene assegnato il valore speciale Unset e vengono utilizzati i valori predefiniti del server.
  • L'attributo options è il tipo Python dataclass. Puoi usare il metodo integrato asdict per convertirlo in un dizionario.

Classe options​

Quando crei un'istanza della classe primitiva, puoi passare un'istanza della classe options. Queste opzioni vengono poi applicate quando usi run() per eseguire il calcolo. Specifica le opzioni in questo formato: options.option.sub-option.sub-sub-option = choice. Ad esempio: options.dynamical_decoupling.enable = True.

Consulta SamplerOptions o EstimatorOptions per tutti i dettagli sulla classe.

Il seguente esempio usa la primitiva Estimator, ma la sintassi per le altre primitive è simile.

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​

Puoi specificare le opzioni come dizionario quando inizializzi una primitiva.

Il seguente esempio usa la primitiva Estimator, ma la sintassi per le altre primitive è simile.

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]},
},
},
)

Aggiornare le opzioni dopo l'inizializzazione​

Puoi specificare le opzioni in questo formato: _primitive_.options.option.sub-option.sub-sub-option = choice per sfruttare il completamento automatico, oppure usare il metodo update() per eseguire aggiornamenti in blocco.

Non è necessario istanziare la classe di opzioni della primitiva (EstimatorOptions o SamplerOptions) se imposti le opzioni dopo aver inizializzato la primitiva.

Il seguente esempio usa la primitiva Estimator, ma la sintassi per le altre primitive è simile.

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}
)

Passi successivi​

Raccomandazioni