Một thuật toán lượng tử mẫu, hữu ích để trình diễn các ngôn ngữ


9

Tôi đang tìm kiếm một thuật toán lượng tử mà tôi có thể sử dụng để chứng minh cú pháp của các ngôn ngữ lượng tử khác nhau. Câu hỏi của tôi tương tự như vậy , tuy nhiên, đối với tôi, "tốt" có nghĩa là:

  • Những gì nó có thể được mô tả trong 1-2 đoạn, và nên dễ hiểu.
  • Nên sử dụng nhiều yếu tố của "thế giới lập trình lượng tử" (ý tôi là thuật toán nên sử dụng một số hằng số cổ điển, phép đo, điều kiện, qregisters, toán tử, v.v. càng nhiều càng tốt).
  • Thuật toán phải nhỏ (tối đa 15-25 mã giả dài dòng).

Các thuật toán hữu ích thường quá dài / khó, nhưng thuật toán của Đức không sử dụng nhiều yếu tố đó. Ai đó có thể gợi ý cho tôi một thuật toán demo tốt không?


Có phải yêu cầu của bạn là nó phải là một "thuật toán" với đầu vào cổ điển và đầu ra cổ điển, và lợi ích / sự khác biệt rõ ràng từ cách thuật toán cổ điển tương đương sẽ hoạt động?
DaftWullie

@DaftWullie Đây là không bắt buộc. Thông số khởi tạo hằng số của toán tử hoặc cổ điển có thể đại diện cho "đầu vào" cho tôi và tôi sẽ cung cấp định dạng đầu ra nếu cần. Nó không cần phải làm / đặc biệt. Trọng tâm là cú pháp của các ngôn ngữ, mô tả chỉ để xác thực rằng các mã trong các ngôn ngữ khác nhau là như nhau. Ý nghĩa của thuật toán là không liên quan.
klenium

Chào mừng bạn đến với Máy tính lượng tử SE! Chỉ cần kiểm tra, tiêu chí của bạn cho một câu trả lời tốt có hầu hết các yếu tố trong mã giả ngắn nhất?
Mithrandir24601

1
@ Mithrandir24601 Cảm ơn! Vâng, bằng cách nào đó như thế.
klenium

Câu trả lời:


3

Tôi đề nghị xem xét các giao thức ước tính eigenvalue / eigenvector. Có rất nhiều sự linh hoạt để làm cho vấn đề dễ dàng hoặc khó như bạn muốn.

Bắt đầu bằng cách chọn hai tham số, k . Bạn muốn thiết kế một đơn vị n -bit, U có giá trị riêng có dạng e - 2 π i q / 2 k cho các số nguyên q . Hãy chắc chắn rằng ít nhất một trong những giá trị riêng là duy nhất, và gọi nó là ω . Cũng đảm bảo rằng một trạng thái sản phẩm đơn giản, nói | 0 n , có khác không chồng chéo với eigenvector của eigenvalue ω .nknUe-2πTôiq/2kqω|0nω

Mục đích sẽ là để thực hiện một thuật toán ước lượng pha về điều này, được cho biết giá trị và được giao nhiệm vụ xuất ra một vectơ | ψ đó là eigenvector tương ứng với eigenvalue ω . Nói chung, điều này sẽ bao gồm một mạch gồm các qubit n + k (trừ khi bạn cần ancillas để thực hiện kiểm soát- U ).k|ψωn+kBạn

Điều này hoạt động như sau:

  • thiết lập hai thanh ghi, một trong số qubit và cái còn lại của n qubit. ( sử dụng các thanh ghi lượng tử )kn

  • mỗi qubit được khởi tạo trong trạng thái . ( khởi tạo các thanh ghi lượng tử )|0

  • áp dụng Hadamard cho mỗi qubit trong thanh ghi đầu tiên ( cổng qubit đơn )

  • từ qubit trong thanh ghi đầu tiên, áp dụng điều khiển - U 2 r , nhắm mục tiêu thanh ghi thứ hai ( cổng kiểm soát đa qubit )rBạn2r

  • áp dụng biến đổi Fourier ngược trên thanh ghi đầu tiên và đo từng qubit của thanh ghi đầu tiên trong cơ sở tiêu chuẩn. Chúng có thể được kết hợp, thực hiện biến đổi Fourier bán cổ điển . ( đo lườngchuyển tiếp dữ liệu cổ điển )

  • để có kết quả đo chính xác, thanh ghi thứ hai ở trạng thái mong muốn .|ψ

