Научная статья на тему 'Повышение быстродействия квантового алгоритма Гровера путем применения инверсии вокруг среднего'

Повышение быстродействия квантового алгоритма Гровера путем применения инверсии вокруг среднего Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
434
55
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
квантовый алгоритм Гровера / кубит / оракул / инверсия вокруг среднего / суперпозиция / Python. / Grover's quantum algorithm / qubit / oracle / inversion about the mean / superposition / Python.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — И. О. Маслов, А. О. Бачило, Л. Вчеркесова

В предлагаемой статье произведена реализация алгоритма Гровера на языке программирования Python, с помощью облачного квантового компьютера сервиса Riggeti Forest. Авторами данной статьи рассмотрены инверсия вокруг среднего, которая позволяет решить задачу поиска за время порядка квадратного корня. В свою очередь, это обеспечивает большой потенциал для практического применения квантового алгоритма Гровера. Полученный модифицированный алгоритм Гровера отличается более высокой производительностью и быстродействием при осуществлении поиска.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

SPEED IMPROVEMENT OF QUANTUM GROVER’S ALGORITHM THROUGH THE USE OF INVERSION ABOUT THE MEAN

The article provides the implementation of Grover’s algorithm in the Python programming language, using the Riggeti Forest cloud quantum computer. The authors of this article considered the inversion about the mean, which allows them to solve the search problem quadratically faster than for any classical counterpart. In turn, this provides great potential for the practical application of Grover’s quantum algorithm. The resulting modified Grover’s algorithm is characterized by higher performance and speed in the search.

Текст научной работы на тему «Повышение быстродействия квантового алгоритма Гровера путем применения инверсии вокруг среднего»

УДК 004.056.55

ПОВЫШЕНИЕ БЫСТРОДЕЙСТВИЯ КВАНТОВОГО АЛГОРИТМА ГРОВЕРА ПУТЕМ ПРИМЕНЕНИЯ ИНВЕРСИИ ВОКРУГ СРЕДНЕГО И. О. Маслов, А. О. Бачило, Л. В Черкесова

Донской государственный технический

университет, Ростов-на-Дону, Российская

Федерация

maslik220@gmail .com

a-bachilo@mail .ru

chia2002@inbox.ru

В предлагаемой статье произведена реализация алгоритма Гровера на языке программирования Python, с помощью облачного квантового компьютера сервиса Riggeti Forest. Авторами данной статьи рассмотрены инверсия вокруг среднего, которая позволяет решить задачу поиска за время порядка квадратного корня. В свою очередь, это обеспечивает большой потенциал для практического применения квантового алгоритма Гровера. Полученный

модифицированный алгоритм Гровера отличается более высокой

производительностью и быстродействием при осуществлении поиска.

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

UDC 004.056.55

SPEED IMPROVEMENT OF QUANTUM GROVER'S ALGORITHM THROUGH THE USE OF INVERSION ABOUT THE MEAN I. O. Maslov, A. O. Bachilo, L. V. Cherkesova

Don State Technical University, Rostov-on-Don, Russian Federation

maslik220@gmail.com chia2002@inbox.ru a-bachilo@mail .ru

The article provides the implementation of Grover's algorithm in the Python programming language, using the Riggeti Forest cloud quantum computer. The authors of this article considered the inversion about the mean, which allows them to solve the search problem quadratically faster than for any classical counterpart. In turn, this provides great potential for the practical application of Grover's quantum algorithm. The resulting modified Grover's algorithm is characterized by higher performance and speed in the search.

Key words: Grover's quantum algorithm, qubit, oracle, inversion about the mean, superposition, Python.

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

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

Алгоритм Гровера - алгоритм квантового поиска, время выполнения которого во много раз быстрее, чем у классических. Алгоритм Гровера не предназначен для нахождения элемента в базе данных, его целью является поиск по входам функции, чтобы проверить, возвращает ли функция значение «true» для определенных входных данных. Это полезный метод в случае, если функция неизвестна или чрезвычайно сложна, и мы хотим найти, для каких входных значений функция возвращает истину или дает правильный вектор решения уравнения.

В этой статье мы узнаем, что это такое и как реализовать алгоритм поиска Гровера. Сначала опишем алгоритм Гровера и представим квантовую схему. Затем продолжим реализацию алгоритма на платформах Python и Rigetti Forest.

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

