Квантовое программирование с чего начать

Языки программирования для квантового компьютера

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать
Прототип ядра ионного квантового компьютера. Ion Quantum Technology Group, Сассекский университет

Квантовые компьютеры время от времени попадают в СМИ. Вы слышите о том, как человек шаг за шагом приближается к их созданию, хотя для большинства развитие квантовых вычислений остается странным и таинственным искусством.

К счастью, для решения этой проблемы появляются отличные проекты, привлекающие внимание широкой аудитории. Например, несколько лет назад IBM дала возможность любому подключиться к 5-кубитному компьютеру. В проекте зарегистрировались 70 000 человек.

Однако индустрия квантовых вычислений по-прежнему остается в зачаточном состоянии. Хотя уже создано немало прототипов, они не могут сделать то, с чем не справится обычный ноутбук. Необходимое аппаратное обеспечение еще не существует, но для изучения у нас есть кое-что еще — языки квантового программирования.

Путешествие в мир квантовых вычислений доступно каждому и напоминает изучение любого обычного языка в нормальном программировании.

Квантовые вычисления

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Для погружения в мир квантовых вычислений не понадобится держать дома квантовый компьютер. Есть проекты, которые предоставляют доступ к реальным квантовым устройствам, но простые квантовые программы можно легко моделировать и на обычном ноутбуке.

Прежде чем заняться программами, давайте вспомним базовые вещи о квантовых вычислениях. И здесь нам поможет статья Брайана Хейса «Programming Your Quantum Computer».

Обычный компьютер основан на битах: речь идет переменных, которые имеют только два возможных значения. Мы часто называем их 0 и 1, хотя в контексте булевой алгебры мы можем назвать их «Истинные» и «Ложные».

С битами можно выполнять простые булевы операции, такие как NOT, AND и OR. Любая переменная, более сложная, чем бит (например, int или float), представляет собой просто набор из множества бит.

Квантовые компьютеры основаны на квантовых битах или кубитах. Они также имеют два возможных значения, которые мы можем назвать 0 и 1. Но законы квантовой механики также допускают другие значения, которые мы называем состояниями суперпозиций.

В каком-то смысле состояния суперпозиции представляют собой значения, которые существуют между крайностями 0 и 1. Мы можем представить кубит как сферу, причем 0 и 1 расположены на противоположных полюсах. Состояния суперпозиции — все остальные возможные точки на поверхности.

Дело не в том, что кубит может иметь промежуточное значение, например 0,63; когда измеряется состояние кубита, результат всегда равен 0 или 1. Но в ходе вычисления кубит может действовать так, как если бы он представлял собой смесь состояний — например, 63% нуля и 37% единицы.

Другим ключевым аспектом поведения кубитов является интерференция, явление, хорошо известное в физике волн. Когда две волны перекрываются, они могут усиливать друг друга (если пики и волнообразные спады совпадают), либо они могут нивелировать друг друга (если волны не соответствуют фазе). Математически интенсивность комбинированных волн в любой точке определяется квадратом суммы индивидуальных амплитуд волн. Когда две амплитуды имеют один и тот же знак, интерференция конструктивна; когда одна амплитуда положительна, а другая отрицательна, возникающая в результате деструктивная интерференция дает интенсивность меньше, чем у одной волны.

Подобно волнам, состояния 0 и 1 кубита имеют амплитуды, которые могут быть либо положительными, либо отрицательными. В зависимости от знаков амплитуд квантовая интерференция может либо увеличивать, либо уменьшать вероятность того, что определенное состояние будет наблюдаться, когда мы измеряем состояние кубита.

Интерференция играет роль во всех интересных алгоритмах для квантовых компьютеров, то есть алгоритмах, которые могут позволить такой машине превосходить классический компьютер. Общая идея организовать эволюцию квантовой системы состоит в том, чтобы ошибочные ответы были подавлены деструктивными помехами, а правильные ответы усиливались конструктивной интерференцией. Таким образом, алгоритмы используют форму параллелизма, уникальную для квантовых систем.

Одним из последних аспектов квантовой странности является запутанность. Вы не можете изменить один кубит внутри квантового регистра, оставив остальное без изменений. Для начала каждая функция, вычисленная квантовой системой, должна быть полностью обратимой. Если машина получает на вход A для вывода результата B, то должна быть возможность восстановить A при наличии B.

Каждая функция должна иметь одинаковое количество входов и выходов. Одним махом это правило запрещает большую часть арифметики. Обычный алгоритм сложения, например, необратим. Вы можете добавить 3 и 4, чтобы получить 7, но вы не можете «отсоединить» 7, чтобы восстановить исходные 3 и 4.

Другим запретом в квантовых вычислениях является копирование кубита (этот принцип называется теоремой о запрете клонирования). Также вы не можете произвольно установить или перезагрузить кубиты в середине вычисления. Попытка сделать это уничтожила бы квантовую суперпозицию.

