Создайте простую квантовую схему с помощью IBM Qiskit на Python
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:
- Создайте бесплатную учетную запись IBM Quantum Experience.
- Перейдите в Моя учетная запись.
- Щелкните Копировать токен, чтобы скопировать токен в буфер обмена (токен представляет API для доступа к устройствам IBM Quantum).
- Выполните следующие команды (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. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.