Qiskit
Contents
Qiskit#
Автор(ы):
В этой лекции мы посмотрим, как при помощи библиотеки Qiskit можно работать с кубитами и квантовыми схемами.
Warning
Во всех дальнейших лекциях мы будем, за редким исключением, использовать в основном библиотеку PennyLane, так что данная лекция исключительно обзорная и факультативная. В ней мы поверхностно познакомимся с концептами Qiskit и напишем пару примеров по работе с кубитами. Обзор экосистемы Qiskit, включая qiskit-machine-learning выходит за рамки этой лекции, но в конце мы дадим несколько ссылок для самостоятельного изучения.
Кубиты#
Импорты#
from qiskit import QuantumCircuit
from qiskit.providers.aer import QasmSimulator
from qiskit import version
print(f"Qiskit version: {version.get_version_info()}")
Qiskit version: 0.18.3
Симулятор#
Для запуска мы будем использовать симулятор квантового компьютера QasmSimulator:
simulator = QasmSimulator()
В Qiskit поддерживается несколько симуляторов, например:
UnitarySimulator – симулятор унитарной динамики идеальной схемы;
StatevectorSimulator – симулятор волновой функции идеальной схемы;
QasmSimulator – симулятор, который моделирует шумы;
Мы использовали лишь один из них. В целом, модуль qiskit.providers предоставляет базовые абстракции, которые позволяют запускать наш код на разных backend, включая реальные квантовые компьютеры, просто поменяв одну строчку в коде.
Квантовая схема#
Ключевым элементом в Qiskit является квантовая схема – экземпляр класса QuantumCircuit. Создадим такую схему:
circuit = QuantumCircuit(2, 2)
В Qiskit необходимо явно указывать не только количество кубитов, которые нам необходимы, но также и количество классических битов, которые необходимы будут нам для измерений. В данном случае мы создали квантовую схему с двумя кубитами и двумя битами.
Квантовые гейты#
Давайте попробуем воспроизвести функцию make_entanglement из лекции про Pennylane. Применим гейт Адамара к первому кубиту, а потом применим гейт CNOT (CX):
circuit.h(0)
circuit.cx(0, 1)
<qiskit.circuit.instructionset.InstructionSet at 0x7f0d84d3db20>
И добавим шаг измерений:
circuit.measure([0,1], [0,1])
<qiskit.circuit.instructionset.InstructionSet at 0x7f0dc914da90>
Компиляция и запуск схемы#
Квантовые схемы Qiskit должны быть скомпилированы в инструкции квантового ассемблера. Для этого используется функция transpile:
from qiskit import transpile
compiled_circuit = transpile(circuit, simulator)
job = simulator.run(compiled_circuit, shots=1000)
result = job.result()
counts = result.get_counts(compiled_circuit)
print(f"Number of '00': {counts['00']}")
print(f"Number of '11': {counts['11']}")
Number of '00': 458
Number of '11': 542
Мы получили результат, аналогичный полученному в лекции про Pennylane: вероятности получения результата \(\ket{00}\) и \(\ket{11}\) равны \(\sim 0.5\), а другие результаты мы получить не можем.
Визуализация#
В Qiskit есть очень мощные средства визуализации как результатов измерений, так и самих квантовых схем. Например, мы можем посмотреть результаты измерения counts в виде графика:
from qiskit.visualization import plot_histogram
plot_histogram(counts)
/home/runner/work/qmlcourse/qmlcourse/.venv/lib/python3.8/site-packages/qiskit/visualization/counts_visualization.py:226: MatplotlibDeprecationWarning: The label function was deprecated in Matplotlib 3.1 and will be removed in 3.8. Use Tick.label1 instead.
tick.label.set_fontsize(14)
А также визуализировать саму квантовую схему:
circuit.draw(output="mpl")
В данном случае мы использовали MatplotlibDrawe, который позволяет делать очень красивые и легко читаемые визуализации квантовых схем – это одна из причин почему Qiskit часто используют в курсах по основам квантовых вычислений.
Экосистема Qiskit#
Для более подробного изучения всей экосистемы Qiskit мы рекомендуем онлайн книгу, которая также является прекрасным источником для изучения базовых и продвинутых квантовых алгоритмов. Для знакомства со средствами для квантового машинного обучения можно также изучить документацию библиотеки qiskit-machine-learning, в которой представлены высокоуровневые API для таких вещей, как, например, квантовый SVM, или квантовая Generative Adversarial Network.