Dilleri göstermek için yararlı bir örnek kuantum algoritması


9

Farklı kuantum dillerinin sözdizimini göstermek için kullanabileceğim bir kuantum algoritması arıyorum. Sorum benzer bu , benim için, ancak, "iyi" anlamına gelir:

  • Yaptığı şey 1-2 paragrafta açıklanabilir ve anlaşılması kolay olmalıdır.
  • "Kuantum-programlama-dünyası" nın daha fazla unsurunu kullanmalıdır (algoritmanın bazı klasik sabitleri, ölçümleri, koşulları, qregister'ları, operatörleri vb. Mümkün olduğunca çok kullanması gerekir).
  • Algoritma küçük olmalıdır (en fazla 15-25 yalancı kod satırı uzunluğunda).

Yararlı algoritmalar genellikle çok uzun / serttir, ancak Deutsch'nun algoritması bu kadar çok öğe kullanmaz. Birisi bana demo için iyi bir algoritma önerebilir mi?


Ayrıca gereksiniminiz klasik girdi ve klasik çıktıya sahip bir "algoritma" olması ve eşdeğer klasik algoritmanın çalışma şeklinden belirgin bir fayda / fark olması mıdır?
DaftWullie

@DaftWullie Bunlar gerekli değildir. Bir operatörün parametresi veya klasik sabit başlatması benim için "girişi" temsil edebilir ve gerekirse çıktı biçimini vereceğim. Özel olması / özel olması gerekmez. Odak, dillerin sözdizimindedir, açıklama yalnızca farklı dillerdeki kodların aynı olduğunu doğrulamak içindir. Algoritmanın anlamı önemsizdir.
klenium

Quantum Computing SE'ye hoş geldiniz! Sadece kontrol etmek için, iyi bir cevap için kriteriniz en kısa sahte koddaki en çok unsur mu?
Mithrandir24601

1
@ Mithrandir24601 Teşekkürler! Evet, bir şekilde böyle.
klenium

Yanıtlar:


3

Özdeğer / özvektör tahmin protokollerine bakmanızı öneririm. Sorunu istediğiniz kadar kolay veya zor hale getirmek için çok fazla esneklik var.

İki parametre seçerek başlayın, n ve k. Bir tasarım yapmak istiyorsunuzn- üniter kubbe, U formun özdeğerlerine sahip olan e-2πbenq/2k tamsayılar için q. Bu öz değerlerden en az birinin benzersiz olduğundan emin olun ve onu arayınω. Ayrıca, basit bir ürün durumunun,|0n, özdeğer özvektörü ile sıfır olmayan örtüşmeye sahiptir ω.

Amaç, buna bir faz kestirim algoritması uygulamak, kve bir vektör çıktısını almakla görevli olmak |ψ özdeğer değerine karşılık gelen özvektör ω. Genel olarak bu,n+k qubits (kontrollü uygulamak için yardımcılara ihtiyacınız yoksaU).

Bu şu şekilde çalışır:

  • biri olmak üzere iki kayıt oluşturun k kübitler ve diğeri nqubits. ( kuantum kayıtlarının kullanımı )

  • her kubit devlette başlatılır |0. ( kuantum kayıtlarının başlatılması )

  • ilk kayıttaki her kubite bir Hadamard uygulayın ( tek kubit kapıları )

  • qubit'ten r ilk kayıtta, kontrollüU2r, ikinci kaydı hedefleyen ( çoklu-kubit kontrollü kapılar )

  • ters Fourier dönüşümünü ilk kayıtta uygulayın ve ilk kayıttaki her kubiti standart olarak ölçün. Bunlar, yarı klasik Fourier dönüşümünü uygulayarak birleştirilebilir . ( klasik verilerin ölçümü ve ileri iletimi )

  • doğru ölçüm sonucu için ikinci kayıt istenen durumda |ψ.

Basitlik için, n=2, k=1, bu yüzden bir 4x4 özdeğerli birimsel matris ±1. Gibi bir şey kullanırdım

(U1U2)C(U1U2),
nerede C"Kontrollü NOT" anlamına gelir. Özdeğer -1 ile sadece bir özvektör vardır,|ψ=(U1U2)|1(|0-|1)/2ve seçimleriyle uğraşabilirsiniz U1 ve U2 uygulanmasını keşfetmek Uevrensel bir geçit kümesi açısından ayrıştırma kullanarak (muhtemelen bunu bir ön sorun olarak ayarlardım). Sonra, kontrollü-Usadece kontrollü-NOT yerine bir kontrollü-kontrollü-NOT (Toffoli) geçidi kullanılarak kolayca uygulanır. Son olarak, ters Fourier dönüşümü sadece bir Hadamard kapısıdır.

Biraz daha karmaşık bir şey için k=3ve değiştirin C takas kapısının karekökü ile,

(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.

Şimdi daha kısa bir metin parçası yazalım. Yazalım ;), biraz uzunluk 16 dizisine ihtiyacımız var. Özellikle, ASCII kodlamasını kullanarak

;)  =  00111011 00101001

QISKit kullanarak, aşağıdaki kodu kullanarak bunu yaparsınız.

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")

Tabii ki, bu çok kuantum değil. Böylece iki farklı ifadenin üst üste binmesini yapabilirsiniz. Bunun en kolay örneği;) 8) ile üst üste koymaktır, çünkü bunlar için bit dizeleri sadece 8 ve 9 kubitlerinde farklılık gösterir.

;)  =  00111011 00101001
8)  =  00111000 00101001

Böylece çizgileri değiştirebilirsiniz

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

ile yukarıdan

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

A. Edison bir süperpozisyon oluşturur 0ve 1ve cnot bir süperpozisyon içine yapar 00ve 11iki qubits üzerinde. Bu sadece gerekli süperpozisyon olduğunu ;)ve 8).

Bunun gerçek bir uygulamasını görmek istiyorsanız, QISKit eğitiminde bulunabilir (tam açıklama: benim tarafımdan yazılmıştır).


Bu bağlantı için 404 tane alıyorum. Dosyayı başka bir yere mi taşıdınız?
klenium

Eğitim sadece güncellendi gibi görünüyor. Bağlantıyı değiştirdim, bu yüzden şimdi çalışmalı.
James Wootton

1

(Mükemmel) 1-bit rasgele sayı üreteci öneririm. Neredeyse son derece kolaydır:

Her zamanki başlangıç ​​durumunda tek bir kübit ile başlarsınız |0. Sonra Hadamard kapısını uygularsınız'H eşit üst üste bindirmeyi üreten |0 ve |1. Son olarak, bu kübiti her biri% 50 olasılıkla 0 veya 1 elde etmek için ölçersiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.