Как бы я реализовал квантовый оракул в алгоритме Дойча?


13

Я пытаюсь смоделировать алгоритм Дойча (простейший случай алгоритма Дойча-Йоша), и я не совсем уверен, как бы я поступил в реализации квантового оракула, необходимого для функционирования алгоритма, без ущерба для цели алгоритма и «смотря» на что введенная функция, оценивая функцию.


Это может быть полезно: quantcomputing.stackexchange.com/a/2262/2645
meowzz

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

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

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

@DaftWullie Если вы вычисляете свойство случайной функции, почему бы просто не сразу произвести случайный вывод?
Норберт Шух

Ответы:


9

Здесь есть два вопроса. Первый спрашивает, как вы могли бы на самом деле реализовать это в коде, а второй спрашивает, какой смысл, если вы знаете, какого оракула вы передаете.

Реализация

Вероятно, лучшим способом является создание функции, IsBlackBoxConstantкоторая принимает оракула в качестве входных данных, а затем запускает программу Deutsch Oracle, чтобы определить, является ли она постоянной. Вы можете выбрать оракула наугад, если хотите. Вот оно, реализовано в Q #:

operation IsBlackBoxConstant(blackBox: ((Qubit, Qubit) => ())) : (Bool)
{
    body
    {
        mutable inputResult = Zero;
        mutable outputResult = Zero;

        // Allocate two qbits
        using (qbits = Qubit[2])
        {
            // Label qbits as inputs and outputs
            let input = qbits[0];
            let output = qbits[1];

            // Pre-processing
            X(input);
            X(output);
            H(input);
            H(output);

            // Send qbits into black box
            blackBox(input, output);

            // Post-processing
            H(input);
            H(output);

            // Measure both qbits
            set inputResult = M(input);
            set outputResult = M(output);

            // Clear qbits before release
            ResetAll(qbits);
        }

        // If input qbit is 1, then black box is constant; if 0, is variable
        return One == inputResult;
    }
}

В чем смысл?

Сложность запроса

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

Проблема оракула Дойча интересна для теоретиков сложности, потому что квантовый алгоритм должен запрашивать черный ящик только один раз, а классический алгоритм должен запрашивать его дважды. В обобщенной задаче Дойча-Йосзы, где N -битный оракул содержит функцию, которая является либо постоянной, либо сбалансированной, квантовый алгоритм снова должен запросить ее только один раз, но (детерминированный) классический алгоритм требует 2N-1 запросов.

Следует отметить, что существует вероятностный классический алгоритм, который решает проблему Дойча-Йосзы в гораздо меньшем количестве, чем 2N-1 запросов, путем случайной выборки входных данных оракула: если оракул продолжает выводить одно и то же значение независимо от входных данных, вероятность того, что Оракул постоянно растет очень быстро. Это означает, что Deutsch-Josza не является хорошим кандидатом на проблему квантового превосходства / преимущества, которая приводит к ...

Приложения в реальном мире

Если вы не теоретик сложности, то, возможно, вам небезразлично, насколько сложен запрос, и вместо этого вы хотите знать, почему проблема оракула Дойча важна в мире «без правил», где вы можете заглянуть внутрь черного ящика. Попытка проанализировать проблему оракула как проблему без оракула сопряжена с трудностями, и я не верю, что кто-либо решил вопрос о лучшем классическом алгоритме задачи оракула Дойча, когда вам разрешено анализировать схему оракула. Вы можете подумать - что тут анализировать? Есть только четыре возможных схемы! На самом деле все гораздо сложнее.

Если мы посмотрим на простейшее представление однобитного немецкого Oracle, конструкция gate выглядит следующим образом:

Идентичность: С1,0

Отрицание: Икс0С1,0

Константа-0: я4

Константа-1: Икс0

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

ЧАС0Z0ЧАС0

Оказывается, что для любого входа вы могли бы дать:

H0Z0H0|ψ=X0|ψ

