Квантовый «Hello World!»

в 9:04, , рубрики: квантовые вычисления, Научно-популярное

Что представляет собой цикл вычислений на квантовом компьютере?

1. Приготовили кубиты в нужном количестве и нужном нам начальном состоянии.
2. Собрали кубиты в квантовый регистр.
3. Применили к квантовому регистру последовательность операций.
4. Произвели измерение кубитов, составляющих квантовый регистр. Получили в итоге двоичное число, размерность которого совпадает с размерностью квантового регистра.
5. Поразмыслили над полученным результатом.
6. Повторили цикл вычислений (пункты с 1. по 5.), возможно, много раз.
7. Поразмыслили над результатом.

За каждым из пунктов стоят тома непрошибаемой теории. Но мы же программисты. Многие ли из нас знают так уж хорошо, что там и как крутится-вертится в классических процессорах. Да, практически, никто. Да оно, вроде бы, не очень и надо. Может и здесь как-нибудь так. Нам бы среду (IDE-шку какую-никакую, или чего там есть?), пару тезисов… мы чего-нибудь накалякаем, ткнём кнопочку “run”, квантовый компилятор (или чего там у них) выдаст нам синтаксис, мы его подправим. Глядишь, потихонечку пойдёт-поедет!

Отчего же не попробовать? Кто нам, в конце концов, запретит? Google нам в руки. Осмотримся! Во-первых, что там с ассортиментом квантовых компьютеров на рынке? Так. Понятно. Глухо! Поработать с живой железкой ещё не скоро доведётся. Люди даже выражают сомнения, доведётся ли вообще когда-нибудь. Ну, я имею в виду, с такой нормальной железкой, с несколькими сотнями кубитов, размером с ноутбук, и чтобы купить можно было недорого в любом ближайшем хозяйственном магазине. Да. Нескоро.

Ну и ладно. Но руки-то чешутся! А интуиция и образование подсказывают, что всё это квантовое вычислительное хозяйство вполне должно поддаваться (с какими-то ограничениями) моделированию на классических компьютерах. Поищем в этом направлении. Здесь уже получше ситуация. Но, всё-таки, на удивление мало живых/активных проектов. Совсем молодая область! Но кое-что есть. Особенно долго копаться, и привередничать не будем, возьмём первое, более-менее понятное и более-менее работающее. И, желательно, попроще. Например, QCad

Ну вот! Среда есть, кнопки есть. Нифига непонятно пока, по ходу разберёмся. Бегло пробежали глазами мануальчик и в бой!

Значит так: слева в главном окне – кубиты.

Квантовый «Hello World!» - 1

Есть панель-toolbox с иконками элементарных преобразований (гейтов), которые мы будем нанизывать на горизонтальные линейки с рисками.

Квантовый «Hello World!» - 2

По нажатию кнопки “run”, эти наши кубиты, как бы, побегут слева направо и будут последовательно пробегать сквозь гейты (т.е. претерпевать соответствующие преобразования) и, в конце концов, прибегут к правому краю окошка, полностью преобразованные в соответствии с нашей «программой» (последовательностью гейтов). А на правый конец линеек (всех или не всех, это уж как мы пожелаем), мы повесим иконки, символизирующие процесс измерения, которым заканчивается всякий цикл вычислений на квантовом компьютере. Сам же результат измерений в разных видах мы можем просмотреть в отдельном окошке.

Квантовый «Hello World!» - 3

Хозяйке на заметку № 1

Результат измерения квантового регистра – одно двоичное число. И процесс измерения – это вероятностный процесс. Т.е. мы на выходе получаем одно из возможных (вероятных) значений результата вычислений. А нам практически всегда требуется оценить распределение вероятностей. Чтобы оценить это искомое распределение, процесс вычисления надо бы повторить много раз. В окошке результата измерений (на вкладке «Measured», т.е. «Измеренное») разработчик QCAD выдаёт нам результат сразу в виде искомого распределения вероятностей каждого из возможных состояний регистра. Так разработчику намного проще моделировать, а пользователю намного проще анализировать результат.

Хозяйке на заметку № 2

Сходу может быть неочевидно, что кубит № 1 – это самый младший кубит регистра и в окошке результата в состоянии регистра он находится в позиции младшего бита, т.е – крайний справа.

