Một chương trình lượng tử rất đơn giản sẽ trông như thế nào?


76

Trước thông báo về chip quang tử lượng tử lập trình đầu tiên trên thế giới , tôi đã tự hỏi không biết phần mềm nào cho máy tính sử dụng sự vướng víu lượng tử sẽ như thế nào. Một trong những chương trình đầu tiên tôi từng viết là một cái gì đó như

for i = 1 to 10
  print i
next i

Bất cứ ai cũng có thể đưa ra một ví dụ về mã đơn giản có thể so sánh sẽ sử dụng chip quang tử lượng tử (hoặc phần cứng tương tự), bằng mã giả hoặc ngôn ngữ cấp cao? Tôi đang gặp khó khăn khi thực hiện bước nhảy khái niệm từ lập trình truyền thống sang vướng mắc, v.v.


liên kết của bạn bị hỏng
Suresh Venkat

1
+1 và cho câu hỏi này. Tôi rất tò mò về một ngôn ngữ lập trình theo một mô hình khác với ngôn ngữ của Turing Machines, tuy nhiên đến nay chúng ta có thể thực sự thực thi mã trong một máy tính lượng tử.
Janoma

Câu trả lời:


60

Caveat Emptor: những điều sau đây thiên vị rất nhiều về nghiên cứu và quan điểm của riêng tôi về lĩnh vực QC. Điều này không cấu thành sự đồng thuận chung của lĩnh vực này và thậm chí có thể chứa một số tự quảng cáo.

Vấn đề của việc hiển thị một 'thế giới xin chào' của điện toán lượng tử là về cơ bản chúng ta vẫn còn cách xa máy tính lượng tử như Leibnitz hoặc Babbage từ máy tính hiện tại của bạn. Mặc dù chúng ta biết làm thế nào họ nên vận hành trên lý thuyết, không có cách tiêu chuẩn nào thực sự xây dựng một máy tính lượng tử vật lý. Một tác dụng phụ của điều đó là không có mô hình lập trình duy nhất của điện toán lượng tử. Sách giáo khoa như Nielsen et al. sẽ hiển thị cho bạn sơ đồ 'mạch lượng tử', nhưng khác với các ngôn ngữ lập trình chính thức: chúng có một chút 'vẫy tay' trên các chi tiết như điều khiển cổ điển hoặc xử lý kết quả đầu vào / đầu ra / đo lường.

Điều phù hợp với tôi nhất trong nghiên cứu của tôi với tư cách là một nhà khoa học máy tính ngôn ngữ lập trình, và để đưa ý kiến ​​của QC đến với nhà khoa học máy tính khác, là sử dụng mô hình QC đơn giản nhất mà tôi gặp phải.

Chương trình điện toán lượng tử đơn giản nhất mà tôi đã thấy có chứa tất cả các yếu tố thiết yếu là một chương trình ba hướng dẫn nhỏ trong mô hình lập trình lượng tử đơn giản nhất mà tôi đã gặp. Tôi sử dụng nó như bạn sẽ là một 'thế giới xin chào' để có được những điều cơ bản.

Cho phép tôi đưa ra bản tóm tắt đơn giản hóa nhanh chóng về Tính toán đo lường của Danos et al. 1 dựa trên máy tính lượng tử một chiều 2 : một qubit bị phá hủy khi đo, nhưng đo nó ảnh hưởng đến tất cả các qubit khác bị vướng vào nó. Nó có một số lợi ích về mặt lý thuyết và thực tiễn so với các máy tính lượng tử 'dựa trên mạch' như được nhận ra bởi chip quang tử, nhưng đó là một cuộc thảo luận khác.

Hãy xem xét một máy tính lượng tử chỉ có năm hướng dẫn: N, E, M, X và Z. "Ngôn ngữ lắp ráp" của nó tương tự như máy tính thông thường của bạn, sau khi thực hiện một lệnh, nó sẽ chuyển sang hướng dẫn tiếp theo trong chuỗi. Mỗi hướng dẫn có một định danh qubit mục tiêu, chúng tôi chỉ sử dụng một số ở đây và các đối số khác.

N 2          # create a new quantum bit and identify it as '2'
E 1 2        # entangle qubits '1' and '2', qubit 1 already exists and is considered input
M 1 0        # measure qubit '1' with an angle of zero  (angle can be anything in [0,2pi]
             # qubit '1' is destroyed and the result is either True or False
             # operations beyond this point can be dependent on the signal of '1'
X 2 1        # if the signal of qubit '1' is True, execute the Pauli-X operation on qubit '2'

Do đó, chương trình trên tạo ra một ancilla, làm vướng víu với qubit đầu vào, đo đầu vào và tùy thuộc vào kết quả đo thực hiện một thao tác trên ancilla. Kết quả là qubit 2 hiện chứa trạng thái của qubit 1 sau khi hoạt động của Hadamard .

Ở trên tự nhiên ở mức thấp đến mức bạn sẽ không muốn mã hóa nó. Lợi ích của phép tính đo lường là nó giới thiệu 'mẫu', một số loại macro có thể kết hợp cho phép bạn soạn các thuật toán lớn hơn như bạn làm với các chương trình con. Bạn bắt đầu với các mẫu 1 hướng dẫn và phát triển các mẫu lớn hơn từ đó.

Thay vì một chuỗi lệnh giống như trình biên dịch chương trình, người ta cũng thường viết chương trình dưới dạng biểu đồ:

 input                .........
    \--> ( E ) ---> (M:0)     v
(N) ---> (   ) ------------> (X) ---> output

trong đó mũi tên đầy đủ là phụ thuộc qubit và mũi tên chấm là phụ thuộc 'tín hiệu'.

Sau đây là ví dụ Hadamard tương tự được thể hiện trong một công cụ lập trình nhỏ như tôi tưởng tượng một 'lập trình viên lượng tử' sẽ sử dụng.

Công cụ tính toán đo lường

chỉnh sửa: (thêm quan hệ với máy tính 'cổ điển') Máy tính cổ điển vẫn thực sự hiệu quả trong những gì chúng làm tốt nhất, và do đó, tầm nhìn là máy tính lượng tử sẽ được sử dụng để giảm tải một số thuật toán, tương tự như cách máy tính hiện tại giảm tải đồ họa cho GPU. Như bạn đã thấy ở trên, CPU sẽ điều khiển máy tính lượng tử bằng cách gửi cho nó một luồng lệnh và đọc lại kết quả đo từ các 'tín hiệu' boolean. Bằng cách này, bạn có sự phân tách chặt chẽ giữa điều khiển cổ điển bởi CPU và trạng thái lượng tử và các hiệu ứng trên máy tính lượng tử.

Ví dụ, tôi sẽ sử dụng bộ đồng xử lý lượng tử của mình để tính toán một boolean hoặc cointoss ngẫu nhiên. Máy tính cổ điển mang tính quyết định, vì vậy nó rất tệ trong việc trả về một số ngẫu nhiên tốt. Mặc dù vậy, máy tính lượng tử vốn đã có xác suất, tất cả những gì tôi phải làm để có được 0 hoặc 1 ngẫu nhiên là đo ra một qubit cân bằng như nhau. Giao tiếp giữa CPU và 'QPU' sẽ trông giống như thế này:

 qrand()       N 1; M 1 0;
 ==>  | CPU | ------------> | QPU |  ==> { q1 } ,  []
                 start()
      |     | ------------> |     |  ==> { } , [q1: 0]
                 read(q1)         
      |     | ------------> |     |
                  q1: 0 
 0    |     | <-----------  |     |
 <==

Trường hợp { ... }là bộ nhớ chứa qubit lượng tử của QPU và [...]là cổ điển (tín hiệu) bộ nhớ của nó có chứa các phép toán luận.


  1. Danos và cộng sự. Phép tính. arXiv (2007) tập. định lượng
  2. Raussendorf và Briegel. Một máy tính lượng tử một chiều. Thư đánh giá vật lý (2001) tập. 86 (22) trang 5188-5191

Thảo luận tuyệt vời về chủ đề, cảm ơn, Thịt bò. Btw, OP nói về "Tôi đang gặp khó khăn khi thực hiện bước nhảy khái niệm từ lập trình truyền thống sang vướng mắc, v.v." Vì vậy, một cái gì đó giúp trong quá trình chuyển đổi nên được hoan nghênh.
Kris

Bạn nói đúng, tôi dường như thực sự đã bỏ lỡ phần đó, vì xấu hổ: / Thêm một đoạn.≈
Thịt bò

"Hãy xem xét một máy tính lượng tử chỉ có năm hướng dẫn: N, E, M, X và Z." không có lời giải thích về chỉ dẫn Z :(
Fernando Gonzalez Sanchez

Z rất giống X;) en.wikipedia.org/wiki/Pauli_matrices Thao tác X biến vectơ [ab] thành [ba], phép toán Z biến nó thành [a -b].
Thịt bò

21

Tôi giả sử rằng libquantum của C , đơn nguyên lượng tử của Haskell hoặc Lượng tử của Perl :: Sự vướng víu đều đại diện cho tính toán lượng tử một cách trung thực. Bạn có thể nhìn vào ví dụ của họ.

Nói chung, bạn mô tả một thuật toán lượng tử như một thuật toán cổ điển áp dụng một loạt các toán tử tuyến tính cho một vị trí siêu đại diện cho trạng thái của hệ thống lượng tử của bạn. Các bài báo thường mô tả một mạch với các dòng cho các bit / thanh ghi lượng tử và các hộp cho các toán tử tuyến tính.

Tất nhiên, phần khó không mô tả thuật toán mà hiểu lý do tại sao nó hoạt động, giống như các thuật toán xác suất. Tôi luôn coi thuật toán của Grover khá dễ hiểu. Bạn cũng có thể đọc về biến đổi Lượng tử Fourier được sử dụng bởi Thuật toán của Shor .


11

Nó trông như thế này: nhập mô tả hình ảnh ở đây

Bạn cũng có thể có quyền truy cập vào một bộ xử lý lượng tử thực sự. Tới đây và đăng ký: http://www.research.ibm.com/quantum/

