Làm thế nào để theo dõi các vướng mắc khi mô phỏng tính toán lượng tử?


9

Tôi đang cố gắng xây dựng một thư viện tính toán lượng tử như dự án đại học của tôi. Tôi vẫn đang học tất cả các khía cạnh của lĩnh vực Điện toán lượng tử. Tôi biết có những thư viện hiệu quả đã được mô phỏng lượng tử. Tôi chỉ muốn làm cho riêng mình, điều này sẽ giúp tôi nắm được một số khái niệm cốt lõi của Máy tính lượng tử.

Tôi biết rằng qubit có thể được lưu trữ với một 2 n mảng phức tạp phần tử. Ngoài ra, cổng n qubit là mảng 2D 2 n × 2 n . Vì vậy, sau đây là những nghi ngờ của tôi (chủ yếu liên quan đến sự vướng víu):n2nn2n×2n

  1. Khi nào tôi cần phải tìm ra sản phẩm tensor của cửa (như , đối với một 3 hệ thống qubit)? Có phải luôn luôn tính toán sản phẩm tenxơ của đơn hàng 2 n × 2 n , ngay cả khi các qubit không bị vướng mắc?IHI32n×2n

  2. Chỉ với một mảng phần tử (mà tôi lưu trữ các hệ số), tôi thực sự có thể tính toán được các qubit nào bị vướng mắc không? Hay tôi cần phải tạo một cấu trúc dữ liệu khác để lưu trữ thông tin vướng víu của n qubit của mình (về những qubit nào bị vướng)?2nn

  3. Là câu hỏi thứ 2 của tôi thực sự có liên quan? Tôi có cần theo dõi thông tin vướng mắc không? Ý tôi là, tôi không biết liệu nhân các cổng với hệ số có đủ hay không (ngay cả khi hệ thống bị vướng víu). Có lẽ nó chỉ liên quan tại thời điểm đo.


1
Nó phụ thuộc vào tối ưu hóa để theo dõi mô hình vướng víu là sớm hay không. Nếu bạn chỉ có 3 qubit, thì bạn sẽ không đạt được nhiều bằng cách nỗ lực đó để nó sẽ là "tối ưu hóa sớm". Vì vậy, hãy tự hỏi, làm thế nào bạn có thể thực sự cần điều này. n
AHusain

1
@HayhunXDA "Tôi biết những gì đang xảy ra về mặt vật lý, nhưng tôi không thể chuyển đổi nó thành dạng toán học". Theo như tôi biết, có nhiều quá trình vật lý dẫn đến tính toán lượng tử. Tôi nghĩ sẽ là một ý tưởng tốt nếu bạn mô tả chính xác một trong những quy trình vật lý mà bạn muốn mô phỏng (hoặc tất cả chúng, nếu bạn nghĩ rằng điều đó vẫn sẽ nằm trong phạm vi của câu hỏi). Tôi nghĩ rằng việc chỉ định điều này làm cho câu hỏi rõ ràng hơn và dễ trả lời hơn.
Thằn lằn rời rạc

1
Vui lòng chia câu hỏi này thành nhiều câu hỏi - tôi thấy ít nhất ba câu hỏi khác nhau.
thạch

3
@heather Tôi đồng ý với người đăng rằng đây thực sự là tất cả các câu hỏi là các khía cạnh khác nhau của cùng một điều. Tôi thực sự không thấy làm thế nào để cải thiện câu hỏi, nhưng tôi tin rằng tôi hiểu nó đủ tốt để đưa ra câu trả lời.
DaftWullie

2
@heather Tôi thực sự khuyên người điều hành không nên tự đặt câu hỏi ngoại trừ trong các trường hợp cực đoan (đọc: lạc đề hoặc spam một cách trắng trợn). Câu hỏi này, mặc dù hơi rộng có thể được trả lời hợp lý trong một bài. FWIW về cơ bản có hai câu hỏi ở đây: 1) Khi nào tính toán các sản phẩm tenxơ của cổng? 2) Làm thế nào để tính đến ảnh hưởng của sự vướng víu trong khi làm như vậy?
Sanchaya Dutta