В совокупности ограничения на операции кубита подразумевают, что любая квантовая программа должна иметь архитектуру дымоходной трубы — информация проходит прямо от одного конца к другому. Особенно важно, что в структуре программы не может быть циклов, где управление передается назад в более раннюю точку.

Ответ на эти сложности находят в языках квантового программирования. Фактически, квантовые компьютеры представляют собой гибридные устройства: частично квантовые и частично классические компьютеры. Использование элементов обычного компьютера необходимо для обработки входов и выходов, чтобы взаимодействовать с внешними приложениями. Таким образом, в одной программе можно комбинировать классический код и квантовый код.

Open Quantum Assembly Language (OpenQASM)

Исходный код OpenQASM был выпущен как часть программного обеспечения IBM Quantum Information Software Kit (QISKit) для использования с квантовой вычислительной платформой Quantum Experience. OpenQASM имеет общие черты со специализированными языками программирования (такими, как Verilog), используемыми для описания структуры и поведения электронных схем.

Программы QASM фактически всегда начинаются одинаково: мы определяем все биты, которые нам понадобятся — как квантовые, так и нормальные. Ниже приведен пример исходного кода OpenQASM. Программа добавляет два четырехбитовых номера.

Высокоуровневый язык программирования Q# нивелирует необходимость иметь глубокие знания в квантовой физике. Для заинтересованных в учебнике по языку дается информация по основным концепциям квантовых вычислений, охватывающая векторную и матричную математику, кубиты, обозначения Дирака, принцип Паули и квантовые схемы.

Скрипт Teleportation.qs из учебника по Q#. Учебник доступен здесь

Q# выглядит не так, как большинство других языков программирования, и несколько похож на C#.

Quantum Development Kit предоставляется бесплатно с подробными инструкциями по его установке и вводным учебным программам. Q# компилируется на квантовом симуляторе Visual Studio, имитируя квантовый процессор на 32 кубита. Симулятор может имитировать до 40 кубитов.

Если следовать туториалу от Microsoft, то процесс обучения пойдет от наблюдения запутанных состояний из двух кубитов к моделированию квантовой телепортации.

LIQUi (Language-Integrated Quantum Operations)

LIQUi позволяет моделировать до 30 кубитов на одной машине с 32 ГБ оперативной памяти. Платформу можно использовать для определения, выполнения и отображения в различных графических форматах квантовых схем. С помощью LIQUi можно имитировать простую квантовую телепортацию, алгоритм факторизации Шора, квантовую ассоциативную память, квантовую линейную алгебру.

Как можно заметить по примеру выше, LIQUi очень похож на Q#.

Quantum Computation Language (QCL)

QCL, или Quantum Computation Language создан Бернхардом Омером в 1998 году. Развитие языка продолжается и сейчас: существует эмулятор, который позволяет запускать квантовые программы на классическом компьютере. Конечно, эмулятор не может обеспечить ускорение квантового параллелизма; с другой стороны, он предлагает программисту некоторые полезные функции, такие как команды для проверки внутреннего состояния кубитов (что крайне трудно сделать на реальном квантовом оборудовании).

QCL заимствует синтаксис C и Java, которые иногда описываются как «императивные» языки, потому что они полагаются на прямые команды для установки и сброса значений переменных. Такие команды обычно запрещены в квантовом вычислении, поэтому основные части программы QCL работают только на классическом оборудовании. Квантовая система служит «оракулом», отвечающим на вопросы, которые могут быть заданы в формате, подходящем для вычислений кубитов. Каждый запрос к оракулу должен иметь требуемую архитектуру дымоходной трубы, но он может быть встроен в цикл во внешнем классическом контексте.

Фрагмент кода, созданного в QCL (дискретное преобразование Фурье):

Дискретное преобразование Фурье является решающим шагом в алгоритме факторизации Шора. В алгоритме Шора число, подлежащее факторизации, рассматривается как волнообразный, периодический сигнал. Если N имеет коэффициенты u и v, то N состоит из u повторений v или v повторений u. Алгоритм Шора использует квантовый параллелизм для поиска периода таких повторений, хотя процесс не такой простой и прямой, как может показаться в примере выше.

Quipper

Язык был создан коллективом авторов под руководством Питера Селингера. Quipper предназначен для тех же задач программирования, что и QCL, но имеет другую структуру и внешний вид. Язык реализован как расширение Haskell, которое использует функциональный, а не императивный способ выражения.

Рассмотрим классическую квантовую телепортацию. Она включает в себя две стороны — Алису и Боба. Целью Алисы является телепортация кубита q к Бобу. У Алисы и Боба должен быть доступ к кубитам из запутанной пары (a, b). Мы можем думать о роли Алисы в терминах функции, которая вводит два кубита q и a. На выходе функции будет пара классических бит, созданных Алисой:

