Квантовые вычисления — это область технологии, которая использует принципы квантовой механики (такие как суперпозиция и запутанность) для обработки информации принципиально иным способом, чем классические компьютеры. Проще говоря, вместо битов (0 или 1) квантовые компьютеры используют кубиты для решения сложных многомерных задач в химии, материаловедении и оптимизации, потенциально за секунды вместо лет.
На практике задачи решаются путем построения математических моделей, называемых квантовыми схемами: последовательности операций и инструкций, которые принимают входные данные и возвращают выходные (подобно линейной регрессии и нейронным сетям). В квантовых вычислениях эти операции называются вентилями, которые изменяют данные (кубиты) по-другому. По сути, схема — это предложение, а вентили — это слова, составляющие предложение.
Схемы используются для проведения экспериментов. Конкретно существует 2 типа квантовых симуляций:
- Использование обычного компьютера для симуляции квантового компьютера. Например, использование Python для написания схемы и симулятора для её запуска, тогда как реальный квантовый компьютер физически реализовал бы схему.
- Использование квантового компьютера для симуляции реальной квантовой системы (таких как атомы или электроны). В природе квантовые системы уже существуют, а классические компьютеры с трудом их симулируют, потому что пространство состояний растёт экспоненциально. С другой стороны, квантовые машины могут моделировать эти системы более эффективно, так как они естественным образом следуют тем же правилам.
В этом учебнике я покажу вам, как запустить квантовую симуляцию на вашем компьютере. Эта статья является продолжением "Руководства для начинающих по квантовым вычислениям на Python".
Настройка
Прежде всего, нам нужно установить Qiskit (
pip install qiskit), библиотеку с открытым исходным кодом для работы с квантовыми компьютерами, разработанную IBM, которая позволяет вам симулировать квантовое устройство на локальной машине.Самый простой код, который мы можем написать, — это создать квантовую схему (среду для квантовых вычислений) с единственным кубитом и инициализировать его на 0. Для измерения состояния кубита нам нужен вектор состояния, который в основном показывает текущую квантовую реальность вашей схемы.
from qiskit import QuantumCircuit from qiskit.quantum_info import Statevector q = QuantumCircuit(1,0) #схема с 1 квантовым битом и 0 классическими битами state = Statevector.from_instruction(q) #измерить состояние state.probabilities() #вывести вероятность%
Это означает, что вероятность того, что кубит равен 0 (первый элемент), составляет 100%, а вероятность того, что кубит равен 1 (второй элемент), равна 0%. Визуализируем состояние:
from qiskit.visualization import plot_bloch_multivector plot_bloch_multivector(state, figsize=(3,3))
Схемы
Квантовый вентиль — это одиночная операция, которая изменяет квантовое состояние. Квантовая схема — это последовательность вентилей, применённых к кубитам во времени.
Давайте начнём строить простую схему.
q = QuantumCircuit(1,0) #схема с 1 квантовым битом и 0 классическими битами q.draw(output="mpl", scale=0.7) #показать схему с matplotlib
У нас есть один кубит, но для его измерения нам нужно добавить классический бит в нашу схему.
q = QuantumCircuit(1,1) #добавить 1 классический бит q.draw(output="mpl", scale=0.7)
Чтобы построить схему, вы должны знать, что вы хотите достичь, или, другими словами, вам нужно знать вентили и то, что они делают. Подход похож на нейронные сети: вы просто используете один слой за другим для получения желаемого выхода (например, свёртки на изображениях и встраивания на тексте). Наиболее распространённая операция — это вентиль Адамара (вентиль H), который применяет суперпозицию к кубиту.
q = QuantumCircuit(1,1) q.h(0) #вентиль Адамара (суперпозиция) q.draw(output="mpl", scale=0.7)
На изображении мы видим, что красный вентиль H применён к кубиту, превращая его из определённого 0 в равномерную смесь 0 и 1 (50/50). Давайте добавим ящик измерения, который схлопывает эту суперпозицию в реальное значение (либо 0, либо 1), сохраняя этот результат в классическом бите.
q = QuantumCircuit(1,1) q.h(0) q.measure(qubit=0, cbit=0) #измерить кубит классическим битом q.draw(output="mpl", scale=0.7)
Схема была математически разработана моим классическим компьютером, как если бы она была написана на бумаге, но она ещё не была выполнена.
Симуляция
Квантовая симуляция — это когда вы используете компьютер для моделирования поведения квантовой системы. Если вы напишете схему (как я сделал выше), вы просто описываете математическую модель. Для её запуска вам нужен модуль выполнения, который выполняет квантовую схему в симуляции.
Qiskit-Aer (
pip install qiskit-aer) — это модуль, который выполняет квантовые схемы в симуляции. Aer позволяет вам запускать квантовые схемы на вашем компьютере, симулируя различные аспекты реального квантового оборудования (квантовое состояние, измерение, зашумленная система).Я собираюсь запустить эксперимент со схемой, написанной ранее (классический бит + кубит в суперпозиции) 1000 раз.
from qiskit_aer import AerSimulator sim = AerSimulator() result = sim.run(q, shots=1000).result() result.get_counts()
Кубит был измерен 1000 раз, в результате чего 1 появился 500 раз, а 0 — 500 раз. Мы можем это визуализировать:
from qiskit.visualization import plot_histogram plot_histogram(result.get_counts(), figsize=(5,4), color="black", title="1-кубит в суперпозиции")
Результат идеально равномерный, потому что Aer может симулировать идеальные квантовые состояния, что было бы невозможно иметь на реальном оборудовании. В реальном мире квантовая информация чрезвычайно хрупка и работает под предположением, что система идеальна и стабильна, позволяя частицам существовать в нескольких состояниях (когерентность). Но в момент, когда кубит взаимодействует с чем-либо, например с теплом или вибрациями, система теряет свою гармонию и квантовые свойства (декогеренция). Таким образом, вы можете визуализировать кубит в суперпозиции (одновременно и 0, и 1) только в симуляции, но никогда в реальном мире. Потому что в момент, когда вы наблюдаете кубит, вы вносите шум и система схлопывается в одно число (0 или 1). На практике реальные квантовые компьютеры предназначены только для измерения результатов, а симуляции используются для проектирования квантовых моделей.
Чтобы сделать эксперимент более реалистичным, можно добавить шум в симуляцию.
from qiskit_aer import noise n = noise.NoiseModel() error = noise.depolarizing_error(param=0.10, num_qubits=1) #10% вероятность ошибки n.add_all_qubit_quantum_error(error=error, instructions=['h']) sim = AerSimulator(noise_model=n) result = sim.run(q, shots=1000).result() plot_histogram(result.get_counts(), figsize=(5,4), color="black", title="1-кубит в суперпозиции")
Заключение
Эта статья была учебником по введению квантовых симуляций на Python и Qiskit. Мы узнали, в чём разница между реальным оборудованием и квантовым экспериментом. Мы также узнали, как проектировать квантовые схемы и запускать симуляцию на классической машине.
Полный код для этой статьи: GitHub
Надеюсь, вам понравилось! Не стесняйтесь связаться со мной с вопросами и обратной связью или просто поделиться своими интересными проектами.