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

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

Язык программирования для квантового компьютера. Смотреть фото Язык программирования для квантового компьютера. Смотреть картинку Язык программирования для квантового компьютера. Картинка про Язык программирования для квантового компьютера. Фото Язык программирования для квантового компьютера

В этой статье мы разберём какой есть язык программирования для квантового компьютера, да и в целом какие есть.

Также прочитайте статью «Что такое метапрограммирование», думаю вам будет очень интересно.

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

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

Q # : Используется для моделирования квантовых алгоритмов, разработанных Microsoft. Бета-версия была выпущена 11 декабря 2017 г. (Microsoft Quantum Development Kit Preview1). Этот язык включен в Visual Studio после загрузки пакета Microsoft Quantum Development Kit.

Квантовые суперпозиции: библиотека Perl, которая позволяет программистам использовать переменные, которые могут хранить несколько значений одновременно. Версия 1.03 была выпущена в 2000 году. Текущая версия (2.02) была выпущена в апреле 2003 года.

Квантовая запутанность: библиотека Perl, выпущенная в 2002 году, которая позволяет пользователям помещать переменные в суперпозицию состояний, взаимодействовать друг с другом и наблюдать за ними.

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

Quantum Fog: приложение Macintosh для моделирования физических ситуаций, демонстрирующих квантовое поведение. Это инструмент для исследования и графического обсуждения проблем квантового измерения в терминах байесовских квантовых сетей. Имитирует квантовый компьютер общего назначения. Он был выпущен в 1997 году, а текущая версия — 2.0, выпущенная в 2006 году.

QDD: библиотека C ++, которая предоставляет относительно интуитивно понятный набор конструкций квантовых вычислений в контексте среды программирования C ++. Эмуляция квантового исчисления основана на представлении BDD (Binary Decision Diagram) квантовых состояний (в отличие от QCL, который использует представление комплексными числами). Включает реализацию алгоритма Шора. Версия 0.2 была выпущена в сентябре 1999 года, версия 0.3 — в феврале 2003 года.

Квантовое лямбда-исчисление (qlambda): функциональный язык на основе схем для выражения и моделирования квантовых алгоритмов.

Вывод:

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

Источник

Что нужно знать, чтобы начать заниматься квантовыми вычислениями

Язык программирования для квантового компьютера. Смотреть фото Язык программирования для квантового компьютера. Смотреть картинку Язык программирования для квантового компьютера. Картинка про Язык программирования для квантового компьютера. Фото Язык программирования для квантового компьютера

Несмотря на относительно старую технологию, только в последнее время квантовые вычисления привлекли к себе много внимания как индустрии, так и СМИ. Квантовые вычисления впервые появились ещё в 1980-х годах. Но есть несколько причин, по которым популярность этой технологии растёт именно сейчас.

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

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

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

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

1. Я недостаточно умён, чтобы присоединиться.

2. Это так сложно и нужно много знаний из математики, в которой я не разбираюсь/которую не люблю.

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

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

Что же нужно, чтобы начать работу с квантовыми вычислениями

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

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

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

Программирование

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

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

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

Математика

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

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

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

Ещё один раздел математики, связанный с квантовыми вычислениями, — это основы теории вероятностей.

Всё. Линейная алгебра и теория вероятностей. Два раздела, связанные со всеми подразделами науки о данных и большинством современных технических областей.

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

Физика / механика

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

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

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

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

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

Любопытство

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

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

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

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

В заключение

Квантовые вычисления ничем не отличаются от любых других технических сфер. У них плохая репутация, просто потому что однажды слово «квантовый» приравняли к слову «сложный». Как только кто-то упоминает слово «квантовый», первое, что приходит вам в голову и приходило мне до недавнего времени: «О, это наверно очень сложно!». Поэтому я бы хотел сделать акцент на двух вещах.

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

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

Вы достаточно умны, чтобы заниматься любой сферой, а не только квантовой. Поэтому не позволяйте слову «квантовый» запугать вас или помешать вам погрузиться в этот таинственный мир. Я здесь, чтобы сказать вам, что сейчас для этого лучшее время.

Источник

Учимся программировать квантовый компьютер на основе игры «Морской бой»