Để đơn giản, bạn có thể chọn , k = 1 , do đó bạn cần một 4 × 4 ma trận unita với giá trị riêng ± 1 . Tôi muốn sử dụng cái gì đó như ( U 1U 2 ) C ( U 1U 2 ) , nơi C biểu thị điều khiển-KHÔNG. Chỉ có một eigenvector với eigenvalue -1, đó là | ψ = ( U 1U 2n= =2k= =14×4±1

(Bạn1Bạn2)C(Bạn1Bạn2),
C , và bạn có thể loay hoay với các lựa chọn củaU1U2để khám phá việc triển khaiUbằng cách sử dụng phân tách theo bộ cổng phổ quát (có lẽ tôi đặt vấn đề này là vấn đề sơ bộ). Sau đó, kiểm soát-Uđược thực hiện dễ dàng chỉ bằng cách thay thế cổng KHÔNG được kiểm soát bằng cổng kiểm soát được kiểm soát-KHÔNG (Toffoli). Cuối cùng, biến đổi Fourier ngược chỉ là một cổng Hadamard.|ψ= =(Bạn1Bạn2)|1(|0-|1)/2Bạn1Bạn2BạnBạn

k= =3C

(1000012Tôi200Tôi21200001)
ω= =e±Tôiπ/4|ψ= =(Bạn1Bạn2)(|01±|10)/2

3

Âm thanh như bạn muốn một lượng tử "Hello World". Phiên bản lượng tử đơn giản nhất của điều này sẽ chỉ là viết một phiên bản mã hóa nhị phân của văn bản Hello Worldtrong một thanh ghi qubit. Nhưng điều này sẽ yêu cầu ~ 100 qubit và dài hơn giới hạn trên của bạn về độ dài mã.

Vì vậy, hãy viết một đoạn văn bản ngắn hơn. Hãy viết ;), chúng ta cần một chuỗi bit có độ dài 16. Cụ thể, sử dụng mã hóa ASCII

;)  =  00111011 00101001

Sử dụng QISKit, bạn sẽ thực hiện việc này bằng mã sau đây.

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

Tất nhiên, điều này không phải là rất lượng tử. Vì vậy, bạn có thể làm một chồng chất của hai biểu tượng cảm xúc khác nhau thay thế. Ví dụ đơn giản nhất là chồng chất;) với 8), vì các chuỗi bit cho các chuỗi này chỉ khác nhau trên các qubit 8 và 9.

;)  =  00111011 00101001
8)  =  00111000 00101001

Vì vậy, bạn có thể chỉ cần thay thế các dòng

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

từ trên với

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

Hadamard tạo ra sự chồng chất 01, và chú thích biến nó thành sự chồng chất 0011trên hai qubit. Đây là sự chồng chất cần thiết duy nhất cho ;)8).

Nếu bạn muốn thấy một triển khai thực tế của việc này, nó có thể được tìm thấy trong hướng dẫn QISKit (tiết lộ đầy đủ: nó được viết bởi tôi).


Tôi nhận được 404 cho liên kết đó. Bạn đã di chuyển các tập tin ở nơi khác?
klenium

Có vẻ như hướng dẫn vừa được cập nhật. Tôi đã thay đổi liên kết, vì vậy nó sẽ hoạt động ngay bây giờ.
James Wootton

1

Tôi sẽ đề xuất trình tạo số ngẫu nhiên 1 bit (hoàn hảo). Nó gần như dễ dàng tầm thường:

|0H|0|1

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.