Puertas clásicas NO lógicas con circuito cuántico usando Qiskit en Python

En este artículo, vamos a ver cómo aplicar la puerta NOT en una entrada dada (0 o 1) usando puertas cuánticas, tenemos que convertir 0 a 1 y 1 a 0. Esto se puede hacer fácilmente en las computadoras clásicas, pero ¿cómo? ¿Podemos hacer esto en computadoras cuánticas? Tenemos que representar la entrada en qubits y luego aplicamos la operación X (representación de la puerta NOT en la computadora cuántica) en ese qubit y luego devolvemos el qubit resultante

QISKIT es el paquete que se encuentra entre los algoritmos cuánticos de un lado y el dispositivo cuántico físico del otro lado. Traduce los lenguajes de programación comunes como Python al lenguaje de máquina cuántica. Esto significa que cualquier persona fuera del laboratorio de IBM Q puede programar una computadora cuántica.

Para instalar este módulo, ejecute estos comandos en la terminal:

pip3 install qiskit

Acercarse:

  • Cree un circuito cuántico qc con un solo qubit clásico y bit usando la función incorporada QuantumCircuit que toma el primer parámetro «no. de qubits en entero” y segundo parámetro “no. de bits en entero” y devolver el circuito cuántico. (QuantumCircuit(1, 1) devuelve un circuito cuántico con un qubit q[0] y un bit c[0])
  • Representar la entrada en qubits (‘0’ como estado de qubit |0> y para ‘1’ como |1> ):
    • Restablezca qc qubit usando qiskit functionreset().
    • Dado que el qubit es inicialmente |0⟩, entonces para la entrada de ‘0’, no necesitamos hacer nada.
    • Para una entrada de ‘1’, hacemos una X para rotar |0⟩ a |1⟩. La función x() es aplicar la puerta NOT en un parámetro dado.
  • Coloque una barrera entre el estado de entrada y la operación de la puerta usando barrier().
  • Aplicar NOT en qubit 0, podemos hacer NOT en él usando x
  • poner una barrera entre el funcionamiento de la puerta y la medición
  • Finalmente, extraemos la salida |0⟩/|1⟩ del qubit q[0] y la codificamos en el bit c[0] usando la función qiskit measure().
  • Para visualizar y ver el diagrama del circuito, use la función qiskit draw().

A continuación se muestra la implementación:

Python3

# importing qiskit
from qiskit import * 
  
# importing plot_histogram to visualize Output
from qiskit.visualization import plot_histogram 
import numpy as np
  
  
def NOT(inp):
  
    # Creating a quantum circuit with a 
    # single qubit and a single classical bit using 
    qc = QuantumCircuit(1, 1)
    qc.reset(0)
  
    # We encode '0' as the qubit state |0⟩, and '1' as |1⟩
    # Since the qubit is initially |0⟩, so for
    # an input of 0, we don't need to do anything.
    # For an input of '1', we do an x to rotate the |0⟩ to |1⟩
    # The x() function is to apply NOT gate on given parameter.
    if inp == '1':
          
        # applying NOT on qubit 0.
        qc.x(0) 
  
    # barrier between input state and gate operation
    qc.barrier()
  
    # Now we've encoded the input,
    # we can do a NOT on it using x
      
    # NOT on |0> converted to |1> and wise verse.
    qc.x(0) 
  
    # barrier between gate operation and measurement
    qc.barrier()
  
    # Finally, we extract the |0⟩/|1⟩ output of
    # the qubit q[0] and encode it in the bit c[0]
    qc.measure(0, 0)
      
    # to visualize
    qc.draw('mpl') 
  
    # To run the program on a simulator
    backend = Aer.get_backend('qasm_simulator')
      
    # Since the output will be deterministic,
    # so we can use just a single shot to get it
    job = execute(qc, backend, shots=1, memory=True)
    output = job.result().get_memory()[0]
  
    return qc, output
  
# Sending input to NOT function
for inp in ['0', '1']:
    qc, out = NOT(inp)
      
    print('NOT with input', inp, 'gives output', out)
    display(qc.draw())
    print('\n')

Producción: 

Publicación traducida automáticamente

Artículo escrito por ganeshanvishnu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *