Як я можу реалізувати квантовий оракул в алгоритмі Deutsch?


13

Я намагаюся імітувати алгоритм Deutsch (елементарний випадок алгоритму Deutsch-Josza), і я не зовсім впевнений, як би я пішов на реалізацію квантового оракула, необхідного для функціонування алгоритму, не порушуючи призначення алгоритму та "шукаючи" що таке введена функція, оцінюючи функцію.


Це може бути корисно: quantumcomputing.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;
    }
}

У чому справа?

Складність запиту

Обчислювальна складність - це поле, яке стосується класифікації алгоритмів відповідно до кількості ресурсів, які вони споживають, залежно від розміру вводу. Ці ресурси включають час (вимірюється кроками / інструкціями), пам'ять, а також щось, що називається складністю запитів . Складність запитів пов'язана з тим, скільки разів алгоритм повинен запитувати функцію oracle black box.

n2n1

2n1

Програми в реальному світі

Якщо ви не теоретик складності, ви, можливо, не надто переймаєтесь складністю запитів, а натомість хочете дізнатися, чому проблема оракула Deutsch важлива у світі "без правил", де вам дозволяють заглянути всередину чорної скриньки. Спроба проаналізувати проблему Oracle як проблему, що не стосується оракула, загрожує труднощами, і я не вірю, що хтось вирішив питання про найкращий класичний алгоритм проблеми Deutsch oracle, коли вам дозволяють аналізувати схему oracle. Ви можете подумати - що тут аналізувати? Існує лише чотири можливі схеми! Насправді це набагато складніше.

Якщо ми подивимось на найпростіше представлення однобітного Deutsch Oracle, конструкція воріт полягає в наступному:

C1,0

X0C1,0

I4

X0

Однак це аж ніяк не єдиний спосіб втілення оракулів. Все це можна переписати, використовуючи сотні, тисячі, навіть мільйони логічних воріт! Все, що має значення, сукупний ефект цих логічних воріт рівнозначний вищенаведеній простої конструкції. Розглянемо наступну альтернативну реалізацію Константа-1:

H0Z0H0

Виявляється, за будь-який вклад ви могли коли-небудь дати:

H0Z0H0|ψ=X0|ψ

H0Z0H0X0

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

Отже, у нас є:

(H0(Z0(H0|ψ)))=(((H0Z0)H0)|ψ)=X0|ψ

H0Z0H0X0

Важливо з історичних та педагогічних причин

Перш за все, проблема Deutsch Oracle важлива з історичних та педагогічних причин. Це перший алгоритм, який навчають студентів, оскільки він найпростіший і, здається, демонструє квантове прискорення, доки ви не задасте занадто багато питань. Він також слугує гарною відправною точкою для вивчення проблеми періодичності Саймона, а потім Алгоритму Шорта.


Я був з вами до того часу, поки річ Готтеман-Книл. Чому ви обмежуєте свій складний ланцюг (i) одноквартитними воротами та (ii) воротами стабілізатора?
Норберт Шуч

Як я розумію, існують ефективні алгоритми визначення того, чи реалізує довільна квантова схема одна з кількох простих класичних схем. Випадкові схеми, які вивчаються для квантової переваги, вимагають більш складної поведінки.
ahelwer

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

Ви маєте рацію, я ще раз вивчу питання щодо зменшення ланцюга, а потім оновлю свій пост, щоб уточнити роль Готтесмана-Найла.
ahelwer

Я оновив свою відповідь, задавши Робіну Котарі кілька запитань по електронній пошті.
вчера

3

Немає способу побудувати оракул таким чином, щоб не перемогти точку алгоритму Дойча - ось чому це алгоритм, заснований на оракулі.

xf(x)f(0)=f(1)

f(x)1xNf(x)yf(x+y)=f(x)f(x)

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

Тож, якщо ви хочете реалізувати Deutsch, будь-який спосіб зробити оракул є чудовим - це алгоритм "підтвердження принципу" і не дає фактичного прискорення реальної проблеми (принаймні жодної, про яку ми не знаємо).



2

У мене немає прикладу алгоритму Дойча, але тут і тут є два навчальні посібники, які допоможуть вам реалізувати алгоритм Deutsch-Jozsa та оракули, які він використовує у Q #.

Ідея цих двох алгоритмів однакова: ви повинні надати оракул алгоритму як операцію, реалізовану в іншому місці. Таким чином алгоритм не знає, який оракул йому надано, і не має способу "подивитися" на оракул, крім того, як викликати його. У цих навчальних посібниках також є джгут, який підраховує, скільки разів викликається оракул, так що якщо ваше рішення називає його не один раз, воно пройде тест.

Справді, у цій проблемі все ще існує проблема, яку часто мають алгоритми oracle: людина може подивитися на тест і тестування оракула, і визначити відповідь, з'ясувавши, який із них використовується. Цьому можна протидіяти шляхом рандомізації вибору оракула, як запропонував DaftWullie.


1

Я думаю, що ahelwerвідповідь стосується деяких способів, які ми думаємо про складність алгоритмів. Однак, враховуючи, що в реальному світі у нас буквально немає «оракул», до яких ми хочемо запитати, ви можете задатися питанням, чому ми б турбувалися про складність запиту чи про ідею оракул взагалі. Я спробую дати певну точку зору на це, зокрема, щоб описати, як ви можете спробувати придумати способи побудови «оракула Deutsch – Josza» таким чином, щоб ви не відчували себе так, ніби ви обманюєте.

(Як Norbert Schuchзазначається, для німецької проблеми, що є елементарним випадком Deutsch – Josza, існує не так багато можливостей для розуміння, але я думаю, що ваше питання про оракули стосується і більш загального характеру. Про це я і поговорю тут.)

