Comprobaremos que es lo mismo aplicar tres CX que una puerta SWAP
La puerta SWAP intercambia los estados de dos qubits; pues bien, vamos a comprobar que aplicar tres CX intercambiando los qubit de control y objetivo es equivalente que aplicar una puerta SWAP.
Al igual que en el anterior ejercicio trataremos de explicarlo paso a paso.
# CIRCUITO-04 : PUERTA SWAP = TRIPLE CX # (La puerta SWAP intercambia los estados de dos qubits) from qiskit import QuantumCircuit # Importa la clase QuantumCircuit de Qiskit from qiskit_aer import Aer # Importa el módulo Aer de Qiskit Aer qc = QuantumCircuit(2, 2) # Definimos un circuito con dos qubit y dos bit para realizar las mediciones qc.x(1) # Puerta X para poner a 1 el quibit qc.cx(0, 1), qc.cx(1, 0), qc.cx(0, 1) # Tres CX intercambiando objetos y objetivos qc.swap(0, 1) # Puerta SWAP (intercambiará los valores) qc.measure (0,0) qc.measure (1,1) qc.draw('mpl')
# CIRCUITO 04 : AHORA PINTAREMOS EL CIRCUITO CON LINEAS VERTICALES PARA COMENTARLAS import matplotlib.pyplot as plt fig, ax = plt.subplots() qc.draw(output='mpl', ax=ax) # Agregar líneas verticales y comentarios # Estos valores de x y y necesitan ser ajustados dependiendo de la posición en el circuito donde quieres la línea/comentario ax.axvline(x=0.3, color='r', linestyle='--') ax.text(0.2, 1.3, '(1)', rotation=90, verticalalignment='center', color='red') ax.axvline(x=1.3, color='b', linestyle='--') ax.text(1.2, 1.3, '(2)', rotation=90, verticalalignment='center', color='blue') ax.axvline(x=2.3, color='r', linestyle='--') ax.text(2.2, 1.3, '(3)', rotation=90, verticalalignment='center', color='red') ax.axvline(x=3.3, color='b', linestyle='--') ax.text(3.2, 1.3, '(4)', rotation=90, verticalalignment='center', color='blue') ax.axvline(x=4.3, color='r', linestyle='--') ax.text(4.2, 1.3, '(5)', rotation=90, verticalalignment='center', color='red') # Mostrar el gráfico plt.show()
Veamos cómo deberían ir los estados paso a paso:
# CIRCUITO-04 : LO EJECUTAMOS 10.000 VECES Y VEMOS LOS RESULTADOS # Configuración del simulador cuántico Procesando = Aer.get_backend('qasm_simulator') # Obtiene el backend 'qasm_simulator' de Qiskit Aer # Ejecución del circuito cuántico en el simulador cuántico Proceso = Procesando.run(qc, shots=10000).result() # Ejecuta el circuito cuántico 10000 veces y obtiene los resultados # Obtención de los resultados de la ejecución Resultados = Proceso.get_counts(qc) # Obtiene los conteos de los resultados de la ejecución del circuito print(Resultados) # Imprime los resultados en la consola
{'10': 10000}
Nos devuelve siempre '10', que es lo que había antes de aplicar las tres CX y la SWAP.
Si probamos quitando la SWAP o quitando las tres CX veremos que lo que hace es intercambiar
los estados entre los qubits, y devolverá '01'.