Язык программирования для квантового компьютера. Смотреть фото Язык программирования для квантового компьютера. Смотреть картинку Язык программирования для квантового компьютера. Картинка про Язык программирования для квантового компьютера. Фото Язык программирования для квантового компьютера

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

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

На начальном этапе программирования квантовых компьютеров вам ничего сверхъестественного делать не нужно будет. Ведь можно начать своё путешествие в мир квантового программирования с того же, с чего начинается и стандартное программирование — с создания игр.

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

Примечание Обратите внимание, что код на Python, приведённый в статье, далёк от идеала и служит лишь для объяснения принципов работы квантового компьютера.

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

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

Что такое квантовый компьютер?

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

В основе работы обычного компьютера лежат биты — переменные, имеющие только два значения: 0 и 1. Хотя, в контексте булевой алгебры их также можно называть «true» и «false». Неважно, как мы их называем. Важно лишь то, что существует два состояния.

С помощью битов можно выполнить простые битовые операции, такие как побитовое отрицание (NOT), побитовое «И» (AND) и побитовое «ИЛИ» (OR). Они являются основой вычислений. С битами можно сделать всё что угодно. Любая более сложная переменная, чем бит ( int или float ) — это просто набор из множества битов. Любая более сложная операция, чем побитовое «И» или побитовое отрицание (NOT) — это просто несколько таких операций, соединённых вместе. Именно так и работает обычный компьютер на самом базовом уровне.

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

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

Язык программирования для квантового компьютера. Смотреть фото Язык программирования для квантового компьютера. Смотреть картинку Язык программирования для квантового компьютера. Картинка про Язык программирования для квантового компьютера. Фото Язык программирования для квантового компьютера

Такой ход мысли выставляет кубиты чем-то похожим на непрерывные переменные. Можно представить любую точку на поверхности сферы (например, точку ψ в изображении), используя полярные координаты с углами ( θ и φ ). В принципе простительно полагать, что кубиты — плавающие значения (изменяют своё значение). В некотором смысле они ими и являются. Но с точки зрения абсолютной точности это не так.

Важной отличительной чертой кубита является невозможность извлечения из него недвоичной информации. Законы физики по своей природе нам не позволяют узнать, что именно кубиты делают. Не получится спросить у кубита точные детали о положении его суперпозиции. Можно только заставить выбирать его между двумя противоположными точками на сфере (вроде 0 и 1). Если это что-то, что не является ни нулём, ни единицей, то кубиту просто нужно будет случайным образом решить, что выбрать.

Кубит имеет некоторые свойства непрерывной и дискретной переменных, но не является ни той, ни другой. Кубит — квантовая переменная.

Что предстоит делать с кубитами?

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

Можно использовать кубит для каждого корабля, чтобы симулировать эти действия на квантовом компьютере. Ноль может означать невредимый корабль, а единица — полностью уничтоженный корабль. Состояния суперпозиции могут служить для отображения степени повреждений корабля. Корабль, уничтожаемый с одного выстрела, довольно просто симулировать. Можно его инициализировать с нулём, а затем применить побитовое отрицание (NOT), когда он будет уничтожен.

Давайте посмотрим, как реализовать этот простой процесс на квантовом компьютере. Мы не будем обращать внимание на какие-либо другие корабли на этом этапе.

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

Теперь появился ещё один способ представления побитового отрицания при работе с кубитом: можно выполнить половинное побитовое отрицание дважды.

Аналогичные действия можно сделать с 1/3 побитового отрицания, выполнив его трижды и так далее.

Последняя строка в файле на QASM выглядит так:

Если ничего не было сделано в период между инициализацией и измерением, то результат всегда должен быть таким: c[0] = 0

Если было выполнено побитовое отрицание, то результат всегда должен быть таким: c[0]=1

Эта вероятностная природа придаёт квантовым вычислениям некую случайность. Дополнительная хаотичность также присутствует в современных устройствах из-за шумов. Хотя это и происходит на довольно низком уровне, не стоит об этом забывать. Именно из-за шума иногда получается 1 на выходе, вместо 0 и наоборот.

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

Создание игры

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

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

Гибридная природа устройства повлияет на способ написания кода. Использование QASM отлично подходит для программирования квантовой части устройства, а, например, Python — для стандартной, так как многие разработчики знакомы с этим языком программирования.

