ฉันจะใช้เกต Toffoli ได้อย่างไร


17

ฉันต้องการสร้างประตู Toffoli ที่ควบคุมโดย n qubits และนำไปใช้ใน QISKit สามารถทำได้หรือไม่ ถ้าเป็นเช่นนั้นได้อย่างไร


ขอบคุณสำหรับคำถาม & คำตอบ ดีใจที่ได้พบคุณที่นี่อาลี!
James Wootton

คำตอบ:


19

วิธีง่ายๆในการทำสิ่งนี้แสดงไว้ในรูปที่ 4.10 ของ Nielsen & Chuang n-

โดยที่ U สามารถหมุนรอบควอตเดียว (ในกรณีนี้คือเกท X)

วงจรนี้ทำงานเช่นนี้: เราต้องการใช้ U กับ qubit เป้าหมายเฉพาะถ้าและของ qubits ควบคุมทั้งหมดเป็น 1 Toffoli ปกติให้เราและของ 2 qubits ดังนั้นโดยการผูกมัด Toffolis เราสามารถรับ c1.c2.c3.c4.c5 ด้วยการจับว่ามีการทำงานบางอย่าง (หรือ ancilla) qubits เพื่อเก็บผลลัพธ์ระดับกลาง หลังจากใช้ CU ขั้นสุดท้ายเราจะได้ผลลัพธ์สุดท้ายตามเป้าหมาย ตอนนี้เราสามารถทำความสะอาดงานกลางโดยการเลิกทำการคำนวณของพวกเขากลับไปที่สถานะ | 0> รูปแบบของการคำนวณแบบย้อนกลับนี้เป็นที่รู้จักกันในชื่อ "วิธีคำนวณ - คัดลอก - ไม่คำนวณ" และเป็นครั้งแรกที่เสนอโดย Charlie Bennett ในปี 1973ที่เสนอโดยชาร์ลีเบนเน็ตต์ในปี 1973

นี่คือรหัส QISKit เพื่อสร้างวงจรและเห็นภาพ:

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)

อัตราผลตอบแทน:

สร้างวงจร qiskit


8

ฉันต้องการเพิ่มวิธีการที่ไม่ใช้ ancilla qubits แต่ต้องการประตูที่ซับซ้อนกว่าการควบคุมเพียงอย่างเดียว ฉันเชื่อว่าวิธีนี้ถูกนำเสนอครั้งแรกโดย Barenco et อัล ในบทความนี้เลมม่า 7.5: ป้อนคำอธิบายรูปภาพที่นี่

V2=ยูV2=Xและด้วยเหตุนี้

V=12(1+ผม1-ผม1-ผม1+ผม) .

นี่เป็นนิยามแบบเรียกซ้ำดังนั้นการควบคุม n qubit gate ถูกกำหนดในแง่ของการควบคุม n-1 qubit สิ่งนี้จะดำเนินต่อไปจนกว่าคุณจะไปถึงประตูควิบิตทั้งสอง

การนำไปปฏิบัตินี้ค่อนข้างยาก แต่มีวิธีที่ง่ายกว่าหากไม่มีการเก็บรวบรวมเฟสที่สัมพันธ์กัน (ดูเลมม่า 7.9 ของบทความเดียวกัน)

เพื่อใช้เกทเช่น Vใน QISKIT คุณจะต้องใช้ประตู qubit เดียวขั้นสูง


มีใครทำงานในการใช้เกตนี้กับ Cirq บ้างไหม?
Enrique Segura

5

QuantumCircuitของ Qiskit มีวิธีmct ในการสร้างเกต Toffoli แบบควบคุมได้หลายแบบด้วยโหมดหลายโหมด: พื้นฐาน, ขั้นพื้นฐาน - สกปรก -Canilla, ขั้นสูง, noancilla ตัวอย่างเช่นประตู Toffoli ที่มีการควบคุม 3 qubits:

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)

เอาท์พุท:

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 ├
           └───┘        └───┘└───┘       └───┘└───┘        └───┘└───┘       └───┘└───┘        └───┘└───┘       └───┘└───┘        └───┘
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.