Qiskit — это SDK с открытым исходным кодом для работы с квантовыми компьютерами на уровне расширенных квантовых схем, операторов и примитивов.
Эта библиотека является основным компонентом Qiskit, который содержит стандартные блоки для создания и работы с квантовыми схемами, квантовыми операторами и примитивными функциями (Sampler и Estimator). Он также содержит транспилятор, поддерживающий оптимизацию квантовых схем, и набор инструментов квантовой информации для создания продвинутых операторов.
Более подробную информацию о том, как использовать Qiskit, можно найти в документации, расположенной здесь:
https://docs.quantum.ibm.com/
Предупреждение
Не пытайтесь обновить существующую среду Qiskit 0.* до Qiskit 1.0 на месте. Читать далее.
Мы рекомендуем установить Qiskit через pip
:
pip install qiskit
Pip автоматически обработает все зависимости, и вы всегда будете устанавливать последнюю (и хорошо протестированную) версию.
Для установки из исходного кода следуйте инструкциям в документации.
Теперь, когда Qiskit установлен, пришло время начать работу с Qiskit. Основными частями квантовой программы являются:
sampler
функций для выборки результатов или estimator
для оценки значений. Создайте пример квантовой схемы, используя класс QuantumCircuit
:
import numpy as np
from qiskit import QuantumCircuit
# 1. A quantum circuit for preparing the quantum state |000> + i |111>
qc_example = QuantumCircuit ( 3 )
qc_example . h ( 0 ) # generate superpostion
qc_example . p ( np . pi / 2 , 0 ) # add quantum phase
qc_example . cx ( 0 , 1 ) # 0th-qubit-Controlled-NOT gate on 1st qubit
qc_example . cx ( 0 , 2 ) # 0th-qubit-Controlled-NOT gate on 2nd qubit
Этот простой пример создает запутанное состояние, известное как состояние GHZ. h
), фазовый вентиль ( p
) и вентиль CNOT ( cx
).
Создав свою первую квантовую схему, выберите, какую примитивную функцию вы будете использовать. Начиная с sampler
, мы используем measure_all(inplace=False)
, чтобы получить копию схемы, в которой измеряются все кубиты:
# 2. Add the classical output in the form of measurement of all qubits
qc_measured = qc_example . measure_all ( inplace = False )
# 3. Execute using the Sampler primitive
from qiskit . primitives import StatevectorSampler
sampler = StatevectorSampler ()
job = sampler . run ([ qc_measured ], shots = 1000 )
result = job . result ()
print ( f" > Counts: { result [ 0 ]. data [ "meas" ]. get_counts () } " )
Выполнение этого даст результат, аналогичный {'000': 497, '111': 503}
, который составляет 000
в 50% случаев и 111
в 50% случаев с учетом статистических колебаний. Чтобы проиллюстрировать возможности Estimator, теперь мы используем набор инструментов квантовой информации для создания оператора run()
вместе с нашей квантовой схемой. Обратите внимание, что для оценки требуется схема без измерений, поэтому мы используем схему qc_example
, созданную ранее.
# 2. Define the observable to be measured
from qiskit . quantum_info import SparsePauliOp
operator = SparsePauliOp . from_list ([( "XXY" , 1 ), ( "XYX" , 1 ), ( "YXX" , 1 ), ( "YYY" , - 1 )])
# 3. Execute using the Estimator primitive
from qiskit . primitives import StatevectorEstimator
estimator = StatevectorEstimator ()
job = estimator . run ([( qc_example , operator )], precision = 1e-3 )
result = job . result ()
print ( f" > Expectation values: { result [ 0 ]. data . evs } " )
Запуск этого даст результат 4
. Ради интереса попробуйте присвоить значение +/- 1 каждому однокубитному оператору X и Y и посмотреть, сможете ли вы добиться такого результата. (Внимание, спойлер: это невозможно!)
Использование qiskit.primitives.StatevectorSampler
и qiskit.primitives.StatevectorEstimator
предоставленных Qiskit, не приведет вас слишком далеко. Мощь квантовых вычислений невозможно смоделировать на классических компьютерах, и вам необходимо использовать настоящее квантовое оборудование для масштабирования до более крупных квантовых схем. Однако запуск квантовой схемы на аппаратном обеспечении требует перезаписи базисных вентилей и подключения квантового оборудования. Инструмент, который делает это, — транспайлер, и Qiskit включает в себя проходы транспилятора для синтеза, оптимизации, сопоставления и планирования. Однако он также включает в себя компилятор по умолчанию, который очень хорошо работает в большинстве примеров. Следующий код сопоставит пример схемы с basis_gates = ['cz', 'sx', 'rz']
и линейной цепочкой кубитов. coupling_map =[[0, 1], [1, 2]]
.
from qiskit import transpile
qc_transpiled = transpile ( qc_example , basis_gates = [ 'cz' , 'sx' , 'rz' ], coupling_map = [[ 0 , 1 ], [ 1 , 2 ]] , optimization_level = 3 )
Qiskit предоставляет уровень абстракции, который позволяет пользователям запускать квантовые схемы на оборудовании любого поставщика, предоставляющего совместимый интерфейс. Лучший способ использовать Qiskit — это среда выполнения, которая обеспечивает оптимизированную реализацию sampler
и estimator
для данной аппаратной платформы. Эта среда выполнения может включать в себя использование предварительной и последующей обработки, например оптимизированных проходов транспилера с подавлением ошибок, смягчением ошибок и, в конечном итоге, встроенным исправлением ошибок. Среда выполнения реализует интерфейсы qiskit.primitives.BaseSamplerV2
и qiskit.primitives.BaseEstimatorV2
. Например, некоторые пакеты, которые предоставляют реализации примитивной реализации времени выполнения:
Qiskit также предоставляет абстрактный интерфейс нижнего уровня для описания квантовых серверов. Этот интерфейс, расположенный в qiskit.providers
, определяет абстрактный класс BackendV2
, который поставщики могут реализовать для представления своего оборудования или симуляторов в Qiskit. Класс бэкэнда включает в себя общий интерфейс для выполнения схем на бэкэнде; однако в этом интерфейсе каждый поставщик может выполнять различные типы предварительной и последующей обработки и возвращать результаты, определенные поставщиком. Вот некоторые примеры опубликованных пакетов поставщиков, которые взаимодействуют с реальным оборудованием:
Вы можете обратиться к документации этих пакетов для получения дальнейших инструкций о том, как получить доступ и использовать эти системы.
Если вы хотите внести свой вклад в Qiskit, ознакомьтесь с нашими правилами внесения вкладов. Принимая участие, вы должны соблюдать наш кодекс поведения.
Мы используем выпуски GitHub для отслеживания запросов и ошибок. Присоединяйтесь к сообществу Qiskit Slack для обсуждения, комментариев и вопросов. Для вопросов, связанных с запуском или использованием Qiskit, в Stack Overflow есть qiskit
. Если у вас возникнут вопросы о квантовых вычислениях с помощью Qiskit, используйте тег qiskit
на сайте Quantum Computing Stack Exchange (пожалуйста, сначала прочитайте рекомендации о том, как задавать вопросы на этом форуме).
Qiskit — это работа множества людей, которые вносят свой вклад в проект на разных уровнях. Если вы используете Qiskit, укажите прилагаемый файл BibTeX.
Журнал изменений для конкретного выпуска генерируется динамически и записывается на страницу выпуска на Github для каждого выпуска. Например, вы можете найти страницу выпуска 0.46.0
здесь:
https://github.com/Qiskit/qiskit/releases/tag/0.46.0
Журнал изменений для текущего выпуска можно найти на вкладке «Выпуски». Журнал изменений предоставляет краткий обзор заметных изменений для данного выпуска.
Кроме того, в рамках каждого выпуска составляются подробные примечания к выпуску, в которых подробно документируется, что изменилось в рамках выпуска. Сюда входит любая документация о потенциальных критических изменениях при обновлении и новых функциях. Посмотреть все примечания к выпуску можно здесь.
Мы признательны за частичную поддержку разработки Qiskit со стороны Национального исследовательского центра квантовой информатики Министерства энергетики США, Центра совместного проектирования квантовых преимуществ (C2QA) по номеру контракта DE-SC0012704.
Лицензия Апач 2.0