Інтуїція про оракул

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

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

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

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

Використання алгоритмів Oracle для вирішення проблем, що не стосуються оракул

Алгоритм Deutsch – Josza або алгоритм Бернштейна – Вазірані в принципі - це не алгоритми, які кожен виконує заради себе. (Ну, не дуже - дивіться наступний Розділ.) Вони виступають за шляхи вирішення проблеми . Які проблеми вони вирішують? Вони дозволяють виявити певні особливості функції, яка вас цікавить - чи вона є постійною / врівноваженою, чи який вектор пов'язаний з деякою скалярною лінійною функцією на векторах.

На яких функціях ви їх виконуєте? - Ви виконуєте їх на будь-якій функції, на яку вас цікавить відповідь.

Опис цих алгоритмів на основі оракул знаходиться поруч. Проблеми з Oracle в основному дозволяють вам знати, що за допомогою ідеального квантового комп'ютера ви можете вирішити проблему, навіть якщо ви знаєте надзвичайно мало про цю функцію , за умови, що ви можете фактично ефективно оцінити функцію на практиці. Щоб насправді оцінити таку функцію, звичайно, вам знадобиться деякий опис того, як це зробити, і таким чином у вас є більше інформації, ніж у налаштуваннях oracle; але це не заважає вам використовувати той же алгоритм.

Що відбувається, коли у вас є більше інформації, ніж у налаштуваннях оракула, це те, що раптом з’являються інші способи вирішити проблему. Зокрема, можливо, можливо, ефективно вирішити проблему класично . (Це те саме спостереження, що і для P A  ≠  NP A : це доводить, що в NP існують проблеми , для яких будь-який ефективний детермінований алгоритм потребує хоча б фактичної структурної інформації, щоб мати можливість вирішити - так що коли ви надаєте опис ефективно обчислюваної функції, а не «оракул», можливо, проблема буде в цьомуП. ) Це означає, що квантовий алгоритм може не мати однакової переваги перед класичними алгоритмами при вирішенні конкретної проблеми, яку ви представляєте, - і насправді може бути, що класичний підхід кращий (особливо з пристроями, які ми маємо на даний момент).

Зрештою, те, що у вас є квантовий алгоритм, щоб щось вирішити, не означає, що це обов'язково найкращий спосіб вирішити щось. Це, безумовно, стосується алгоритму Deutsch – Josza: навіть у налаштуваннях Oracle використання випадковості майже так само добре, і це набагато краще, враховуючи, що у нас ще немає великих надійних квантових комп'ютерів! Але потім знову ...

"Реалізація" оракула

Мета реалізації алгоритму Deutsch – Josza така ж, як і реалізація " Привіт, світ! " - не для вирішення нагальної невирішеної проблеми, а для того, щоб використовувати інструмент, який, на вашу думку, буде корисним для інших дій.

Щоб практикувати кодування, ви повинні відчувати себе абсолютно розслаблено і комфортно як з ідеєю реалізації оракула, так і з ідеєю комп'ютера, що оцінює оракул. В принципі, це сенс того, що ви хочете зробити. Навіть якщо ви використовуєте класичний емулятор, в якому класичний комп'ютер насправді оцінює всі гілки суперпозиції і так явно знаходить відповідь на проблему, щоб зробити вигляд, що це квантовий комп'ютер, який діє дещо більш круговим способом, будь то - ви практикуєте, як використовувати інструмент, який може бути корисним для інших речей, і який одного дня не буде працювати на класичному комп’ютері.

Тож як вам слід займатися реалізацією свого оракула?

(i) Якщо ви справді прихильні до думки, що ви просто практикуєтесь, вам не доведеться робити вигляд, що ви робите щось магічне. Придумайте будь-який спосіб реалізувати функцію oracle, навіть якщо випадковому спостерігачеві очевидно, чи результат постійний чи збалансований. Ви просто намагаєтеся реалізувати алгоритм - не переживайте, що хтось звинуватить вас у самозванці, що ви робите вигляд, що вилікуєте рак, але насправді граєте з Лего. Ви ніколи були прикидатися , щоб вилікувати рак, і ви будете грати з Льім навмисним вибором. Прийміть це і просто зробіть це.

f(x)=g(x,r)rg(x,r)xr, і де не очевидно, як вирішити це класично, нетривіально.

  • g(x,r)=xrx,r{0,1}ng(x,r)f(x)f(x)r0

  • Можливо, що вищезазначена конструкція може бути дещо розроблена / затуманена, щоб отримати конструкцію, яка гарантовано оцінює або постійну функцію, або врівноважену функцію, і де те, що відбувається з цих двох, не є очевидним або навіть важким - але я можу ' Не думаю, як, на даний момент.

Майте на увазі, що це насправді зробити дуже важко - але якщо ви можете знайти спосіб це зробити, це може бути дуже вартим: Бравій, Госсет та Конінг зробили щось подібне для проблеми Бернштейн-Вазірані, і це дозволило їм показати невеликий, але безумовний поділ між квантовою та класичною складністю, що було однією з найцікавіших речей, що мали місце в квантовій складності за останні кілька років.

TL; DR

  • Не співайте над тим, що ви «оцінюєте» оракул.

  • Якщо ви поперєтеся над чим-небудь, хвилюйтесь, що фактичний опис функції може легко вирішити ту саму проблему без квантового комп'ютера.

  • Якщо ваша мотивація полягає лише в тому, щоб практикувати квантове програмування, навіть не турбуйтеся про це. Збережіть свою турботу про гідніші проблеми, як-от глобальне потепління. Тим часом насолоджуйтеся грою з Легосом, поки ви будуєте щось більше.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.