А вот интересный пример возведения в 17 степень, путем возведения x в 16 степень встроенной процедурой возведения в квадрат и перемножением x и x^16:

Система Quipper — это компилятор, а не интерпретатор; он переводит полную программу за один раз, а не выполняет инструкции друг за другом. Выход компилятора состоит из квантовых схем: сетей взаимосвязанных, обратимых логических вентилей. Схема может иметь форму электрической схемы, но также представляет собой последовательность инструкций, готовых к выполнению с помощью подходящего квантового оборудования или симулятора.

Quipper, как и QCL, автоматически генерирует схемы из высокоуровневых исходных смысловых конструкций.

Другие подходы

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать
Разноцветные квадраты говорят пяти квантовым битам IBM, что нужно делать. Перетаскиванием вы можете создавать свои собственные квантовые вычисления

Проект IBM Quantum Experience предоставляет возможность каждому запустить экспериментальную программу на реальном квантовом компьютере. Работа с языком программирования IBM похожа на процесс написания музыки с помощью приложения. Программист может просто перетащить квантовые объекты в определенную область, чтобы написать программу.

Quantum Computing Playground — эксперимент WebGL Chrome, позволяющий смоделировать работу с квантовым компьютером в окошке браузера. Имеется собственный язык сценариев Qscript с функциями отладки и 3D-квантовой визуализации. Квантовая вычислительная площадка может эффективно имитировать квантовые регистры до 22 кубитов.

Python QISKit SDK включает в себя несколько инструментов, которые инженеры IBM Q предоставили для иллюстрации целей квантового программирования. В частности, SDK показывает, как вы можете выполнить несколько заданий для сложных экспериментов. Как ясно из названия, QISKit позволяет разработчикам исследовать квантовый компьютер с помощью Python.

Qbsolv — open source проект для работы с кубитами квантового процессора D-Wave (подходит только для компьютеров этой компании).

Языков квантового программирования (и симуляторов) уже десятки, но все они работают на виртуальной машине. Вероятно, IBM Q — это единственный проект, который предлагает доступ к реальному квантовому компьютеру. Однако для того, чтобы начать заниматься «квантовым программированием», вовсе не обязательно иметь доступ к реальному передовому устройству. Уже сейчас можно не только изучать работу перспективных квантовых алгоритмов, но и создавать работающие приложения, например игры. Но это уже совсем другая история.

Источник

Программирование на квантовых компьютерах: какой язык учить?

Jun 30 · 4 min read

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Прямо сейчас в компьютерном мире происходит что-то удивительное. Если судить по последним разработкам, становится ясно, что мы уже находимся на пороге новой эры квантовых вычислений. Многочисленные проекции свидетельствуют о том, что мы реализуем повсеместное и полноценное использование квантовых компьютеров в течение примерно десяти лет.

А теперь хорошие новости. Квантовые компьютеры могут в огромной степени превосходить классические компьютеры. Мы можем только догадываться о том, какие невероятные изменения они принесут. Однако главная проблема заключается в том, что квантовые компьютеры работают по принципам, отличным от классических.

В сердце квантовы х вычислений лежит квантовая суперпозиция — странный принцип, согласно которому частицы существуют в двух разных состояниях в одно и то же время. Квантовые компьютеры используют суперпозицию вместо битов, они используют кубиты. Бит — это обычно 0 или 1, а кубит может быть 0, 1 или и 0, и 1 одновременно. Взаимодействуют также другие принципы вроде запутанности или интерференции, которые дают квантовым компьютерам значительное преимущество.

Это существенное отклонение от конвенциональных методов вычислений означает, что современным программистам придется ускориться, чтобы преуспеть в квантовой реальности. На данный момент доступно не очень много учебных материалов по квантовому программированию. Большинство людей в этой отрасли задаются вопросов, на каких языках стоит сконцентрироваться, чтобы иметь преимущество в квантовую эпоху.

Другой сложностью является то, что только у некоторых компаний на данный момент есть квантовое оборудование. Однако системы облачных вычислений сделали возможным начать обучение квантовому программированию для кого угодно с подходящим компьютером. И угадайте, что? Это абсолютно бесплатно. Google, Microsoft, IBM и D-wave — все предлагают доступ к квантовому программированию без оплаты. Это бесценная возможность для любого желающего войти в новую эру.

Проще всего работать с платформой IBM. Можно начать с малого — запуска квантового компьютера в короткий промежуток времени.

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

Python

Python остается номером один: простой в использовании, доступный, универсальный язык подойдет каждому, кто интересуется программированием. Даже люди, плохо знакомые с написанием кода, могут с ним сдружиться.