Это тот способ, который используется в текущей версии API IBM. И именно его мы используем в этой статье. Есть, конечно, другие подходы, например, Project Q.

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

Для запуска программы вам потребуется Jupyter, а также зависимости SDK.

Теперь давайте обратимся к коду.

Прежде всего нужно импортировать всё, что понадобится для запуска кода на IBM Quantum Experience.

Далее следует несколько стандартных импортов и некоторая информация об игре, выводящаяся на экран.

На следующем этапе нужно добавить ещё одну важную переменную: количество запусков. Это нужно для сбора статистики.

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

Теперь нужно перейти к настройке досок, на которых игрок будет выбирать позиции для трёх кораблей. Доступно всего 5 возможных позиций, соответствующих пяти кубитам на чипе IBM ibmqx2. Ниже представлена визуализация сетки.

Получение выбора от игроков в основном осуществляется следующим образом:

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

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

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

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

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

Здесь «gridScript» — то, что мы называем схемой в спецификациях. А gridScript — то, на что мы будем ссылаться при добавлении новых операций. Можно было бы использовать разные имена, но уже поздно.
Чтобы добавить операции над квантовыми и классическими битами, нужно определить, как мы будем ссылаться на них в коде.

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

Но при помощи замены frac и position на числа. Это можно сделать следующим образом на Python:

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

После завершения бомбардировки наступает время просмотра результатов. Для этого нужно добавить команды измерения. Каждый кубит в регистре измеряется и результаты копируются в соответствующий стандартный бит. Так это реализуется:

Это создаёт строки кода на QASM:

Здесь device и shots были определены ранее, когда мы попросили игрока выбрать устройство. Прогресс будет обновляться каждую секунду простоя, а затем перестанет обновляться после таймаута.

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

После выполнения задания можно извлечь данные:

Мы интерпретируем дробь в виде процентного урона для корабля для тех моментов, когда кубит измерялся единицей. Нельзя ожидать 100%-го урона из-за влияния шумов (или погоды, если перенестись в нашу вселенную). Поэтому считаем, что урон превышает 95%, так как корабль утонул.
Давайте рассмотрим несколько примеров на выходе из квантового процесса. Предположим, что один игрок поставил свой третий корабль на позицию 2. Затем оппонент его бомбит. Результат будет примерно таким:

Здесь во время 290 запусков из 1024 было найдено 1 в позиции 2, показывая, что корабль действительно был повреждён.

Другой пример: один игрок поместил свой корабль на позицию 1, а второй — на позицию 2. Оппонент бомбил позицию 1 в первом раунде и позицию 2 во втором раунде. Результаты были бы такими:

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

Если произошла ошибка при извлечении файла QASM на квантовом чипе (или симуляторе), то на выходе вы увидите такое сообщение:

В таком случае нам не нужно пытаться обрабатывать результаты. Поэтому было создано условное утверждение, чтобы выйти из этой ситуации, если она произойдёт.

Обработка битовых строк не является чем-то уникальным для квантовых вычислений.
Как только проценты ущерба будут рассчитаны, игроки увидят состояние своих кораблей. Например, если один корабль в позиции 2 был поражён на 50%, это будет выглядеть следующим образом.

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

Вы могли заметить, что бомбардировка третьего корабля игрока даёт урон около 25%, поскольку этот корабль является третьим на пути к уничтожению. Вы, вероятно, ожидали, что урон будет составлять 33%. Но нет, тут дело в тригонометрии. Сейчас не будем на этом останавливаться.

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

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

Источник

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

Язык программирования для квантового компьютера. Смотреть фото Язык программирования для квантового компьютера. Смотреть картинку Язык программирования для квантового компьютера. Картинка про Язык программирования для квантового компьютера. Фото Язык программирования для квантового компьютера
Прототип ядра ионного квантового компьютера. 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 — это единственный проект, который предлагает доступ к реальному квантовому компьютеру. Однако для того, чтобы начать заниматься «квантовым программированием», вовсе не обязательно иметь доступ к реальному передовому устройству. Уже сейчас можно не только изучать работу перспективных квантовых алгоритмов, но и создавать работающие приложения, например игры. Но это уже совсем другая история.

Источник

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

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