Nó cũng bao gồm một trình giả lập để bạn có thể kiểm tra mà không cần sử dụng phần cứng thực tế hoặc sử dụng tín dụng (miễn phí) để chạy trên phần cứng thực tế.



3

Tôi nghĩ rằng câu trả lời là "Rất giống một chương trình cổ điển đơn giản."

Nếu chúng ta coi phép tính lambda được gõ đơn giản (với các sản phẩm) là trái tim của lập trình cổ điển, thì chúng ta có thể khai thác rằng đó là lý thuyết kiểu bên trong của một thể loại cartesian kín, cho chúng ta một con trỏ.

viết sai rồik

Vì vậy, nếu STLC dành cho các thể loại đóng cartesian, thì các thể loại đơn hình đối xứng khép kín là gì? Chà, chúng ta biết rằng logic bên trong của một thể loại đơn hình đối xứng là MILL . Vì vậy, những gì chúng ta cần là một lý thuyết loại tương ứng với MILL - một lý thuyết loại tuyến tính.

Bước ra khỏi những điều vô nghĩa trừu tượng, chúng ta nhận được gì với một lý thuyết loại tuyến tính? Tuyến tính. Chúng tôi nhận được tuyến tính của tài nguyên. Và đây chính xác là những gì chúng ta muốn. Bạn không được phép sao chép bit lượng tử. Bạn không được phép đo lường ngầm. Và tuyến tính có nghĩa là bạn không thể làm một trong những điều này trong quá trình giảm.

Đã có một số nghiên cứu về lý thuyết loại tuyến tính, nhưng không phải là một tấn. Tôi đã nhận được một số ý tưởng trong bài viết này từ bài báo này: Vật lý, Cấu trúc liên kết, Logic và Tính toán: Một viên đá Rosetta của Mike Stay và John Baez, đi sâu vào chi tiết hơn nhiều so với cách viết tay của tôi.


0

Có lẽ tôi nên bắt đầu với một triển khai truy cập "chia cho n nhỏ" đơn giản để bắt đầu.

Ví dụ: được cung cấp nguồn 10GHz, tạo đầu ra 5GHz (nhưng những con số này là tùy ý và chỉ nhằm minh họa khái niệm này).

Điều này cho phép chúng tôi bỏ qua các vấn đề như lưu trữ và kiến ​​trúc Von Neumann, và cho phép chúng tôi tập trung vào việc các thành phần có thực sự làm bất cứ điều gì dễ hiểu hay không.

Sau đó, mục tiêu tiếp theo sẽ là xây dựng một tiết mục nhỏ "n nhỏ" (nhưng tôi cũng sẽ lắng nghe phản hồi từ các nhà nghiên cứu của mình - nếu họ cảm thấy những mục tiêu nhỏ khác sẽ có kết quả ngay lập tức, tôi chắc chắn muốn hiểu những gì họ đã nói với tôi.)

Các mục tiêu dài hạn sẽ bao gồm các cơ chế để bơm thông tin vào và ra khỏi hệ thống, và giữ thông tin đó đủ lâu để sử dụng nó.

(Có lẽ đáng để nhớ rằng các chương trình máy tính ban đầu đều "cứng". Chỉ sau khi có kinh nghiệm sâu rộng với những hệ thống đó, chúng tôi mới có thể triển khai các chương trình được lưu trữ.)


-6

Tôi nghĩ rằng việc lập trình một máy tính lượng tử cần được nhìn từ một quan điểm khác là lập trình hướng đối tượng bình thường.

QC có cùng khả năng của bộ não để suy nghĩ và quyết định. Khả năng suy nghĩ có nghĩa là sức mạnh của việc khai thác dữ liệu một nguồn dữ liệu sẽ là lựa chọn khả thi và quyết định chọn từ tất cả các trạng thái có thể.

Một phần mềm tại thời điểm này sẽ cần phải được kiến ​​trúc theo cách mà các qubit đại diện cho nguồn dữ liệu có thể được khai thác dữ liệu và vướng vào các nhóm dữ liệu khác.

QC nên có một công cụ khai thác dữ liệu để xử lý việc đọc dữ liệu, liên kết các tùy chọn khác nhau với nhóm nguồn dữ liệu khác nhau để cung cấp thông tin, đọc tất cả các trạng thái có thể và chọn tiếp tục.

Đó là cách bộ não của chúng ta hoạt động. QC có thể hiểu và hành động phù hợp với định luật Cơ học lượng tử, điều đó có nghĩa là bạn đưa ra một vấn đề và QC chỉ cho bạn tất cả các giải pháp có thể để giải quyết nó.

QC có mạnh đến mức nào không?

https://www.cs.rutgers.edu/~mlittman/auge/openhouse11.pdf đây là điểm để bắt đầu, sau đó tạo một trình kiểm tra dữ liệu để xây dựng thiết bị lượng tử với các cổng, v.v., một trình đọc được kết nối với trình kiểm tra dữ liệu, để đọc và cung cấp phản hồi. dữ liệu máy chủ lưu trữ thành phần dữ liệu lượng tử và phạm vi kiến ​​thức nơi trình kiểm tra dữ liệu hành động.

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.