2017-09-24 4 views
0

Je suis novice en informatique quantique et j'essaie de codifier un 2bit Cuccaro et tout l'additionneur comme décrit ici: https://arxiv.org/pdf/quant-ph/0410184.pdf et ici: . (J'ai les liens du Guide complet des utilisateurs).QISKit Mise en œuvre de l'Adder Cuccaro

J'ai peu de succès et j'espérais que quelqu'un pourrait me signaler la cause de mon erreur. Mon seul vrai soupçon est qu'il y a des portes inactives implicites que je dois ajouter et qui n'ont pas été mentionnées dans les journaux.

def _maj(circuit, cin, a, b): 
    circuit.cx(a, b) 
    circuit.cx(cin, b) 
    circuit.ccx(cin, a, b) 

#2NOT uma 
def _uma2(circuit, a, b, t): 
    circuit.ccx(a, b, t) 
    circuit.cx(a, t) 
    circuit.cx(b, a) 

def _add2bit(circuit, a, b, cin, cout): 
    _maj(circuit, cin, a[0], b[0]) 
    _maj(circuit, b[0], a[1], b[1]) 
    circuit.cx(cout, b[1]) 
    _uma2(circuit, b[0], a[1], b[1]) 
    _uma2(circuit, cin, a[0], b[0]) 

def convert_num_to_regs(circuit, n_str, regs): 
    for i, v in enumerate(reversed(n_str)): 
     v = int(v) 
     if v == 1: 
      circuit.x(regs[i]) 


program = QuantumProgram() 

qr = program.create_quantum_register("qr", 6) 
cr = program.create_classical_register("cr", 3) 
qc = program.create_circuit("adder", [qr], [cr]) 


#inputs 
a = '01' 
b = '01' 



a_regs = [] 
b_regs = [] 
c_in = qr[0] 
z = qr[5] 

for i in range(2): 
    a_regs.append(qr[(2*i) + 1]) 
    b_regs.append(qr[(2*i+1) + 1]) 

convert_num_to_regs(qc, a, a_regs) 
convert_num_to_regs(qc, b, b_regs) 

_add2bit(qc, a_regs, b_regs, c_in, z) 

qc.measure(b_regs[0], cr[0]) 
qc.measure(b_regs[1], cr[1]) 
qc.measure(z, cr[2]) 

Répondre

0

Compris! Ma syntaxe pour CNOT était inversée. Nécessaire pour ouvrir un exemple dans Composer et voir les instructions QASM