Початок роботи з примітивами
Бета-версія нової моделі виконання вже доступна. Направлена модель виконання забезпечує більшу гнучкість при налаштуванні робочого процесу пом'якшення помилок. Дивись посібник Directed execution model для отримання додаткової інформації.
Хоча ця документація використовує примітиви з Qiskit Runtime, які дозволяють використовувати бекенди IBM®, примітиви можна запускати з будь-яким провайдером за допомогою бекенд-примітивів. Крім того, ти можеш використовувати reference-примітиви для запуску на локальному симуляторі стейт-вектора. Дивись Точна симуляція з примітивами Qiskit для деталей.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime
Кроки в цьому розділі описують, як налаштувати примітиви, дослідити параметри їх конфігурації та викликати їх у програмі.
Щоб скористатися новими підтримуваними дробовими гейтами, встанови use_fractional_gates=True при запиті бекенду з екземпляра QiskitRuntimeService. Наприклад:
service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)
Зауважте, що це експериментальна функція, яка може змінитися в майбутньому.
Версії пакетів
Код на цій сторінці розроблено з використанням наведених нижче вимог. Рекомендуємо використовувати ці або новіші версії.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Початок роботи з Estimator
1. Ініціалізація акаунту
Оскільки Qiskit Runtime Estimator — це керований сервіс, спочатку потрібно ініціалізувати свій акаунт. Після цього можна вибрати QPU, яку ти хочеш використовувати для обчислення очікуваного значення.
Виконай кроки з теми встановлення та налаштування, якщо акаунт ще не налаштовано.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)
print(backend.name)
ibm_torino
2. Створення Circuit та спостережуваної величини
Тобі потрібен щонайменше один Circuit і одна спостережувана величина як вхідні дані для примітиву Estimator.
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]
print(f">>> Observable: {observable.paulis}")
>>> Observable: ['IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...',
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII...', ...]
Circuit і спостережувана величина мають бути перетворені так, щоб використовувати лише інструкції, підтримувані QPU (відомі як схеми instruction set architecture (ISA)). Для цього скористаємося 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', 3826), ('sx', 1601), ('cz', 968)])