Квантовый «Hello World!» - 4

Очень, конечно, интересно, как это реализовано (или, вернее будет сказать, может быть реализовано, потенциально) в железе, но первые же несколько робких и безуспешных попыток продраться сквозь зубодробительную теорию, основательно охлаждают этот интерес. Ну и ладно.

Непонятка № 1

Кубит – это квантовомеханическая система. Кубит потому так и называется (ку — БИТ), что для нас, программистов, он выглядит имеющим всего два базисных состояния. А, стало быть, как учат нас первые строчки учебников квантовой механики, мы вправе ожидать, что, в общем случае, кубит будет скорее находиться в суперпозиции базисных состояний, чем в одном из «чистых» базисных. А в симуляторе мы видим слева (на входе) кубиты в состояниях |0> и |1>. Как так? Метнёмся в Google, осмотримся. Да, действительно. Квантовые инженеры-железячники уже научились «приготавливать» кубиты в «чистых» базисных состояниях. Ну и славно.

А чем замечательно базисное состояние (|0> или |1>)? Замечательно оно тем, что сколько бы раз мы ни применяли процедуру измерения к кубиту в одном из этих состояний, мы всегда будем получать определённый результат (0 или 1). Измерение в квантовой механике, как мы знаем, процесс вероятностный, а тут у нас результат будет определённый, т.е. вероятность будет равна 1.

Итак, приступаем к экспериментам с нашим симулятором! С чего начнём? Ну, вот все говорят: «Квантовые вычисления …, квантовые вычисления …»! Хочется уже понять, что это за квантовые вычисления такие? Идёшь, естественно, в Google, набираешь: «квантовые вычисления», и вываливается тебе много всего, но среди всего того, что вываливается, ты находишь либо какие-то общие слова, либо убойную математику, либо убойную физику. И хочется спросить: а где же собственно сами вычисления?! Но спросить особенно некого. Ну, вот давайте, пожалуй, с этого и начнём, попробуем смоделировать на нашей модели квантового компьютера самые обычные арифметические операции с двоичными числами.

Эксперимент № 1

Реализуем операцию сложение двух двухразрядных чисел. Три кубита используем для хранения результата (Q1, Q2, Q3), два кубита под первое слагаемое (Q4, Q5), два кубита под второе слагаемое (Q7, Q8) и какое-то количество вспомогательных кубитов (для хранения бита переноса, например, и т.п.).

Квантовый «Hello World!» - 5

Первое, что мы делаем – создаём шаблон модели:

File -> new ->… В появившемся диалоге

Квантовый «Hello World!» - 6

Выбираем требуемое количество строк (т.е. кубитов) и столбцов (тактов вычислений) и жмём ОК.

В открывшемся пустом окне справа вешаем в нужных позициях иконки измерения,

Квантовый «Hello World!» - 7

И получаем готовый шаблон приложения.

Теперь, используя доступные нам гейты (элементарные преобразования), мы должны «собрать» искомую программу (сложение двух двухразрядных двоичных чисел). Я использовал для этого гейты «controlled not» и «controlled controlled not». Что они собой представляют и как работают, всякий может подсмотреть в своём «Карманном справочнике для квантового программиста».

Ниже на картинке приведена моя реализация решения задачи:

Квантовый «Hello World!» - 8

Очень возможно, что это решение покажется кому-то чудовищным, но, несомненно, — оно является решением! А как это проверить?

Хозяйке на заметку № 3

Если дважды кликнуть на квадратике с символом состояния кубита.

Квантовый «Hello World!» - 9

Откроется диалог:

Квантовый «Hello World!» - 10

c помощью которого можно выбрать начальное состояние каждого конкретного кубита.

Таким образом, задавая различные начальные состояния кубитам операндов, мы будем получать разные значения результата после нажатия кнопки “RUN”. А что у нас здесь будет результатом и как его посмотреть? Идём в окошке Qubits status на вкладку Measured и находим там состояние регистра, напротив которого стоит число (суть вероятность) 1.0.

Квантовый «Hello World!» - 11

Это и будет результат наших вычислений!

Ну что же, для самого первого знакомства с темой, пожалуй, хватит. Засим, позвольте откланяться.
Искренне ваш!

Автор: tendzin1966

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js