Алгоритм поиска Гровера. По своей сути это задача неструктурированного поиска. Если есть неупорядоченный набор данных («стог сена») и требуется найти в нём какой-то один элемент, удовлетворяющий специфическому требованию (этот элемент один такой — «иголка»), алгоритм Гровера поможет, поскольку альтернативой является классический перебор вариантов. Например, если рассмотреть аналогию с базой данных автомобилистов с именами, упорядоченными по алфавиту (и пусть в ней будет взаимно однозначное соответствие между фамилией и номером автомобиля), то упорядоченным поиском является поиск номера автомобиля по фамилии. А неупорядоченным поиском является обратная задача — поиск фамилии по номеру автомобиля. В данной аналогии оракулом является функция (преобразованная соответствующим образом), которая по фамилии возвращает номер автомобиля. Тогда эта задача сводится к задаче Гровера при помощи кодирования фамилий в бинарное представление, а сама функция возвращает ответ на вопрос «Владеет ли данный автомобилист N автомобилем X?», где N — входной параметр функции, а X — параметр алгоритма, как бы «зашиваемый» внутрь оракула при его построении. Соответственно, этот оракул возвращает значение 1 («да») только единственно для той фамилии, напротив которой в базе данных стоит искомый номер автомобиля.

Представьте, что нам дана функция f ■ {0,1}n ^ {0,1} в виде набора логических операторов «И» и «ИЛИ». Функция возвращает «true» только для одной двоичной строки из нулей и единиц. Кодирование такой функции может быть относительно простым, однако, для выяснения, для какой комбинации нулей и единиц функция возвращает «true», в худшем случае потребуется 2n вызовов функций на классической машине. На квантовом компьютере мы можем выразить f как действительный набор квантовых логических элементов, составляющих оракул (непреложная истина) Uf, и использовать алгоритм поиска Гровера, чтобы найти правильный вход с очень высокой точностью только в V2™ итерациях. Это квадратичное ускорение.

Например, представим некую функцию. В классическом стиле функция выражена:

Затем нам нужно представить функцию $ • {0,1}п ^ {0,1} в виде квантового оракула Щ Это немного сложнее, так как первое предположение |х) = |/(х)) не является унитарной и обратимой операцией, поэтому это не квантовый вход (|х) состоит из двух кубитов, тогда как |/(х))

(1)

только из одного кубита). Однако существует метод построения квантового оракула путем добавления контрольного кубита и его подготовки в состоянии |—) = ^=(|0)-|1), так что действие ^

"/И |-> = (-1)/Сх)М-> (2)

Поворот знака амплитуды в случае Дх) = 1 необходим. В нашем анализе отбросим контрольный кубит и выразим действие квантового оракула как:

^|х> = (-1/(х)|х> (3)

Квантовая схема, представленная ниже:

Рис.1 Схема инверсии вокруг среднего

Одним словом, состояние системы устанавливается в виде суперпозиции всех возможных входных данных, и затем вероятность нахождения искомого входного сигнала увеличивается на каждой итерации алгоритма. В следующем разделе мы проанализируем каждый шаг алгоритма на основе примера на Python с использованием платформы Rigetti Forest. Для начала импортируем все необходимые объекты: import numpy as np from pyquil.quil import Program from pyquil.api import QVMConnection from pyquil.gates import H, I

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

Это простой случай n = 2. SEARCHEDSTRING = "10" N = len(SEARCHEDSTRlNG) oracle = np.zeros(shape=(2 ** N, 2 ** N)) for b in range(2 ** N):

if np.binary_repr(b, N) == SEARCHED STRING:

oracle[b, b] = -1

else:

oracle[b, b] = 1 print(oracle)

Квантовый оракул выражается матрицей:

1 0 00

0 1 0 0

0 0 -1 0

0 0 01

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

Инициализация. Давайте продолжим и создадим соединение с виртуальной машиной Quantum, а также инициализируем программу. qvm = QVMConnection() gr_prog = Program()

Во-первых, мы инициализируем каждый из n = 2 кубитов в состоянии |0). Пакет Rigetti Forest распознает кубиты в обратном порядке, поэтому полезно создать список, содержащий индексы кубитов в порядке убывания.

qubits = list(reversed(range(N))) gr_prog.inst([I(q) for q in qubits]) Наше текущее состояние: |y0)=|00)

Создание суперпозиции. Следующим шагом является приведение системы в суперпозицию с воротами Адамара:

gr_prog.inst([H(q) for q in qubits])

Состояние системы после этого шага выражается следующим образом:

"H

№1) = Я№|^о)= ("~)+р)^("~)+р) = 1/2(|00)+|01)+|10)+|П)) =1/2

(5)

Состояние представляет все возможные входы для квантового оракула в одинаково взвешенной суперпозиции. Мы использовали только 2 кубита для представления 4 входных данных.

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

шага будут включены в цикл:

1. Применение квантового оракула Uf,

2. Инверсия вокруг среднего.

Квантовый оракул уже задан в качестве входных данных. Осталось добавить его в программу:

ORACLEGATENAME = "GROVERORACLE" gr_prog.defgate(ORACLEGATENAME, oracle)

Что значит инверсия вокруг? Чтобы понять, что значит инверсия вокруг среднего, посмотрим, что произойдет на первой итерации после того, как мы применим квантовый оракул. Действие Uf - перевернуть знак амплитуды искомой «string 10»:

