📜  在Python使用 Qiskit 的带有量子电路的经典非逻辑门

📅  最后修改于: 2022-05-13 01:54:49.851000             🧑  作者: Mango

在Python使用 Qiskit 的带有量子电路的经典非逻辑门

在本文中,我们将看到如何使用量子门在给定的输入(0 或 1)上应用非门,我们必须将 0 转换为 1,将 1 转换为 0。这可以在经典计算机中轻松完成,但是如何我们可以在量子计算机中做到这一点吗?我们必须以量子位表示输入,然后在该量子位中应用 X(量子计算机中非门的表示)操作,然后返回结果量子位

QISKIT是位于一侧量子算法和另一侧物理量子设备之间的包。它将Python等常见的编程语言翻译成量子机器语言。这意味着 IBM Q 实验室之外的任何人都可以对量子计算机进行编程。

要安装此模块,请在终端中运行这些命令:

pip3 install qiskit

方法:

  • 使用内置函数QuantumCircuit 创建一个具有单个经典量子位和位的量子电路qc ,该函数采用第一个参数“no。整数中的量子位”和第二个参数“no。整数位数”并返回量子电路。 ( QuantumCircuit(1, 1) 返回一个量子位 q[0] 和一位 c[0] 的量子电路)
  • 以量子位表示输入('0' 表示量子位状态 |0>,'1' 表示 |1>):
    • 使用 qiskit函数reset() 重置 qc 量子位。
    • 由于量子位最初是|0⟩,所以对于'0'的输入,我们不需要做任何事情。
    • 对于 '1' 的输入,我们做一个 X 将 |0⟩ 旋转到 |1⟩。 x()函数用于对给定参数应用非门。
  • 使用barrier() 在输入状态和门操作之间设置屏障。
  • 在量子位 0 上应用 NOT,我们可以使用 x 在它上面做一个 NOT
  • 在门操作和测量之间设置障碍
  • 最后,我们提取量子位 q[0] 的 |0⟩/|1⟩ 输出,并使用 qiskit measure()函数其编码到位 c[0] 中。
  • 要可视化并查看电路图,请使用 qiskit draw()函数。

下面是实现:

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')


输出: