N-bit Toffoli kapısını nasıl uygulayabilirim?


17

Ben n kubit tarafından kontrol edilen bir Toffoli kapısı oluşturmak ve QISKit içinde uygulamak istiyorum. Bu yapılabilir mi? Öyleyse nasıl?


Soru-Cevap için teşekkürler. Sizi burada görmek güzel Ali!
James Wootton

Yanıtlar:


19

Bunu yapmanın basit bir yolu, Nielsen & Chuang'ın Şekil 4.10'da gösterilmektedir. n

Burada U herhangi bir tek-kubit dönüş olabilir (bu durumda bir X geçidi).

Bu devre şu şekilde çalışır: U'yı sadece tüm kontrol kubitlerinin AND'si 1 ise hedef kubite uygulamak istiyoruz. Normal bir Toffoli bize 2 kubitin AND'ini verir. Bu yüzden birkaç Toffolis zincirleyerek, c1.c2.c3.c4.c5 elde edebiliriz, ara sonuçların saklanması için bazı "iş" (veya ancilla) kübitlerinin tanıtılmasıyla. Nihai CU'yu uyguladıktan sonra, nihai sonucu hedefe ulaşırız. Şimdi ara çalışma kubitlerini hesaplamalarını geri alarak ve | 0> durumuna döndürerek temizleyebiliriz. Bu tersinir hesaplama modeli "hesaplama-kopyalama-işlem yapma" yöntemi olarak bilinir ve ilk olarak 1973'te Charlie Bennett tarafından önerilmiştir .

Devreyi oluşturmak ve görselleştirmek için QISKit kodu şöyledir:

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)

Verim:

qiskit tarafından üretilen devre


8

Ancilla qubits kullanmayan, ancak sadece kontrollü değil daha karmaşık kapılar gerektiren bir yöntem eklemek istiyorum. Bu yöntemin ilk olarak Barenco ve ark. ark. bu yazıda Lemma 7.5: resim açıklamasını buraya girin

Nerede V2=U. Bu durumda,V2=X, ve dolayısıyla

V=12(1+ben1-ben1-ben1+ben) .

Bu özyinelemeli bir tanımdır, bu nedenle kontrol n kübit geçidi kontrol n-1 kubit geçidi olarak tanımlanır. Bu, iki Qubit geçidi CNOT'a ulaşana kadar devam edecektir.

Bununla birlikte, bu uygulama biraz zordur, ancak göreceli bir fazı toplamaya aldırmazsa daha basit bir uygulama vardır (aynı makalenin Lemma 7.9'una bakın).

Gibi bir kapı uygulamak VQISKIT'te gelişmiş tek kubit kapılarını kullanmanız gerekecektir .


Cirq üzerinde bu kapıyı uygulamak için kimse çalıştı mı?
Enrique Segura

5

Qiskit'in QuantumCircuit , çeşitli modlarla çoklu kontrol Toffoli kapısı oluşturmak için mct yöntemine sahiptir : temel, temel-kirli-ancilla, gelişmiş, noancilla. Örneğin 3 kontrol kubalı Toffoli kapısı:

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)

Çıktı:

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 ├
           └───┘        └───┘└───┘       └───┘└───┘        └───┘└───┘       └───┘└───┘        └───┘└───┘       └───┘└───┘        └───┘
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.