Это связано с ассоциативностью умножения матриц. Если вы выписаете фактические матрицы для H0Z0H0 и умножите их вместе, вы получите X0 :

H0Z0H0=[12121212][1001][12121212]=[0110]=X0

Итак, мы имеем:

(ЧАС0(Z0(ЧАС0|ψ)))знак равно(((ЧАС0Z0)ЧАС0)|ψ)знак равноИкс0|ψ

ЧАС0Z0ЧАС0Икс0

Важно по историческим и педагогическим причинам

Прежде всего, проблема Дойча Оракула важна по историческим и педагогическим причинам. Это первый алгоритм, которому учат студентов, потому что он самый простой и, похоже, демонстрирует квантовое ускорение, если вы не задаете слишком много вопросов. Он также служит хорошей отправной точкой для изучения проблемы периодичности Саймона, а затем алгоритма Шора.


Я был с тобой до Готтемана-Найла. Почему вы ограничиваете свою сложную схему (i) однобитными воротами и (ii) стабилизаторами?
Норберт Шух

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

Я не думаю, что это правда. Если я не ошибаюсь, вопрос о том, выполняют ли две схемы одно и то же, является QMA-завершенным. Это только ваше ограничение на ворота Клиффорда, которые допускают симуляцию через Gottesman-Knill.
Норберт Шух

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

Я обновил свой ответ после того, как задал Робину Котари несколько вопросов по электронной почте.
Ахелвер

3

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

Иксе(Икс)е(0)знак равное(1)

е(Икс)1ИксNе(Икс)Yе(Икс+Y)знак равное(Икс)е(Икс)

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

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



2

У меня нет удобного примера для алгоритма Дойча, но здесь и здесь есть два урока, которые помогут вам в реализации алгоритма Дойча-Йозсы и оракулов, которые он использует в Q #.

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

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


1

Я думаю, что этот ahelwerответ затрагивает некоторые способы, которыми мы думаем о сложности алгоритмов. Однако, учитывая, что у нас нет буквальных «оракулов» в реальном мире, к которым мы хотим обращаться, вы можете задаться вопросом, почему мы вообще беспокоимся о сложности запросов или о идее оракулов. Я попытаюсь дать некоторую точку зрения на это, и, в частности, описать, как вы можете попытаться придумать способы создания «оракула Дойча-Йоша» таким образом, чтобы вы не чувствовали себя так, как будто вы обманываете.

(Как Norbert Schuchуказывается, для проблемы Дойча, которая является элементарным случаем Дойча – Йоша, мало возможностей для проникновения в суть, но я ожидаю, что ваш вопрос о оракулах применим и в более общем плане. Об этом я и расскажу здесь.)

Интуиция о оракулах

Концепция оракула - это способ позволить нам упростить разговор о вычислительных проблемах.

Первоначальное применение концепции оракула заключалось в гипотетическом рассмотрении того, что мы могли бы сделать, если бы могли решать сложные проблемы, даже невозможные, без принятия того, как мы могли бы сделать это даже в принципе. Но в вычислительной сложности в наши дни - особенно в квантовых вычислениях, например,  в случаях Дойча – Йоша, Бернштейна – Вазирани и других проблем оракула - ситуация иная: оракул описывает функцию, которая является основой проблемы, Тот факт, что это «оракул», является способом структурирования того, как мы описываем функцию, которая находится в центре проблемы: не то, что мы никогда не должны размышлять о том, как вычисляется функция, но эта информация просто не предоставляется как часть проблемы, и что мы не обеспокоены временем или другой сложностью, связанной с этой функцией.

