Симулятор квантового компьютера
Напишите небольшую квантовую схему на JavaScript, запустите моделирование прямо в браузере и изучите схему, вероятности и вектор состояния. Или опишите вычисление на высоком уровне, например сложение, и наблюдайте, как оно автоматически превращается в реальную обратимую квантовую схему.
Модель шума
Реальные квантовые компьютеры вычисляют не идеально: кубиты крайне чувствительны и теряют часть информации из-за нежелательных взаимодействий с окружающей средой — теплом, электромагнитными полями и соседними кубитами. Операции вентилей тоже не бывают абсолютно точными, и даже итоговое считывание может дать ошибку. По умолчанию симулятор выполняет идеальное вычисление; здесь можно включить типичные модели ошибок и сразу увидеть их влияние.
Опишите вычисление с помощью quantum.add, quantum.subtract, quantum.multiply, quantum.divide или quantum.random. Ctrl+Enter запускает моделирование. Полная справка доступна по кнопке «Документация».
Этот код автоматически создан из кода программы выше и сразу смоделирован. Здесь его можно изменить вручную и запустить снова.
Сгенерированная схема изменена вручную, поэтому группировка регистров на диаграмме скрыта. Повторный запуск кода программы выше перезапишет изменения.
Не более 4000 символов. Доступные методы QuantumCircuit: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (псевдоним: toffoli), swap, measureAll, run. Ctrl+Enter запускает моделирование.
Диаграмма схемы
Пошаговый вид показывает вероятности и вектор состояния сразу после выбранного вентиля. Результаты измерений ниже всегда относятся ко всей схеме.
OpenQASM 2.0
OpenQASM 2.0 — распространённый формат обмена квантовыми схемами, который читает, в частности, Qiskit. Порядок битов: симулятор считает q0 старшим левым битом, а Qiskit считает q[0] младшим, поэтому измеренные строки там выглядят зеркально.
Вероятности
Вероятность измерить каждую возможную битовую строку, точно вычисленная из вектора состояния. Направление чтения: q0 — левый старший бит.
Сферы Блоха
Состояние каждого кубита изображается стрелкой на сфере Блоха: северный полюс = |0⟩, южный = |1⟩, экватор = равновесная суперпозиция. Если стрелка заметно короче радиуса, у кубита нет собственного чистого состояния: он запутан с другими. Короткая стрелка может быть и следствием шума: кубит теряет когерентность, и стрелка сжимается к центру. Здесь зашумлённые сферы являются приближением: вектор Блоха усредняется по траекториям шума. В пошаговом виде выше стрелки движутся вентиль за вентилем только без шума.
Результаты измерений
Фактическое число появлений каждой битовой строки в смоделированных измерениях. При нескольких возможных результатах числа случайно отклоняются от точных вероятностей.
Вектор состояния
Комплексные амплитуды, лежащие в основе вероятностей: квадрат модуля амплитуды (действительная² + мнимая²) даёт вероятность её состояния.
| Состояние | Действительная часть | Мнимая часть |
|---|
Основы: как это работает?
От программы к физическому кубиту
Настоящий квантовый компьютер — это больше, чем микросхема. Классическая управляющая электроника преобразует схему в точные импульсы. В показанном примере лазеры охлаждения, перекачки, управления кубитом и считывания формируют сигналы на оптическом столе и направляют их в экранированную вакуумную камеру. Там они изменяют и измеряют состояние кубита, после чего результат возвращается классическому компьютеру.
Кубит и базисные состояния
Классический бит равен 0 или 1. Кубит также может находиться в суперпозиции двух базисных состояний |0⟩ и |1⟩. Для нескольких кубитов все базисные состояния записываются битовой строкой, например |10⟩ для 2 кубитов, где q0 в этом симуляторе всегда является старшим левым битом.
Суперпозиция
Кубит в суперпозиции одновременно содержит компоненты нескольких базисных состояний. Они описываются комплексными амплитудами; квадрат модуля амплитуды даёт вероятность получить соответствующее состояние при измерении.
Сфера Блоха
Состояние одного кубита можно показать стрелкой на сфере: северный полюс соответствует |0⟩, южный полюс |1⟩, а все точки экватора — равновесные суперпозиции. Фаза определяет направление стрелки вдоль экватора. Вентили поворота rx, ryи rz вращают стрелку вокруг соответствующих осей, а фазовые вентили S и T — вокруг оси Z. У запутанных кубитов стрелка сжимается к центру: отдельный кубит больше не имеет собственного чистого состояния, и запутанность становится буквально видимой.
Измерение и повторы
measureAll() одновременно измеряет все кубиты и завершает схему. Поскольку одно измерение даёт лишь один случайный результат, схема концептуально измеряется указанное число shots с помощью run({ shots }), чтобы распределение вероятностей стало видно как гистограмма. Точные вероятности дополнительно вычисляются непосредственно из вектора состояния независимо от случайности повторов.
Вентиль Адамара
Вентиль Адамара h(q) переводит кубит из определённого состояния (|0⟩ или |1⟩) в равновесную суперпозицию |0⟩ и |1⟩ , то есть примерно 50% / 50% при измерении.
Фазовые вентили S и T
Вентили s(q) и t(q) не меняют вероятности измерения одного кубита, а только поворачивают фазу амплитуды |1⟩ : S на 90°, T на 45°. Эффект проявляется вместе с суперпозицией: между двумя вентилями Адамара фаза определяет, складываются амплитуды или гасят друг друга. Варианты dagger sdg(q) и tdg(q) вращают в противоположную сторону и отменяют S и T. Правило: два T образуют S, два S образуют Z.
CNOT и условная запутанность
Вентиль CNOT cnot(control, target) инвертирует целевой кубит, когда управляющий находится в состоянии |1⟩. Если управляющий кубит заранее находится в суперпозиции, возникает запутанность: кубиты нельзя описывать независимо, как в состоянии Белла. Если управляющий кубит в определённом базисном состоянии, CNOT лишь условно инвертирует бит без запутанности. Поэтому не каждый CNOT автоматически создаёт запутанность.
CZ: симметричный родственник CNOT
Вентиль CZ cz(a, b) меняет знак амплитуды, когда оба кубита находятся в |1⟩. В отличие от CNOT, управляющего и целевого кубитов нет: вентиль одинаково действует на оба и изображается двумя соединёнными точками. CZ и CNOT преобразуются друг в друга: CNOT — это CZ, целевой кубит которого проходит через вентиль Адамара до и после операции. CZ лежит в основе многих алгоритмов, например поиска Гровера.
Состояние GHZ: запутанность трёх кубитов
Состояние GHZ, названное в честь Гринбергера, Хорна и Цайлингера, переносит принцип состояния Белла на три кубита: один вентиль Адамара и два CNOT запутывают их так, что измерение даёт только |000⟩ или |111⟩ , но не смешанные строки. Ни один кубит больше не имеет собственного состояния; информация заключена только в общей корреляции.
Алгоритм Дойча: минимальное квантовое преимущество
Алгоритм Дойча одним обращением к неизвестному оракулу отвечает на вопрос, для которого классическому компьютеру нужны два: постоянна функция или сбалансирована? Вход проходит через оракул в суперпозиции, а благодаря интерференции ответ однозначно кодируется во входном кубите. Этот принцип, фазовый откат, лежит в основе почти всех квантовых алгоритмов.
Поиск Гровера: усиление амплитуд
Поиск Гровера находит отмеченный элемент неупорядоченного множества за значительно меньшее число запросов, чем классический алгоритм. Оракул отмечает искомое состояние инверсией фазы, здесь через CZ, а оператор диффузии усиливает отмеченную амплитуду за счёт остальных. Для 2 кубитов одной итерации достаточно, чтобы получить ответ с вероятностью 100%.
Обратимое сложение: от quantum.add() к схеме
Редактор кода программы выше преобразует quantum.add({ a, b }) в схему из вентилей X, CNOT и CCNOT (Тоффоли), воспроизводящую классическое сложение полностью обратимо: каждый вентиль можно точно отменить, потому что информация не отбрасывается. CCNOT (ccnot(c1, c2, target)) инвертирует целевой кубит, только когда оба управляющих равны |1⟩ . Этого достаточно, чтобы обратимо построить любую классическую схему, включая полный сумматор с переносом. Входы A и B сначала устанавливаются в определённые базисные состояния без суперпозиции с помощью X. Поскольку схема проходит только через определённые состояния, итоговое измерение даёт ровно один результат с вероятностью 100% — классически правильную сумму. Поэтому quantum.add() несмотря на квантовую симуляцию, выдаёт детерминированный результат, а не несколько состояний с вероятностью ниже 100%.
Вычитание: сложение в обратном порядке
Поскольку каждый вентиль квантовой схемы точно обратим, всю схему сумматора можно выполнить назад, и сложение становится вычитанием: quantum.subtract({ a, b }) использует те же вентили сумматора в обратном порядке и вычисляет a − b. Это основной принцип обратимых вычислений: ни один шаг не уничтожает информацию, каждый можно отменить. В этой версии требуется a ≥ b, чтобы результат не был отрицательным.
Умножение: quantum.multiply()
Умножение строится из тех же обратимых элементов, что и сложение: по методу столбиком множитель a несколько раз прибавляется в сдвинутых позициях, соответствующих установленным битам b. Каждое частичное сложение выполняет тот же обратимый сумматор с последовательным переносом. Поскольку регистр результата растёт вместе с произведением, множители ограничены 3 битами (0–7): только тогда множитель, произведение и кубит переноса помещаются в 10 кубитов.
Деление: quantum.divide()
Деление также использует только обратимые элементы: quantum.divide({ a, b }) выполняет деление столбиком из сдвинутых обратимых вычитаний делителя из регистра остатка; результатом служат частное и остаток (a = quotient · b + remainder). Поскольку делимое, делитель, частное и кубит займа вместе должны поместиться в 10 кубитов, деление ограничено сильнее всего: bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 должно выполняться, а делитель b должен быть ≥ 1, поскольку делить на ноль нельзя. Если входы не помещаются в бюджет, редактор сообщает об этом вместо вычисления.
Истинная случайность: quantum.random()
Классические компьютеры не создают истинной случайности: их «случайные числа» порождаются детерминированными алгоритмами и являются псевдослучайными. Квантовый компьютер может: quantum.random({ bits }) переводит каждый бит в равновесную суперпозицию вентилем Адамара, и только измерение фундаментально непредсказуемо определяет итог. На реальном квантовом оборудовании это физически истинная случайность; симулятор имитирует её псевдослучайностью браузера.
Симулятор и реальное квантовое оборудование
Симулятор точно вычисляет состояние классической арифметикой с плавающей точкой в браузере. Это возможно лишь для очень малых схем до 10 кубитов. Реальные квантовые компьютеры используют физические кубиты, подвержены ошибкам, декогеренции и шуму, а их преимущество проявляется на гораздо более крупных схемах, которые уже нельзя практически моделировать классически. Это учебный инструмент, а не настоящий квантовый процессор.