Làm cách nào tôi có thể triển khai cổng Toffoli n-bit?


17

Tôi muốn tạo một cổng Toffoli được điều khiển bởi n qubit và triển khai nó trong QISKit. Điều này có thể được thực hiện? Nếu vậy thì thế nào?


Cảm ơn đã hỏi đáp. Rất vui được gặp bạn ở đây Ali!
James Wootton

Câu trả lời:


18

Một cách đơn giản để làm điều này được minh họa trong Hình 4.10 của Nielsen & Chuang. n-

Trong đó U có thể là bất kỳ phép quay qubit đơn nào (trong trường hợp này là cổng X).

Mạch này hoạt động như thế này: Chúng tôi chỉ muốn áp dụng U cho qubit mục tiêu nếu AND của tất cả các qubit kiểm soát là 1. Một Toffoli bình thường cung cấp cho chúng tôi AND của 2 qubit. Vì vậy, bằng cách kết nối một vài Toffolis, chúng ta có thể nhận được c1.c2.c3.c4.c5, với điều kiện là một số qubit "hoạt động" (hoặc ancilla) đã được giới thiệu để lưu trữ kết quả trung gian. Sau khi áp dụng CU cuối cùng, chúng tôi nhận được kết quả cuối cùng trong mục tiêu. Bây giờ chúng ta có thể dọn sạch các qubit công việc trung gian bằng cách hoàn tác các tính toán của chúng, đưa chúng trở về trạng thái | 0>. Mô hình này tính toán đảo ngược được gọi là phương pháp "tính toán-copy-uncompute", và lần đầu tiên được đề xuất bởi Charlie Bennett vào năm 1973 .

Dưới đây là mã QISKit để xây dựng mạch và trực quan hóa nó:

from qiskit import QuantumRegister, QuantumCircuit

n = 5  # must be >= 2

ctrl = QuantumRegister(n, 'ctrl')
anc = QuantumRegister(n-1, 'anc')
tgt = QuantumRegister(1, 'tgt')

circ = QuantumCircuit(ctrl, anc, tgt)

# compute
circ.ccx(ctrl[0], ctrl[1], anc[0])
for i in range(2, n):
    circ.ccx(ctrl[i], anc[i-2], anc[i-1])

# copy
circ.cx(anc[n-2], tgt[0])

# uncompute
for i in range(n-1, 1, -1):
    circ.ccx(ctrl[i], anc[i-2], anc[i-1])
circ.ccx(ctrl[0], ctrl[1], anc[0])    

from qiskit.tools.visualization import circuit_drawer
circuit_drawer(circ)

Sản lượng:

mạch tạo ra qiskit


7

Tôi muốn thêm một phương thức không sử dụng qubit ancilla, nhưng yêu cầu cổng phức tạp hơn chỉ kiểm soát - không. Tôi tin rằng phương pháp này lần đầu tiên được trình bày bởi Barenco et. al. trong bài báo này , Bổ đề 7.5: nhập mô tả hình ảnh ở đây

Ở đâu V2= =BạnV2= =X

V= =12(1+Tôi1-Tôi1-Tôi1+Tôi) .

Đây là một định nghĩa đệ quy, vì vậy cổng n qubit điều khiển được xác định theo thuật ngữ của cổng qubit n-1 điều khiển. Điều này sẽ tiếp tục cho đến khi bạn đạt đến hai cổng qubit CNOT.

Việc thực hiện này hơi khó khăn, tuy nhiên, tồn tại một cách đơn giản hơn nếu người ta không ngại thu thập một pha tương đối (xem Bổ đề 7.9 của cùng một bài viết).

V


Có ai đã làm việc để thực hiện cổng này trên Cirq?
Enrique Segura

5

Qiskit của QuantumCircuitmct phương pháp để xây dựng nhiều kiểm soát cổng toffoli với nhiều chế độ: cơ bản, cơ bản-dơ-Ancilla, tiên tiến, noancilla. Ví dụ cổng Toffoli với 3 qubit kiểm soát:

from qiskit import QuantumCircuit, QuantumRegister

controls = QuantumRegister(3, "c_qb")
target = QuantumRegister(1, "t_qb")
circuit = QuantumCircuit(controls, target)

circuit.mct(controls, target[0], None, mode='advanced')

print(circuit)

Đầu ra:

c_qb_0: |0>──────■────────■────────────────■──────────────────────────────────■──────────────────────────────────■────────────────────
                 │      ┌─┴─┐            ┌─┴─┐                                │                                  │                    
c_qb_1: |0>──────┼──────┤ X ├──────■─────┤ X ├──────■────────■────────────────┼─────────────────■────────────────┼────────────────────
                 │      └───┘      │     └───┘      │      ┌─┴─┐            ┌─┴─┐             ┌─┴─┐            ┌─┴─┐                  
c_qb_2: |0>──────┼─────────────────┼────────────────┼──────┤ X ├──────■─────┤ X ├──────■──────┤ X ├──────■─────┤ X ├──────■───────────
           ┌───┐ │-pi/4 ┌───┐┌───┐ │pi/4 ┌───┐┌───┐ │-pi/4 ├───┤┌───┐ │pi/4 ├───┤┌───┐ │-pi/4 ├───┤┌───┐ │pi/4 ├───┤┌───┐ │-pi/4 ┌───┐
t_qb_0: |0>┤ H ├─■──────┤ H ├┤ H ├─■─────┤ H ├┤ H ├─■──────┤ H ├┤ H ├─■─────┤ H ├┤ H ├─■──────┤ H ├┤ H ├─■─────┤ H ├┤ H ├─■──────┤ H ├
           └───┘        └───┘└───┘       └───┘└───┘        └───┘└───┘       └───┘└───┘        └───┘└───┘       └───┘└───┘        └───┘
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.