Câu trả lời:


5

Chắc chắn là luôn luôn tính toán được ma trận đơn vị đầy đủ , và sau đó áp dụng nó cho vectơ trạng thái 2 n -entry. Nếu đó là những gì bạn chọn làm, đó là tất cả những gì bạn phải làm vì tất cả thông tin vướng mắc đều có trong vectơ đó. Một cách nhanh chóng và dễ dàng để xem nếu một qubit cụ thể bị vướng mắc là lấy dấu vết một phần của vectơ trạng thái (thuần túy) của bạn trên tất cả các qubit khác. Nếu ma trận kết quả là hạng 1, qubit đó ở trạng thái có thể tách rời, nếu không nó bị vướng.2n×2n2n

2n

Cải tiến hiệu quả

2n×2nO(2n)O(22n)

Uij|x1,2,ni,j|yi,jx{0,1}n2y{0,1}24×4UxU

Tôi tưởng tượng có những chiến lược khác người ta có thể đưa ra. Câu hỏi gợi ý từ câu hỏi ban đầu là theo dõi vướng víu. Điều này mang lại sự cải thiện về bộ nhớ và tốc độ khi bắt đầu tính toán, nhưng cuối cùng kết thúc là tương đương vì (có lẽ) mọi thứ trong máy tính lượng tử sẽ bị vướng vào.

Theo dõi vướng mắc

n|0nnUii|ψiU|ψi

VijV|ψi|ψjUi|ψi,jUI|ψi,jjk(i,j)kI

2n

Đây là một số mã giả rất thô có thể giúp truyền đạt ý nghĩa của tôi:

#initialise variables
entangled_blocks={{1},{2},{3},...,{n}}
quantum_states={{1,0},{1,0},...,{1,0}}

#apply action of each gate
for each gate
   for each gate_target
       target_block=entangled_blocks entry containing gate_target
   next gate_target
   if all target_blocks equal then
      apply gate on target_block (pad with identity on other qubits)
   else
      new_entangled_block=union(target_blocks)
      new_state_vec=tensor_product(quantum_states for each target block)
      apply gate on new_state_vec (pad with identity on other qubits)
      replace all target_blocks in entangled_blocks with new_entangled_block
      replace all quantum_states(all target blocks) with new_state_vec
   end if
next gate

Sự lựa chọn khác

(Không có nghĩa là toàn diện)

Bạn có thể thích đọc về các Trạng thái Sản phẩm Ma trận, một cách hay để gói thông tin về các trạng thái không quá vướng víu và có thể cung cấp một lộ trình thay thế cho bạn, tùy thuộc vào chính xác những gì bạn đang cố gắng đạt được.


Những gì tôi đang cố gắng để đạt được là tất nhiên hiệu quả. Ngoài ra, tôi muốn biết chính xác làm thế nào tất cả các quá trình này hoạt động (vì tôi là một người mới). Vì vậy, trong thực tế, sự lựa chọn tốt hơn chỉ là lưu trữ tất cả các hệ số qubit với nhau trong một mảng (bản ghi), phải không? Cảm ơn vì đã trả lời.
Midhun XDA

2n×2n2n

@HayhunXDA Về hiệu quả, mọi thứ về cơ bản là tương đương vì một máy tính lượng tử cuối cùng sẽ khiến mọi thứ bị vướng mắc. Để tìm hiểu những gì đang diễn ra, có lẽ bạn nên bắt đầu tốt hơn với mảng đơn tương ứng với vectơ trạng thái. Nhưng, bằng cách sử dụng theo dõi vướng víu, bạn có thể đạt được một số cải tiến về tốc độ và bộ nhớ sẽ cho phép mô phỏng dài hơn một chút.
DaftWullie

@NorbertSchuch Tôi nói rằng "đủ" để làm điều đó, đó là sự thật. Tôi đã thêm một số chi tiết về cách tránh nó. Bạn có thể biết về chiến thuật khác, tốt hơn.
DaftWullie
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.