1

^ = ^/l^i)=1/2(|00)+|01)-|10)+|n))=1/2

1 -1 1

(6)

Квантового оракула недостаточно, чтобы распознать искомый вход, потому что знак амплитуды не влияет на вероятность измерения. Мы должны искать дополнительные квантовые ворота, которые увеличивают абсолютное значение амплитуды для искомого состояния. Ответ приходит с инверсией вокруг среднего (также называемой диффузионным оператором), которая определяется как 0=2А4®2. A выражается как:

А =

Vn ■" Vn

.Vn ■" Vn.

В нашем примере это:

А = 1/2

1111 1111 1 1 1 1 1111

(8)

и инверсия вокруг среднего имеет вид:

D = 2Л -

=1/2

-11 1 1

1 -1 1 1 1 1-11

1 1 1 -1

(9)

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

^(1}> = D|^(1})=1/4

-1 1 1 1 1 ' 0"

1 -1 1 1 1 0

1 1 -1 1 -1 1

1 1 1 -1 1 0

(10)

У искомой строки амплитуда вероятности равна « 1 итерации. Это означает, что ко-

4

гда вы измеряете кубиты, вы всегда получите искомую «string 10», однако это определено не является общим случаем для более длинных строк (когда число кубитов больше двух).

Реализуем цикл в Python:

# Define quantum oracle

ORACLEGATENAME = "GROVERORACLE" gr_prog.defgate(ORACLEGATENAME, oracle)

# Define inversion around the mean DIFFUSIONGATENAME = "DIFFUSION"

diffusion = 2.0 * np.full((2**N, 2**N), 1/(2**N)) - np.eye(2**N) gr_prog.defgate(DIFFUSION GATE NAME, diffusion)

# Number of algorithm iterations

N ITER = int(np.pi / 4 * np.sqrt(2**N))

# Loop

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

for i in range(NITER):

# \psi_2Ai: Apply Quantum Oracle gr_prog.inst(tuple([ORACLE_GATE_NAME] + qubits)) #print(qvm.wavefunction(gr_prog))

# \psi_3Ai: Apply Inversion around the mean gr_prog.inst(tuple([DIFFUSION_GATE_NAME] + qubits)) #print(qvm.wavefunction(gr_prog))

Вот как будет выглядеть ответ сервиса Riggeti Forrest при запуске алгоритма Гровера с некоторыми заданными значениями:

Рис 2. Графический ответ

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

Измерение. Последний шаг - измерить кубиты и посчитать результат:

# \psi_5: Measure for q in qubits:

gr_prog.measure(qubit_index=q, classical_reg=q)

# Run

ret = qvm.run(gr_prog, classical_addresses=qubits) retstring = ".join([str(q) for q in ret[0]]) print("The searched string is: {}".format(ret_string))

Как уже упоминалось, для случая n = 2 искомая строка измеряется с вероятностью, равной единице. Вы можете попробовать использовать более длинную строку, например, SEARCHED_STRING = "1011010". В этом сценарии вероятность определения правильного ответа после « 9 итераций составляет около 99,6%. Это одно из различий между классическим и

квантовым компьютером. Многие квантовые алгоритмы возвращают правильный ответ с некоторой вероятностью, тогда как классические компьютеры уверены в результатах вычислений (при условии, что шума нет). Это происходит независимо от квантового шума, то есть неопределенность результатов является неотъемлемым свойством этого квантового алгоритма. Чтобы быть почти на 100% уверенными в ответах от квантовых компьютеров, нужно выполнить измерение несколько раз. Тем не менее, повторение алгоритма несколько раз не оказывает существенного влияния на квадратичное ускорение при больших n.

Рис.3 Точность измерений

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

Библиографический список

1. L.K. Grover. A fast quantum mechanical algorithm for database search, Berlin (1996).

2. D. Kopczyk. Quantum machine learning for data scientists, Poland (2018).

3. L. Markov and M. Saeedi, "Constant-optimized quantum circuits for modular multiplication and exponentiation", Quantum Information and Computation 12, 0361-0394 (2012)

4. Nielson, M. A. and Chuang, I.I., "Quantum Computation and Information"(Cambridge Univ. Press, Cambridge, 2000).

5. Grover L.K.: From Schrodinger's equation to quantum search algorithm, American Journal of Physics, 69(7): 769-777, (2001)

6. Grover's Algorithm: Quantum Database Search, C. Lavor, L.R.U. Manssur, R. Portugal (2015)

7. J. Smith, M. Mosca, "Algorithms for Quantum Computers". (2012)

8. Ambainis, A. "A nearly optimal discrete query quantum algorithm for evaluating NAND formulas". (2017)

9. Farhi Edward, Goldstone Jeffrey, Gutmann Sam. "A Quantum Approximate Optimization Algorithm". (2014)

i Надоели баннеры? Вы всегда можете отключить рекламу.