Przejdź do głównej treści

Wprowadzenie do opcji

Możesz używać opcji do dostosowywania prymitywów IBM Quantum do swoich potrzeb.

Struktura​

Podczas wywoływania prymitywów możesz przekazywać opcje za pomocą klasy opcji lub słownika. Często używane opcje, takie jak resilience_level, znajdują się na pierwszym poziomie. Inne opcje są pogrupowane w kategorie, takie jak execution. Określ opcje w tym formacie: options.option.sub-option.sub-sub-option = choice. Na przykład: options.dynamical_decoupling.enable = True.

Wartości domyślne​

Jeśli nie podasz wartości dla danej opcji, otrzyma ona specjalną wartość Unset i zostaną użyte domyślne wartości serwera. Oznacza to, że wartość domyślna będzie taka sama niezależnie od wersji kodu.

Tabele w sekcji „Podsumowanie klas opcji" na stronie przewodnika po opcjach każdego prymitywu zawierają listę wartości domyślnych.

Ustawianie opcji​

Opcje można zdefiniować przed skonstruowaniem prymitywu i przekazać do niego jako instancję klasy opcji lub słownik. Prymityw tworzy ich kopię, co oznacza, że zmiana oryginalnego słownika lub instancji opcji nie wpływa na opcje będące własnością prymitywu.

Ponadto możesz zmieniać opcje po skonstruowaniu prymitywu. Wybierz sposób pracy, który najlepiej odpowiada Twojej aplikacji.

Uwagi dotyczące podawania opcji prymitywów
  • Dostępne opcje możesz sprawdzić podczas inicjalizacji prymitywu lub po niej.
  • Jeśli nie podasz wartości dla danej opcji, otrzyma ona specjalną wartość Unset i zostaną użyte domyślne wartości serwera.
  • Atrybut options jest typu dataclass w Pythonie. Możesz użyć wbudowanej metody asdict, aby przekonwertować go na słownik.

Klasa options​

Podczas tworzenia instancji klasy prymitywu możesz przekazać instancję klasy options. Te opcje są następnie stosowane, gdy używasz run() do wykonania obliczeń. Określ opcje w tym formacie: options.option.sub-option.sub-sub-option = choice. Na przykład: options.dynamical_decoupling.enable = True.

Pełne szczegóły na temat klasy znajdziesz w SamplerOptions lub EstimatorOptions.

Poniższy przykład używa prymitywu Estimator, ale składnia dla innych prymitywów jest podobna.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime.options 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)

Słownik​

Możesz podać opcje jako słownik podczas inicjalizacji prymitywu.

Poniższy przykład używa prymitywu Estimator, ale składnia dla innych prymitywów jest podobna.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as 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]},
},
},
)

Aktualizowanie opcji po inicjalizacji​

Możesz określić opcje w tym formacie: _primitive_.options.option.sub-option.sub-sub-option = choice, aby skorzystać z autouzupełniania, lub użyć metody update(), aby wprowadzić zmiany zbiorczo.

Klasa opcji prymitywu (EstimatorOptions lub SamplerOptions) nie musi być instancjonowana, jeśli ustawiasz opcje po zainicjalizowaniu prymitywu.

Poniższy przykład używa prymitywu Estimator, ale składnia dla innych prymitywów jest podobna.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as 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}
)

Kolejne kroki​

Zalecenia