К нашему счастью, многие программные пакеты написанные для симуляции квантовых компьютеров или связи с ними устроены так, чтобы их можно было использовать с Python. Таким образом, понимание основ языка будет чрезвычайно полезно для квантового программирования.

Таким образом, для тех, кто хочет изучать квантовое программирование, Python — хороший способ начать. Из-за его популярности уже существует множество обучающих ресурсов. Python удобен для новичков, что делает его подходящим языком для понимания основных концепций информатики.

Qiskit

Qiskit — это IBM’s комплект разработки программного обеспечения с открытым исходным кодом (SDK) для работы с квантовыми компьютерами.

Qiskit упрощает разработку квантовых приложений, предлагая ресурсы, необходимые для взаимодействия с квантовыми системами и симуляторами. Qiskit подходит для конечных пользователей без опыта в квантовой разработке. С четырьмя пакетами Qiskit — Aqua, Terra, Ignis, и Aer — вы можете работать как с простыми, так и со сложными алгоритмами.

Если вы рассматриваете Qiskit, то доступны два варианта: можно либо запустить его локально, либо в облаке без установки какого-либо ПО, используя Компьютерную лабораторию IBM.

Cirq — это основанная на Python библиотека программного обеспечения Google для написания, управления и оптимизации квантовых схем, а затем — их запуска на квантовых системах или симуляторах.

По состоянию на начало 2021 года Cirq работает над предложением доступа к одному из реальных квантовых компьютеров Google. Между тем, все еще можно создавать алгоритмы и схемы и тестировать их на квантовом симуляторе.

Google предлагает различные руководства, которые помогают новичкам перейти от нулевого к экспертному уровню квантовой симуляции с использованием Cirq.

Ocean

ПО Ocean — это набор инструментов, предоставляемых D-Wave для решения сложных задач с помощью квантовых компьютеров. Программное обеспечение выполняет вычисления, необходимые для преобразования случайных задач в форму, которую может решить квантовый компьютер.

Важные обучающие ресурсы

Если вы хотите начать путешествие в мир квантовых вычислений, вот несколько ресурсов, которые могут пригодиться:

1. Документация для Forest и pyQuil

Этот обучающий гайд содержит руководства к SDK, включая pyQuil, компилятор Rigetti Quil и квантовую виртуальную машину.

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

2. Документация для Ocean

Документация для Ocean знакомит обучающихся с базовыми концепциями установки и пользования инструментами Ocean простым и понятным способом. SDK включает многочисленные пакеты, полезные для квантового программирования.

3. Полное руководство пользователя IBM Q

Полное руководство пользователя IBM Q позволяет создавать квантовые модели и приложения с помощью квантовой лаборатории IBM, интерфейса Jupyter, оптимизированного для Qiskit.

4. Заметки Джона Прескилла о квантовых вычислениях

Этот ресурс наиболее подробный, если речь идет о презентации концепций квантовых вычислений. Он знакомит обучающихся с физикой, лежащей в основе удивительных квантовых явлений перед тем, как углубиться в основы квантовых вычислительных моделей.

Это обязательно к прочтению для всех тех, кто хочет получить глубокие знания о квантовой программировании.

5. Туториалы Qiskit

В этом ресурсе содержится коллекция руководств Jupyter для тех, кто хочет использовать Qiskit для написания программ для квантового компьютера и их выполнения на онлайновых квантовых симуляторах. Он стремительно растет и приветствует вклад от онлайн-сообщества для улучшения качества ресурса.

Подождите, почему вы хотите изучать квантовое программирование?

Забавно, как быстро нас захватило безумие квантовых вычислений, хотя никто из нас еще даже не представляет, что квантовые компьютеры могут сделать или сделают для нас. Но в этом и заключается все веселье — обещание неограниченного потенциала, возможностей и перспектив.

С чем мы все можем согласиться — так это с тем, что знание о квантовых вычислениях даст преимущество первопроходца, когда этот вид вычислений приобретет масштабы. Так что не сидите на месте! Пользуйтесь преимуществом настоящего, чтобы насладиться изучением технологий будущего.

Источник

Учимся квантовому программированию с помощью примеров. Доклад Яндекса

Сегодня любой желающий может воспользоваться методами квантового программирования, написать простой код на Python и запустить его на реальном квантовом вычислителе. Ришат Ибрагимов rishat_ibrahimov разобрал основы квантовых вычислений на примерах с кодом, показал, как запускать программы на локальном симуляторе и удаленном квантовом компьютере.

— Всем привет, меня зовут Ришат. Я почти три года работаю над качеством поиска Яндекса. Но поговорить сегодня хочу не о работе, а о том, чем я занимаюсь в свободное время. Занимаюсь я квантовой информатикой, а на самом деле — самыми разными моделями вычислений, в том числе квантовыми.

