Me preguntaba si hay una manera de componer un programa con múltiples circuitos cuánticos sin tener el registro reinicializado en para cada circuito.
Específicamente, me gustaría ejecutar un segundo circuito cuántico después de ejecutar el primero, como en este ejemplo:
qp = QuantumProgram()
qr = qp.create_quantum_register('qr',2)
cr = qp.create_classical_register('cr',2)
qc1 = qp.create_circuit('B1',[qr],[cr])
qc1.x(qr)
qc1.measure(qr[0], cr[0])
qc1.measure(qr[1], cr[1])
qc2 = qp.create_circuit('B2', [qr], [cr])
qc2.x(qr)
qc2.measure(qr[0], cr[0])
qc2.measure(qr[1], cr[1])
#qp.add_circuit('B1', qc1)
#qp.add_circuit('B2', qc2)
pprint(qp.get_qasms())
result = qp.execute()
print(result.get_counts('B1'))
print(result.get_counts('B2'))
Desafortunadamente, lo que obtengo es el mismo resultado para las dos ejecuciones (es decir, un recuento de 11
para B1
y en B2
lugar de 11
y 00
para la segunda, como si B2
se ejecutara en un estado completamente nuevo inicializado 00
después) B1
.
algorithm
programming
qiskit
asdf
fuente
fuente
Respuestas:
En Qiskit puedes componer dos circuitos para hacer un circuito más grande. Puede hacer esto simplemente usando el
+
operador en los circuitos.Aquí está su programa reescrito para ilustrar esto (nota: necesita la última versión de Qiskit para esto, actualice con
pip install -U qiskit
).Puede ver que qc3 es una concatenación de q1 y q2.
Rendimientos:
Ahora, parece que desea sondear el estado dos veces: una donde termina qc1 y otra cuando termina qc2. Puede hacer esto en un simulador insertando
snapshot
comandos. Esto guardará el vector de estado en un punto dado del circuito. No colapsa el estado.Ahora puede ejecutar
qc3
en un simulador.Rendimientos: [0. + 0.j 0. + 0.j 0. + 0.j 1. + 0.j] [1. + 0.j 0. + 0.j 0. + 0.j 0. + 0.j] {'00': 1024}
Entonces el estado vuelve a | 00> como se esperaba.
fuente
Una vez que realiza una medición, la función de onda del estado / registro cuántico colapsa y pierde su naturaleza cuántica. No tiene sentido aplicar otro circuito en él.
fuente