Квантовая механика — фундаментальная теория в физике, объясняющая явления в микроскопическом масштабе (такие как атомы и субатомные частицы). Эта "новая" (1900 г.) область отличается от классической физики, которая описывает природу в макроскопическом масштабе (такие как тела и машины) и не применима на квантовом уровне.
Квантовые вычисления — это использование свойств квантовой механики для выполнения вычислений и решения задач, которые классический компьютер не может и никогда не сможет решить.
Обычные компьютеры говорят на языке двоичного кода: они присваивают каждому символу и инструкции последовательность двоичных цифр (единиц и нулей) и хранят и обрабатывают эту информацию в битах. Даже ваш код на Python переводится в двоичные цифры при запуске на вашем ноутбуке. Например:
Слово "Hi" → "h": 01001000 и "i": 01101001 → 01001000 01101001
С другой стороны, квантовые компьютеры обрабатывают информацию с помощью кубитов (квантовых битов), которые одновременно могут быть и 0, и 1. Это делает квантовые машины значительно быстрее обычных для решения конкретных задач (например, вероятностных вычислений).
Квантовые компьютеры
Квантовые компьютеры используют атомы и электроны вместо классических кремниевых чипов. В результате они могут использовать квантовую механику для выполнения вычислений намного быстрее, чем обычные машины. Например, 8 битов достаточно классическому компьютеру для представления любого числа от 0 до 255, но 8 кубитов достаточно квантовому компьютеру для представления одновременно каждого числа от 0 до 255. Несколько сотен кубитов было бы достаточно для представления больше чисел, чем атомов во Вселенной.
Мозгом квантового компьютера является крошечный кубитный чип, изготовленный из металлов или сапфира.
Однако самая знаковая часть — это большое охлаждающее оборудование из золота, которое выглядит как люстра, висящая внутри стального цилиндра: дилюционный холодильник. Он охлаждает чип до температуры холоднее, чем в космосе, так как тепло разрушает квантовые состояния (по сути, чем холоднее, тем точнее).
Это ведущий тип архитектуры, называемый сверхпроводящими кубитами: искусственные атомы, созданные из схем с использованием сверхпроводников (таких как алюминий), которые демонстрируют нулевое электрическое сопротивление при сверхнизких температурах. Альтернативная архитектура — ионные ловушки (заряженные атомы, захваченные в электромагнитных полях в сверхвысоком вакууме), которые более точны, но медленнее первой.
Нет точного открытого подсчёта того, сколько квантовых компьютеров существует в мире, но оценки составляют около 200. На данный момент самые передовые:
- IBM Condor — наибольшее количество кубитов на сегодняшний день (1000 кубитов), хотя это само по себе не равно полезным вычислениям, так как уровни ошибок всё ещё имеют значение.
- Google Willow (105 кубитов) — хороший уровень ошибок, но всё ещё далёк от отказоустойчивых крупномасштабных вычислений.
- IonQ Tempo (100 кубитов) — квантовый компьютер с ионными ловушками с хорошими возможностями, но всё ещё медленнее сверхпроводящих машин.
- Quantinuum Helios (98 кубитов) — использует архитектуру с ионными ловушками с одними из самых высоких показателей точности.
- Rigetti Computing Ankaa (80 кубитов).
- Intel Tunnel Falls (12 кубитов).
- Xanadu Aurora (12 кубитов) — первый фотонный квантовый компьютер, использующий свет вместо электронов для обработки информации.
- Microsoft Majorana — первый компьютер, разработанный для масштабирования до миллиона кубитов на одном чипе (но в настоящий момент имеет 8 кубитов).
- SpinQ Mini (2 кубита) — первый портативный маломасштабный квантовый компьютер.
- NVIDIA QPU (Quantum Processing Unit) — первая система с ускорением на GPU для квантовых вычислений.
На данный момент обычный человек не может владеть крупномасштабным квантовым компьютером, но вы можете получить доступ к ним через облако.
Установка
На Python существует несколько библиотек для работы с квантовыми компьютерами по всему миру:
- Qiskit от IBM — самая полная высокоуровневая экосистема для запуска квантовых программ на квантовых компьютерах IBM, идеально подходит для начинающих.
- Cirq от Google — ориентирован на низкоуровневый контроль их оборудования, больше подходит для исследований.
- PennyLane от Xanadu — специализируется на квантовом машинном обучении, работает на их собственных фотонных компьютерах, но может подключаться к другим поставщикам.
- ProjectQ от ETH Zurich — проект с открытым исходным кодом, пытающийся стать основным пакетом общего назначения для квантовых вычислений.
Для этого руководства я буду использовать Qiskit от IBM, так как это лидер отрасли (pip install qiskit).
Самый базовый код, который мы можем написать — это создание квантовой схемы (окружение для квантовых вычислений) с одним кубитом и инициализировать его как 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%. Вы можете вывести это так:
print(f"[q=0 {round(state.probabilities()[0]*100)}%,
q=1 {round(state.probabilities()[1]*100)}%]")
Давайте визуализируем состояние:
from qiskit.visualization import plot_bloch_multivector
plot_bloch_multivector(state, figsize=(3,3))
Как вы можете видеть из 3D-представления квантового состояния, кубит на 100% находится в состоянии 0. Это был квантовый эквивалент "hello world", и теперь мы можем перейти к квантовому эквиваленту "1+1=2".
Кубиты
Кубиты имеют два фундаментальных свойства квантовой механики: суперпозицию и запутанность.
Суперпозиция — классические биты могут быть либо 1, либо 0, но никогда обоими одновременно. Наоборот, кубит может быть обоими (технически это линейная комбинация бесконечного числа состояний между 1 и 0), и только при измерении суперпозиция коллапсирует в 1 или 0 и остаётся так навсегда. Это происходит потому, что акт наблюдения квантовой частицы заставляет её принять классическое двоичное состояние либо 1, либо 0 (по сути, это история кота Шрёдингера, которую мы все знаем и любим). Поэтому кубит имеет определённую вероятность коллапса в 1 или 0.
q = QuantumCircuit(1,0)
q.h(0) #добавить суперпозицию
state = Statevector.from_instruction(q)
print(f"[q=0 {round(state.probabilities()[0]*100)}%,
q=1 {round(state.probabilities()[1]*100)}%]")