Algoritma kuantum sampel, berguna untuk menunjukkan bahasa

9

Saya mencari algoritma kuantum yang dapat saya gunakan untuk menunjukkan sintaks berbagai bahasa kuantum. Pertanyaan saya mirip dengan ini , bagaimanapun, bagi saya, "baik" berarti:

  • Apa yang dilakukannya dapat dijelaskan dalam 1-2 paragraf, dan harus mudah dimengerti.
  • Harus menggunakan lebih banyak elemen dari "dunia pemrograman kuantum" (maksud saya algoritma harus menggunakan beberapa konstanta klasik, pengukuran, kondisi, qregister, operator dll, sebanyak mungkin).
  • Algoritme harus kecil (paling banyak 15-25 pseudocode-lines).

Algoritma yang berguna seringkali terlalu panjang / keras, tetapi algoritma Deutsch tidak menggunakan banyak elemen. Dapatkah seseorang menyarankan saya algoritma demo yang baik?

klenium
sumber
Apakah kebutuhan Anda juga bahwa itu harus menjadi "algoritma" dengan input klasik dan output klasik, dan manfaat / perbedaan yang jelas dari cara algoritma klasik setara akan bekerja?
DaftWullie
@ DavidWullie Ini tidak wajib. Paramter atau inisialisasi konstanta classican operator dapat mewakili "input" untuk saya, dan saya akan memberikan format output jika diperlukan. Tidak perlu melakukan / menjadi istimewa. Fokusnya adalah pada sintaks bahasa, deskripsi hanya untuk memvalidasi bahwa kode dalam bahasa yang berbeda adalah sama. Arti algoritma tidak relevan.
klenium
Selamat Datang di Quantum Computing SE! Hanya untuk memeriksa, apakah kriteria Anda untuk jawaban yang baik adalah elemen terbanyak dalam kode pseudo terpendek?
Mithrandir24601
1
@ Mithrandir24601 Terima kasih! Ya, entah bagaimana seperti itu.
klenium

Jawaban:

3

Saya sarankan melihat protokol estimasi eigenvalue / eigenvector. Ada banyak fleksibilitas untuk membuat masalah semudah atau sekeras yang Anda inginkan.

Mulailah dengan memilih dua parameter, dan k . Anda ingin mendesain kesatuan n -qubit, U yang memiliki nilai eigen dari bentuk e - 2 π i q / 2 k untuk bilangan bulat q . Pastikan bahwa setidaknya satu dari nilai eigen itu unik, dan sebut saja ω . Pastikan juga status produk yang sederhana, katakan | 0 n , memiliki non-nol tumpang tindih dengan vektor eigen dari nilai eigen ω .nknUe2πiq/2kqω|0nω

k|ψωn+kU

Ini berfungsi sebagai berikut:

  • kn

  • |0

  • menerapkan Hadamard untuk setiap qubit di register pertama ( gerbang single-qubit )

  • rU2r

  • menerapkan transformasi Fourier terbalik pada register pertama, dan ukur setiap qubit register pertama dalam standar. Ini dapat dikombinasikan, menerapkan transformasi Fourier semi-klasik . ( pengukuran dan umpan-maju dari data klasik )

  • |ψ

n=2k=14×4±1

(U1U2)C(U1U2),
C|ψ=(U1U2)|1(|0|1)/2U1U2UU

k=3C

(1000012i200i21200001)
ω=e±iπ/4|ψ=(U1U2)(|01±|10)/2
DaftWullie
sumber
3

Kedengarannya seperti Anda menginginkan kuantum "Hello World". Versi kuantum yang paling mudah dari ini hanya akan menulis versi teks biner yang dikodekan Hello Worlddalam daftar qubit. Tetapi ini membutuhkan ~ 100 qubit, dan lebih panjang dari batas atas Anda untuk panjang kode.

Jadi mari kita menulis suatu bagian teks yang lebih pendek. Mari kita menulis ;), kita perlu sedikit string dengan panjang 16. Secara khusus, menggunakan pengkodean ASCII

;)  =  00111011 00101001

Menggunakan QISKit, Anda akan melakukan ini menggunakan kode berikut.

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

Tentu saja, ini tidak terlalu kuantum. Jadi, Anda bisa melakukan superposisi dua emotikon berbeda. Contoh termudah adalah menempatkan superposisi;) dengan 8), karena string bit untuk ini berbeda hanya pada qubit 8 dan 9.

;)  =  00111011 00101001
8)  =  00111000 00101001

Jadi Anda cukup mengganti baris

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

dari atas dengan

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

Hadamard menciptakan superposisi dari 0dan 1, dan cnot membuatnya menjadi superposisi dari 00dan 11pada dua qubit. Ini adalah satu-satunya superposisi yang diperlukan untuk ;)dan 8).

Jika Anda ingin melihat implementasi sebenarnya dari ini, dapat ditemukan pada tutorial QISKit (pengungkapan penuh: ditulis oleh saya).

James Wootton
sumber
Saya mendapatkan 404 untuk tautan itu. Apakah Anda memindahkan file ke tempat lain?
klenium
Sepertinya tutorialnya baru saja diperbarui. Saya mengubah tautan, jadi itu seharusnya berfungsi sekarang.
James Wootton
1

Saya akan mengusulkan generator nomor acak 1-bit (sempurna). Hampir sepele mudah:

|0H|0|1

piramida
sumber