Квантовая информатика — это сейчас достаточно интересная область. Туда много сил вкладывается, много всего сделано. В докладе я постараюсь заинтересовать кого-то из вас. Может быть, среди вас есть крутой ML-инженер, который захочет заниматься квантовым машинным обучением, или просто сильный алгоритмист, который сможет вложить свои силы в это направление. Будет здорово, потому что будущее скоро наступит.

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

От вас я жду, что вы совсем немножко помните алгебру, помните, что такое вектор и как умножить вектор на матрицу.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Как будет построен мой доклад? Сначала мы поговорим немного об истории, о том, откуда все взялось, чтобы уверенно смотреть в будущее. Потом посмотрим, где это можно применять, какое сейчас состояние, можно ли прямо сейчас что-то делать руками. Мы напишем первую программу на Python, которую можно будет запустить на квантовом компьютере. И потом в качестве бонуса я вам покажу несколько примеров алгоритмов, в которых квантовые вычисления помогают добиться несравненно лучшей производительности по сравнению с классическими.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

С чего все началось? Вот с этого молодого человека. Это Алан Тьюринг, его можно смело назвать отцом информатики или компьютерных наук, того, за счет чего мы все сейчас живем, зарабатываем деньги. В 30-х Тьюринг придумал модель вычислений, которую мы бы сейчас назвали программируемый компьютер. А вот этого человека кто-нибудь узнает?

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Уже сложнее. Его фамилия очень часто идет рядом с фамилией Тьюринга. Это Алонзо Чёрч, он тоже занимался проблемами вычислимости, и даже немножко раньше Тьюринга придумывал свои модели вычислений. Но более популярными стали работы Тьюринга. И вообще, Чёрч в какой-то момент был научным руководителем Тьюринга. Взятые вместе, их фамилии обычно связывают вот с этим тезисом.

Тезис Чёрча-Тьюринга говорит: любой процесс может быть эффективно смоделирован на машине Тьюринга. Это конец 30-х – начало 40-х, и все очень хорошо. Примерно 30 лет всё очень хорошо, пока не появились вот эти два человека. Кто-нибудь их знает?

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Это уже 70-е, совсем близко к современности. Их фамилии часто встречаются в курсах криптографии. Это Роберт Соловей и Фолькер Штрассен. Эти два человека знамениты тем, что они придумали вероятностный алгоритм проверки числа на простоту, тест Соловея-Штрассена.

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

Пришлось сделать быстрофикс и сказать, что любой процесс можно смоделировать на вероятностной машине Тьюринга. Это уже не очень круто, наверняка у кого-то из вас в груди тоже защемило. Вы подумали: как же так? Сейчас мы говорим «вероятностный», через десять лет откроют еще что-нибудь, придется еще что-нибудь править. Это не очень приятно. Но мы с вами, конечно, не одни такие.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Был еще один молодой человек — Дэвид Дойч. И он тоже задавался вопросом: как же так? Как же жить? Он физик по образованию, всю жизнь посвятил физике. И решил заняться этой проблемой именно с точки зрения физики. Он сказал: давайте попробуем обосновать, получить какой-нибудь такой, чтобы сама природа нам говорила о том, что это именно так. А природа уже тогда говорила (и мы до сих пор считаем), что она квантово-механическая. Поэтому мы начали искать ответ в квантовой механике. И именно с Дэвида Дойча, с его первых алгоритмов, началась квантовая информатика.

Это такой небольшой экскурс в историю, чтобы вы понимали: это взялось не на ровном месте. В этой облассте есть реальные проблемы, теоретические, конечно, которые мучают людей, с которых все началось.

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

Например, у нас в институте есть целое отделение, которое занимается квантовой информатикой. Там есть и математики, и физики. Физики сейчас очень плотно занимаются проблемой долгосрочного хранения квантовой информации. Это очень похоже на наши жесткие диски, но хочется, чтобы там хранилась квантовая информация.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Какие же могут быть применения у всего этого хозяйства? Конечно, первое, что приходит в голову, — это моделирование процессов, потому что мир устроен квантово-механически. И если мы будем использовать квантовый компьютер, чтобы моделировать процессы, химические реакции или еще что-нибудь, это будет стоить намного дешевле с точки зрения вычислений.

Второй и очень большой раздел, которому сейчас посвящено много сил, — квантовое машинное обучение. Есть очень большая надежда, что квантовые вычисления помогут ускорить сами процессы обучения и усовершенствовать алгоритмы. Тут очень много работы. Сейчас, например, наша квантовая группа работает вместе с одним ученым из Китая. Он очень сильный ML-инженер, а мы немного с квантовым уклоном, пытаемся что-то вместе придумать.

Третья штука несколько месяцев назад была немного хайповая. Сейчас, может, хайп уже спал, но есть даже целый квантовый блокчейн. Его придумал мой хороший друг и большой товарищ. Это я так, немного с гордостью говорю.

