Зразок квантового алгоритму, корисний для демонстрації мов


9

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

  • Що це може бути описано в 1-2 абзацах, і це може бути легко зрозуміти.
  • Слід використовувати більше елементів "світу квантового програмування" (я маю на увазі, що алгоритм повинен використовувати якомога більше класичних констант, вимірювань, умов, qрегістрів, операторів тощо).
  • Алгоритм повинен бути невеликим (довжиною не більше 15-25 псевдокод).

Корисні алгоритми часто занадто довгі / важкі, але алгоритм Deutsch не використовує так багато елементів. Чи може хтось запропонувати мені алгоритм, який корисний для демо?


Чи є ваша вимога також, що це повинен бути "алгоритм" з класичним входом і класичним результатом, і чітка вигода / відмінність від способу роботи еквівалентного класичного алгоритму?
DaftWullie

@DaftWullie Це не потрібно. Параметри параметра або класична константа ініціалізації можуть представляти для мене "вхід", і я надаю формат виводу, якщо це потрібно. Це не потрібно робити / бути особливим. Основна увага приділяється синтаксису мов, опис лише для перевірки того, що коди в різних мовах однакові. Значення алгоритму не має значення.
klenium

Ласкаво просимо в Quantum Computing SE! Просто для перевірки, чи ваші критерії для гарної відповіді на більшість елементів найкоротшого псевдокоду?
Mithrandir24601

1
@ Mithrandir24601 Дякую! Так, якось так.
klenium

Відповіді:


3

Я пропоную розглянути протоколи оцінки власного значення / власного вектора. Існує велика гнучкість, щоб зробити проблему такою простою або такою важкою, як вам хочеться.

Почніть з вибору двох параметрів, n і k. Ви хочете розробитиn-кабітна унітарна, U що має власні значення форми e2πiq/2k для цілих чисел q. Переконайтеся, що принаймні одна з цих власних цінностей є унікальною, і назвіть їїω. Також переконайтеся, що, наприклад, простий стан продукту|0n, має ненульове перекриття власним вектором власного значення ω.

Метою було б втілити в життя алгоритм оцінки фази з урахуванням значення k, і на нього покладено завдання вивести вектор |ψ тобто власний вектор, відповідний власній величині ω. Загалом це буде складати схемуn+k кубіти (якщо вам не потрібні додаткові пристрої для впровадження контрольованих дій,U).

Це працює так:

  • створили два регістри, один із k кубіти та ін nкубіти. ( використання квантових регістрів )

  • кожен кубіт ініціалізується в штаті |0. ( ініціалізація квантових регістрів )

  • застосувати Адамард до кожного кубіта в першому регістрі ( одноквартитні ворота )

  • з кубіта r у першому реєстрі застосувати контрольовані-U2r, орієнтований на другий реєстр ( багатоквартирні керовані ворота )

  • застосувати зворотне перетворення Фур'є до першого регістра і виміряти кожен кубіт першого регістра на стандартній основі. Їх можна комбінувати, реалізуючи напівкласичну трансформацію Фур'є . ( вимірювання та передача класичних даних )

  • для правильного результату вимірювання другий регістр знаходиться в бажаному стані |ψ.

Для простоти ви можете вибрати n=2, k=1, тож вам потрібна 4×4 унітарна матриця з власними значеннями ±1. Я б використовував щось подібне

(U1U2)C(U1U2),
де Cпозначає контрольовану-НЕ. Існує лише один власний вектор з власним значенням -1, який є|ψ=(U1U2)|1(|0|1)/2, і ви можете возитися з вибором U1 і U2 вивчити реалізацію Uвикористовуючи декомпозицію з точки зору універсального набору воріт (я, мабуть, поставив би це як попередню проблему). Потім, під контролем-Uлегко реалізується лише шляхом заміни контрольованого НЕ на контрольований контрольований НЕ (Toffoli) затвор. Нарешті, обернене перетворення Фур'є - це лише ворота Адамара.

Щось трохи складніше, покладіть k=3, і замінити C з квадратним коренем воріт своп,

(1000012i200i21200001)
with ω=e±iπ/4 and |ψ=(U1U2)(|01±|10)/2.

3

Sounds like you want a quantum "Hello World". The most straightforward quantum version of this would just be to write a binary encoded version of the text Hello World in a register of qubits. But this would require ~100 qubits, and be longer than your upper limit for code length.

So let's write a shorter peice of text. Let's write ;), we need a bit string of length 16. Specifically, using ASCII encoding

;)  =  00111011 00101001

Using QISKit, you'd do this using the following code.

from qiskit import QuantumProgram
import Qconfig

qp = QuantumProgram()
qp.set_api(Qconfig.APItoken, Qconfig.config["url"]) # set the APIToken and API url

# set up registers and program
qr = qp.create_quantum_register('qr', 16)
cr = qp.create_classical_register('cr', 16)
qc = qp.create_circuit('smiley_writer', [qr], [cr])

# rightmost eight (qu)bits have ')' = 00101001
qc.x(qr[0])
qc.x(qr[3])
qc.x(qr[5])

# second eight (qu)bits have 00111011
# these differ only on the rightmost two bits
qc.x(qr[9])
qc.x(qr[8])
qc.x(qr[11])
qc.x(qr[12])
qc.x(qr[13])

# measure
for j in range(16):
    qc.measure(qr[j], cr[j])

# run and get results
results = qp.execute(["smiley_writer"], backend='ibmqx5', shots=1024)
stats = results.get_counts("smiley_writer")

Of course, this isn't very quantum. So you could do a superposition of two different emoticons instead. The easiest example is to superpose ;) with 8), since the bit strings for these differ only on qubits 8 and 9.

;)  =  00111011 00101001
8)  =  00111000 00101001

So you can simply replace the lines

qc.x(qr[9])
qc.x(qr[8])

from the above with

qc.h(qr[9]) # create superposition on 9
qc.cx(qr[9],qr[8]) # spread it to 8 with a cnot

The Hadamard creates a superposition of 0 and 1, and the cnot makes it into a superposition of 00 and 11 on two qubits. This is the only required superposition for ;) and 8).

If you want to see an actual implementation of this, it can be found on the QISKit tutorial (full disclosure: it was written by me).


I get 404 for that link. Did you move the file elsewhere?
klenium

It seems the tutorial was just updated. I changed the link, so it should work now.
James Wootton

1

I would propose the (perfect) 1-bit random number generator. It is almost trivially easy:

You start with a single qubit in the usual initial state |0. Then you apply the Hadamard gate H which produces the equal superposition of |0 and |1. Finally, you measure this qubit to get either 0 or 1, each with 50% probability.

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