Используя этот подход, мы можем получить ответы, которые связаны с очень сложными вопросами в вычислениях. Например, вы знаете , что мы не знаем , как доказать либо P  ≠  NP или P  =  NP , но что мы можем показать , что есть оракулов таким образом, что мы можем показать , что P A  ≠  NP A . То, что здесь делает оракул А , не помогает компьютеру (точнее, детерминированной машине Тьюринга или недетерминированной машине Тьюринга) решить проблему - он представляет собой проблему, которую должен решить компьютер. Тот факт, что мы можем показать в некоторых случаях, что P A ≠  NP , не означает , что P является действительно отличается от НП : это просто означает , что только с помощью недетерминизма действительно значимый ресурс для модели вычислений , чтобы иметь - это позволяет эффективно решить некоторые проблемы, и нет никакого способа , в общем, для эффективного моделирования недетерминизма на детерминированном компьютере. Так что если вы хотите , чтобы решить проблему , связанную с какими А , вычисляемых, вы абсолютно потребуется некоторая информация о структуре какой - либо функции , которые могли бы эффективно вычислить A .

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

Использование алгоритмов оракула для решения проблем без оракула

Алгоритм Дойча – Йосзы или алгоритм Бернштейна – Вазирани в принципе не являются алгоритмами, которые выполняются ради самих себя. (Ну, не совсем - см. Следующий раздел.) Они обозначают способы решения проблемы . Какие проблемы они решают? Они позволяют вам обнаружить определенные особенности интересующей вас функции - является ли она постоянной / сбалансированной или какой вектор связан с некоторой скалярной линейной функцией на векторах.

Какие функции вы выполняете их? - Вы выполняете их по любой функции, для которой вас интересует ответ.

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

Когда у вас больше информации, чем в настройках оракула, происходит то, что неожиданно появляются другие способы решения проблемы. В частности, может стать возможным эффективное решение проблемы классическим способом . (Это то же самое наблюдение, что и для P A  ≠  NP A : оно доказывает, что существуют проблемы, которые есть в NP , которые любой эффективный детерминистический алгоритм, по крайней мере, потребует, чтобы фактическая структурная информация могла быть решена - так что, когда вы предоставляете описание эффективно вычисляемой функции, а не «оракула», возможно, что проблема будет вP. ) Это означает, что квантовый алгоритм может не иметь такого же преимущества по сравнению с классическими алгоритмами при решении конкретной проблемы, которую вы представляете - и на самом деле может оказаться, что классический подход лучше (особенно с устройствами, которые у нас есть в данный момент).

В конце концов, если у вас есть квантовый алгоритм для решения чего-либо, это не значит, что это лучший способ решить что-то. Это, безусловно, верно для алгоритма Дойча – Йосзы: даже в условиях оракула использование случайности почти так же хорошо, и это намного лучше, учитывая, что у нас еще нет больших надежных квантовых компьютеров! Но затем снова...

«Реализация» оракула

Цель реализации алгоритма Дойча – Йосзы такая же, как и реализация « Hello, World! » - не для решения насущной нерешенной проблемы, а для практики использования инструмента, который, как вы ожидаете, будет полезен для выполнения других задач.

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

Итак, как вам следует реализовать свой оракул?

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

е(Икс)знак равног(Икс,р)рг(Икс,р)Иксри там, где не очевидно, как решить это классически, нетривиально.

  • г(Икс,р)знак равноИксрИкс,р{0,1}Nг(Икс,р)е(Икс)е(Икс)р0

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

Имейте в виду, что это на самом деле очень трудно сделать, но если вы можете увидеть способ сделать это, это может быть очень полезно: Бравий, Госсетт и Кёнинг сделали нечто подобное для проблемы Бернштейна – Вазирани, и это позволило им показать небольшое, но безусловное разделение между квантовой и классической сложностью, что было одной из наиболее интересных вещей, которые произошли в квантовой сложности за последние несколько лет.

TL; DR

  • Не переживайте из-за того, что вы «оцениваете» оракула.

  • Если вы что-то потеете, волнуйтесь только о том, что фактическое описание функции может позволить легко решить ту же проблему без квантового компьютера.

  • Если ваша мотивация состоит только в том, чтобы практиковаться в квантовом программировании, даже не беспокойтесь об этом. Сохраните беспокойство для более серьезных проблем, таких как глобальное потепление. А пока наслаждайтесь игрой с Legos, пока вы строите что-то большее.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.