Но квантового компьютера у нас нет. К сожалению, мы не можем прийти домой и так же просто, как мы программируем на Python, запустить программы.

Что делать? О том, что делать, я думал еще на третьем курсе, когда писал свою первую курсовую работу. Я писал эмулятор квантовых вычислений. Конечно, все пишут эмуляторы и все ими как-то пользуются. На четвертом курсе я писал эмулятор, который имитирует помехи, шумы и всякое прочее. А потом мне надоело.

Я попробовал поискать в поисковике и понял, что эмуляторов много. Здесь несколько ссылок, они достаточно простые и интересные:

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Он работает в двух режимах. Первый — как и все, обычный локальный эмулятор. Второй — запуск вашей программы на настоящем квантовом компьютере IBM Q, который выглядит примерно так.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Сейчас это целая бочка, в которой поддерживается экстремально низкая температура — порядка трех милликельвин. Это очень холодно. И IBM предоставляет возможность с помощью облачных технологий подключиться и запустить ваш код прямо на этой машине.

Конечно, он специальным образом компилирует туда команды и все прочее. Как это вообще работает? Для общего доступа есть несколько инсталляций такого компьютера. Один из них 5-кубитный, есть 15-кубитный, 16-кубитный, нам доступны даже 20 кубит. Это примерно как 20 бит обычной, классической информации, но уже что-то.

Тут наверняка многие из вас думают: все, хочу! Но придется немного вспомнить математику. Немного алгебры, но совсем чуть-чуть, как я и обещал.

Чтобы начать программировать на квантовом компьютере, нужно понять, что вообще такое кубит. Это просто вектор в двумерном векторном пространстве. Но раз уж мы говорим о векторных пространствах, в них есть базис.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Базис выглядит примерно так. Есть два векторных столбца и единичный базис, стандартный, в курсах алгебры его так обозначают:

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

. И есть стандартное обозначение в нотации Дирака, вот в таких угловых скобочках.

То есть, чтобы вы не путались, сокращать я дальше буду так.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

И поскольку это вектор, его состояние можно записать так. Кубит q — это суперпозиция двух базисных векторов, где α и β — комплексные чиселки, но не совсем любые, а чтобы сумма модулей их квадратов была равна единице.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Если эту штуку попробовать нарисовать, мы получим, что кубит — это вектор на трехмерной сфере. В одном кубите может храниться бесконечно много информации, ведь это просто вектор, которого бесконечно много.

Можно не обращать внимания на картинку, это просто способ визуализации для привлечения внимания.

Про кубиты поговорили. Самое главное, что кубит — это вектор. Вектор в комплексном векторном пространстве. Что с ним можно делать?

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Первое, что мы привыкли делать, — попробовать посчитать значение нашей переменной, например, в Python. Мы хотим прочитать, в каком состоянии находится кубит. Но мы никогда не узнаем точные значение α и β.

Если мы попробуем посмотреть на кубит, прочитать, то мы получим или нолик, или единичку с соответствующими вероятностями. Вероятности –—это просто проекции на соответствующие базисные вектора.

Второе, что мы можем делать, — например, склонировать кубит. Мы такое называем присваиванием одной переменной другой. В квантовом мире так делать нельзя, к сожалению.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Операции присваивания нет, и это очень связано с тем, о чем я говорил только что: мы даже не сможем посмотреть точное значение. Это фундаментальный результат. Доказывается он очень просто: буквально две строчки сравнений, от противного.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Есть кубит, который мы не можем прочитать, не можем склонировать. Что можно вообще делать?

Кубит — это вектор. Вектор можно взять и покрутить по сфере вокруг. Чтобы покрутить, можно придумать матрицу, которая это вращение делает. Все операции над кубитами — это матрицы. Они называются унитарными.

Унитарные — чтобы выполнялось такое условие, оно тут записано хитрым образом. Этот значок означает транспонированную и комплексно-сопряженную матричку. Свойство очень важное, оно означает, что для любой операции есть обратная. То есть как бы мы ни покрутили вектор, мы всегда можем его вернуть в прежнее положение. Всегда существует обратная операция.

Посмотрим, какие операции могут быть. То, к чему мы привыкли в классическом случае. Есть нолик, можно превратить его в единичку и наоборот.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Это оператор отрицания, он очень простой. Записывается вот такой матричкой. Если мы попробуем перемножить, получим ровно то, что хотим.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

У меня тут даже нарисовано. Ничего сложного. У оператора отрицания есть стандартная запись, оператор X. Если подумать, это просто вращение вокруг одной из осей. И есть операторы Y и Z, вращение вокруг других осей, но это сейчас не так важно.

