Создайте простую квантовую схему с помощью IBM Qiskit на Python

Опубликовано: 20 Марта, 2022

Qiskit - это фреймворк с открытым исходным кодом для квантовых вычислений. Он предоставляет инструменты для создания квантовых программ и управления ими, а также для их запуска на прототипах квантовых устройств в IBM Q Experience или на симуляторах на локальном компьютере. Давайте посмотрим, как мы можем создать простую квантовую схему и протестировать ее на реальном квантовом компьютере или смоделировать на нашем компьютере локально. Python является обязательным условием для понимания программ Quantum, поскольку сам Qiskit разработан с использованием Python.

Прежде всего, прежде чем мы углубимся в тему, это установка Qiskit и Anaconda. Пошаговое руководство по установке Anaconda см. В следующих статьях.

  • Как установить Anaconda на windows?
  • Как установить Anaconda в Linux?

Установка

Чтобы установить qiskit, выполните следующие действия:

  • Откройте запрос Anaconda и введите
 pip установить qiskit
  • Вот и все, все необходимые пакеты будут установлены.
  • Затем откройте Jupyter Notebook.
  • Импортируйте qiskit с помощью следующей команды.
 импорт qiskit

Чтобы получить доступ к IBM Quantum Systems:

  1. Создайте бесплатную учетную запись IBM Quantum Experience.
  2. Перейдите в Моя учетная запись.
  3. Щелкните Копировать токен, чтобы скопировать токен в буфер обмена (токен представляет API для доступа к устройствам IBM Quantum).
  4. Выполните следующие команды (Jupyter Notebook), чтобы сохранить токен API локально для последующего использования в файле конфигурации с именем qiskitrc . Замените MY_API_TOKEN на токен API.
 из qiskit импортировать IBMQ
IBMQ.save_account ('MY_API_TOKEN')

Начиная

Во-первых, мы импортируем необходимые пакеты. Строки импорта импортируют основные элементы (пакеты и функции), необходимые для вашей программы.

В примере кода используются следующие импорты:

  • QuantumCircuit: содержит все ваши квантовые операции; инструкции для квантовой системы
  • выполнить : запускает вашу схему
  • Aer : обрабатывает серверные части симулятора
  • qiskit.visualization: включает визуализацию данных, например plot_histogram

Инициализировать переменные

В следующей строке кода вы инициализируете два кубита в нулевом состоянии и два классических бита в нулевом состоянии в квантовой схеме, называемой схемой.

Добавить ворота

Следующие три строки кода, начиная с схемы , добавляют вентили, которые управляют кубитами в вашей схеме.

Детальное объяснение

  • QuantumCircuit.h (0 ): вентиль Адамара на кубите 0 , который переводит его в состояние суперпозиции.
  • QuantumCircuit.cx (0, 1 ): операция управляемого НЕ ( C x ) на контрольном кубите 0 и целевом кубите 1 , переводя кубиты в запутанное состояние.
  • QuantumCircuit.measure ([0,1], [0,1] ): первый аргумент индексирует кубиты, второй аргумент индексирует классические биты. Результат измерения n- го кубита будет сохранен в n- м классическом бите.

Это конкретное трио ворот, добавляемых один за другим в схему, формирует состояние Белла, |

В этом состоянии существует 50-процентная вероятность обнаружить, что оба кубита имеют нулевое значение, и 50-процентная вероятность обнаружить, что оба кубита имеют значение 1.

Моделируйте эксперимент

Следующая строка кода вызывает конкретную структуру симулятора - в данном случае он вызывает Qiskit Aer, который является высокопроизводительным симулятором, который предоставляет несколько бэкэндов для достижения различных целей симуляции. В этой программе мы будем использовать qasm_simulator . При каждом запуске этой схемы будет получена строка битов «00» или «11» . Программа указывает количество запусков схемы в аргументе shots метода execute ( job = execute (circuit, simulator, shots = 1000) ). Количество снимков симуляции установлено на 1000 (по умолчанию 1024 ). Когда у вас есть объект результата , вы можете получить доступ к счетчикам с помощью метода get_counts (circuit) . Это дает вам совокупные результаты вашего эксперимента. Выходная битовая строка составляет «00» примерно в 50% случаев. Этот симулятор не моделирует шум. Любое отклонение от 50 процентов связано с небольшим размером выборки.

Визуализируйте схему

QuantumCircuit.draw () ( вызывается схемой circuit.draw () в коде) отображает вашу схему в одном из различных стилей, используемых в учебниках и исследовательских статьях. В схеме, полученной после команды визуализации, кубиты упорядочены с нулевым кубитом вверху и кубитом под ним. Схема читается слева направо, отображая течение времени.

Визуализируйте результаты

Qiskit предоставляет множество визуализаций, включая функцию plot_histogram , для просмотра ваших результатов.

plot_histogram(counts)

Вероятности (относительные частоты) наблюдения | 00? и | 11? состояния вычисляются путем деления соответствующих подсчетов на общее количество выстрелов.

Below is the implementation.

Python3

# python program to create a simple Quantum circuit
  
  
%matplotlib inline
from qiskit import QuantumCircuit, execute, Aer, IBMQ
from qiskit.compiler import transpile, assemble
from qiskit.tools.jupyter import *
from qiskit.visualization import *
  
# Loading your IBM Q account(s)
provider = IBMQ.load_account()
   
# Create a Quantum Circuit acting
# on the q register
circuit = QuantumCircuit(2, 2)
   
# Add a H gate on qubit 0
circuit.h(0)
   
# Add a CX (CNOT) gate on control 
# qubit 0 and target qubit 1
circuit.cx(0, 1)
   
# Map the quantum measurement to the
# classical bits
circuit.measure([0,1], [0,1])
   
# Use Aer"s qasm_simulator
simulator = Aer.get_backend("qasm_simulator")
   
# Execute the circuit on the qasm
# simulator
job = execute(circuit, simulator, shots=1000)
   
# Grab results from the job
result = job.result()
   
# Return counts
counts = result.get_counts(circuit)
print(" Total count for 00 and 11 are:",counts)
  
# Draw the circuit
circuit.draw()

Выход:

Plot a histogram

Python3

# Plot a histogram
plot_histogram(counts)

Выход:

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.