И мы уже можем запустить нашу первую программу на квантовом компьютере, которая будет делать отрицание кубита.

Но мы в квантовой информатике, конечно, очень редко пишем на Python. Чаще мы пользуемся схемами.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Схема обычно выглядит так. Горизонтальные линии — это просто значения кубит. У меня тут их нарисовано пять. А в блоке — операция, которую мы будем делать.

Первый блок. Здесь нарисован измерительный прибор. Это значит, что мы просто хотим измерить, что же находится в первом кубите.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Если мы эту штуку запустим, то получим, что с вероятностью единичка у нас там стоит нолик, потому что они инициализированы в таком состоянии и мы больше ничего с ними не делали.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Такую штуку можно написать на Python с помощью библиотечки qiskit. Давайте по строчкам посмотрим, что здесь происходит. Сначала мы заводим квантовый регистр. Я здесь завожу его из одного кубита. И классический регистр. Классический регистр нужен, чтобы куда-то записать результат измерения. То есть я с квантовым регистром делаю преобразования, результат получаю классический — нолик или единичку. И потом создаю свою схему, в которой есть этот квантовый классический кубит. Я просто говорю: давайте измерим кубит q в C. Запустим все это дело, и все будет хорошо. Но внимательный читатель увидит: здесь написано, что у меня backend — это локальный эмулятор.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

То же самое можно сделать и с IBM Q, но здесь чуть больше кода. Здесь всякая лапша по поводу того, чтобы выбрать девайс, который нам побыстрее ответит, токены какие-то передать, вот это все. Но ничего хитрого нет.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

То же самое можно сделать с оператором отрицания. Это оператор X, как я сказал. На схеме выглядит точно также, запустим то же самое.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Теперь с вероятностью единичка получим единичку, как и планировали. Никакой магии.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Код такой же. Просто здесь я еще применяю оператор X к кубиту q.

Хорошо, попробуем пойти дальше.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Здесь есть очень хитрая штука. Попробуем получить вот такое состояние. Это состояние очень интересное. Мы получим такую суперпозицию. Если мы попробуем ее измерить, то с вероятностью ½ получим или нолик, или единичку. То есть это будет такая равномерная суперпозиция, можем получить что угодно.

Можно провести аналогию, что это такое квантовое подбрасывание монетки. Мы скажем, что окей, с вероятностью ½ получим нолик и единичку. Матричка выглядит вот так.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Легко проверить, но мы, конечно, не будем. Нарисуем схему. Оператор H в честь Адамара.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Замерим и получим примерно то, что ожидаем. Примерно с вероятностью ½, нолик и единичка. Чуть больше, чуть меньше, но так уж получается.

Вот код на Python, просто чтобы был, мы же на конференции про Python.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Есть такая суперпозиция. К ней применяем оператор Адамара и замеряем.

Но монетку можно бросить два раза, к этому мы все привыкли. Если бросить монетку два раза, ничего не поменяется. Давайте попробуем это сделать в квантовом случае.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Два раза подряд применим оператора Адамара и всегда получим нолик.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

То есть если квантовую монетку бросить два раза, то всегда получится нолик, потому что оператор Адамара обратный сам к себе. Если вы умножите самого на себя, всегда получите единичку. Вот такая штука.

Итак, с одним кубитом можно что-то делать. Можно крутить, вертеть и измерять. Давайте попробуем добавить побольше кубит. Что мы привыкли делать в классическом мире? Брать и выполнять простые логические операции, «или» и «и».

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

В квантовом мире так делать нельзя, потому что они не совсем обратимые. То есть, получая ноль в операции «и», мы никогда не сможем узнать, какие были начальные значения.

А в квантовом мире, как я говорил, операция — это унитарные матрицы, которые всегда обратимы. Как тогда вообще программировать? Все, к чему мы привыкли, рушится. Но появляется новый герой, это оператор так называемого контролируемого отрицания.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Если бы мы писали на Python, это выглядело бы так. Если в первом кубите единичка, давайте инвертировать второй кубит. Это не матричка, это то, как выглядит оператор. Но в принципе то, что я сказал, тут и написано. Там, где в первом кубите единичка, второй инвертируется.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Матричка уже четыре на четыре. Для двух кубит она выглядит так. Оставлю задачу со звездочкой, чтобы перемножить и посмотреть, что это правда так.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Эту штуку можно даже запрограммировать. Никакого rocket science. Нужно просто взять, создать схему с двумя кубитами, с двумя классическими, и сделать, только не CNOT, а CX, контролируемое отрицание.

Отрицание было оператором X, поэтому в принципе все логично. И можно нарисовать схему. Схема такая.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

То есть контролируемое отрицание — это такой плюсик на кубите, который мы хотим менять. И точечка, которая является контрольной. Здесь, если кубит в единичке, то второй будем менять.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Тут я специально первый сначала инвертирую, чтобы он был единичкой, и потом замеряю оба и получаю результат |11⟩. Все как мы и предполагали.

Но теперь самое время использовать все наши знания вместе.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Возьмем и все три или четыре оператора, которые мы знаем, залепим в одну схему. То есть мы к первому оператору применим оператор Адамара. Второй инвертируем, потом все вместе, сделаем контролируемое отрицание и измерим.

Давайте не будем пока запускать, а попробуем угадать, что же получится.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Если мы к первому кубиту применяем оператора Адамара, а ко второму отрицание, то получим такую суперпозицию. Я не хочу сейчас тратить время на проверку, это можно легко перемножить. Но позиция очень интересная. Во-первых, она очень похожа на равномерную, а, во-вторых, теперь это состояние называется запутанным, если еще взять контролируемое отрицание.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Состояние запутанное. А все почему? Попробуем произвести измерение. Смотрите, если я измеряю первый кубит и он у меня в состоянии ноль, я тогда могу сказать, что второй кубит обязательно в состоянии один.

То есть если я сделаю такое преобразование своими кубитами, один кубит отдам своему другу, он улетит в Нью-Йорк, а я второй кубит измерю у себя, я буду точно знать, в каком состоянии его кубит. Это называется эффектом квантовой запутанности или квантовой связанности. И это основной механизм, с помощью которого квантовые вычисления работают. Он изменится, они связаны очень жестко, и во время измерения мы можем получить только |00⟩ или |11⟩.

По этому поводу есть очень интересная иллюстрация в пользу одного ученого, австрийского, по-моему, который был очень рассеянным (апдейт).

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Рассеянность заключалась в том, что он все время носил разные носки. И коллеги над ним шутили: если он заходит в комнату одной ногой и мы видим, что носок розовый, то можем точно сказать, что второй носок не розовый. Такие дела.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Если мы эту штуку запустим, получим ровно то, что хотим. Здесь уже совсем смешно получилось. Вероятность ровно 0,5, но это совпадение.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Если мы будем честно запускать на квантовом компьютере, получим вот такую картину. Вроде бы мы говорим: никогда не может получиться состояние |00⟩ и никогда не может получиться состояние |11⟩. Но оно все-таки получается: текущее состояние техники таково, что там есть шумы, которые не всегда можно легко подавить. И с этим борются.

Но если вы вспомните классическую информатику, там то же самое: коды, исправляющие ошибки и все такое. Просто кубит пока слишком мало, чтобы тратить дополнительные биты на исправление ошибок.

Теперь, как я и обещал, несколько примеров алгоритмов. Но это будут просто голословные примеры без разборов алгоритмов, чтобы вы посмотрели, подумали, заинтересовались.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Первый алгоритм как раз связан с Дойчем, о котором мы говорили вначале. Это алгоритм Дойча-Йожи. И он делает следующее. Представьте, что у нас есть булева функция от n переменных. И мы точно знаем, что она или константная, или сбалансированная. Сбалансированная — значит, ровно на половине аргументов она равна нулю, а на другой половине — единичке. Попробуем классически проверить, константна она или нет.

Для этого нам нужно проверить хотя бы половину всех возможных вариантов: 2 n–1 +1 вариант. Квантовый алгоритм позволяет это сделать за n обращений к самой функции, за n вычислений самой функции. Это экспоненциально меньшее количество обращений.

Второй пример, наверное, хорошо всем известен, из-за него говорят, что квантовые компьютеры сломают всю криптографию: мы можем квантово очень быстро факторизовать числа.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Здесь приведены оценки сложности, и есть просто фантастический пример. В 2011 году на реальном компьютере факторизовали число 15. Потребовалось семь кубит.

Квантовое программирование с чего начать. Смотреть фото Квантовое программирование с чего начать. Смотреть картинку Квантовое программирование с чего начать. Картинка про Квантовое программирование с чего начать. Фото Квантовое программирование с чего начать

Но не все так страшно. На случай, если квантовые компьютеры достигнут уровня, при котором можно ломать RSA, уже есть постквантовая криптография. Она построена на обучении с ошибками. Это когда в задачи вносится небольшая погрешность так, чтобы найти ответ было очень сложно. Обычно это какие-то уравнения или система уравнений. Вот пример алгоритма. Кто захочет, может почитать подробнее.

Самое интересное: на этой штуке основан алгоритм New Hope, новая надежда всея человечества. В 2016 году в Chrome была включена поддержка этого алгоритма. Здесь есть ссылочка на блог. Это не я придумал, все на самом деле есть. Будущее уже здесь.

В конце немножко ссылок:

Если вы попробуете вбить в своем любимом поисковике, то уже сегодня можете найти вакансии для квантового программиста. Конечно, там больше исследований, но тем не менее. Спасибо.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *