要開始進行量子程式開發,首先需要設定 Python 環境並安裝 Qiskit。這包含建立 IBM Quantum Experience 帳號以取得 API 金鑰,並在本地環境中設定金鑰以便連線 IBM Quantum 的量子電腦及雲端資源。同時,我們也會說明如何下載程式碼範例,並透過 pip 指令安裝及更新 Qiskit 套件,確保開發環境維持最新狀態。最後,我們會簡單介紹經典位元與量子位元的概念,並使用 Python 和 NumPy демонструвати 如何建立及操作量子位元,為後續的量子程式開發打下基礎。

1. 搭建程式設計環境

在開始進行量子程式開發之前,必須有一個Python環境來執行程式碼。本章將介紹如何建立IBM Quantum Experience帳號、安裝Qiskit以及下載示例程式碼。

1.1 技術要求

本章中探討的操作配方參見本文GitHub倉函式庫中對應第1章的目錄。按照本章中的步驟搭建好程式設計環境後,可以在本地的Qiskit環境中執行本文中的操作配方。

關鍵技術要求:

  1. Python 3.5及以上版本
  2. Qiskit 0.21.0(或最新版本)
  3. Anaconda Navigator 1.9(或最新版本)

1.2 建立IBM Quantum Experience帳號

IBM Quantum Experience帳號是存取IBM量子電腦程式設計的“鑰匙”。使用該免費帳號,可以存取線上的IBM Quantum Experience介面以及其中可用的程式設計工具。

操作步驟:

  1. 存取IBM Quantum Experience網站
  2. 使用IBMid或第三方帳號(谷歌、GitHub、領英、推特、電子郵件地址)登入
  3. 完成註冊流程

1.3 安裝Qiskit

Qiskit是一個開源框架,用於量子計算程式設計。安裝Qiskit需要Python 3.5及以上版本。

安裝步驟:

pip install qiskit

程式碼範例:

import qiskit
print(qiskit.__version__)

內容解密:

  1. 使用pip install qiskit命令安裝Qiskit
  2. 匯入Qiskit函式庫並列印版本號以驗證安裝

1.4 下載示例程式碼

本文提供了示例程式碼,可以從GitHub倉函式庫下載。

下載步驟:

  1. 存取本文的GitHub倉函式庫
  2. 下載對應章節的程式碼

1.5 安裝API金鑰並存取提供服務的量子電腦

要存取IBM的量子電腦,需要安裝API金鑰。

安裝API金鑰步驟:

  1. 登入IBM Quantum Experience
  2. 取得API金鑰
  3. 在本地Qiskit環境中組態API金鑰

程式碼範例:

from qiskit import IBMQ
IBMQ.save_account('YOUR_API_TOKEN')

內容解密:

  1. 使用IBMQ.save_account方法儲存API金鑰
  2. 替換'YOUR_API_TOKEN'為實際的API金鑰

1.6 及時更新Qiskit環境

Qiskit是一個快速迭代的開源專案,定期更新是必要的。

更新步驟:

pip install --upgrade qiskit

程式碼範例:

import qiskit
print(qiskit.__version__)

內容解密:

  1. 使用pip install --upgrade qiskit命令更新Qiskit
  2. 驗證更新後的版本號

參考資料

  • Qiskit官方檔案:https://qiskit.org/documentation/
  • IBM Quantum Experience:https://quantum-computing.ibm.com/

此圖示顯示了Qiskit的安裝流程

  graph LR
A[開始] --> B[pip install qiskit]
B --> C[驗證安裝]
C --> D[更新Qiskit]
D --> E[完成]

圖表翻譯: 此圖示呈現了Qiskit的安裝流程,從開始到完成安裝和驗證的步驟。包括安裝Qiskit、驗證安裝以及更新Qiskit的過程。

在本地環境中安裝與組態Qiskit

1.1 安裝前的準備工作

在開始安裝Qiskit之前,我們需要進行一些準備工作,以確保安裝過程順利進行。

1.1.1 Python環境準備

首先,我們需要準備好Python環境。建議使用Anaconda來建立虛擬環境,因為它可以幫助我們管理不同的Python版本和套件。

# 建立新的虛擬環境
$ conda create -n qiskit_env python=3.8

1.1.2 虛擬環境啟動

建立好虛擬環境後,我們需要啟動它。

# 啟動虛擬環境
$ conda activate qiskit_env

1.2 安裝Qiskit

在虛擬環境啟動後,我們可以開始安裝Qiskit。

1.2.1 更新pip

為了確保我們使用的是最新版本的pip,我們需要更新它。

# 更新pip
(qiskit_env) $ pip install -U pip

1.2.2 安裝Qiskit

現在,我們可以安裝Qiskit了。

# 安裝Qiskit
(qiskit_env) $ pip install qiskit

1.2.3 驗證安裝

安裝完成後,我們需要驗證Qiskit是否安裝成功。

# 驗證Qiskit安裝
>>> import qiskit
>>> qiskit.__qiskit_version__

輸出結果應該類別似於:

{'qiskit-terra': '0.15.2', 'qiskit-aer': '0.6.1', 'qiskit-ignis': '0.4.0', 'qiskit-ibmq-provider': '0.9.0', 'qiskit-aqua': '0.7.5', 'qiskit': '0.21.0'}

1.3 下載範例程式碼

為了更好地學習Qiskit,我們可以下載一些範例程式碼。

1.3.1 使用Git克隆範例程式碼

我們可以使用Git來克隆範例程式碼。

# 克隆範例程式碼
$ git clone https://github.com/PacktPublishing/Quantum-Computing-in-Practice-with-Qiskit-and-IBM-Quantum-Experience.git

1.3.2 下載範例程式碼的壓縮檔

或者,我們也可以下載範例程式碼的壓縮檔。

  1. 在GitHub倉函式庫中,點選“Clone or download”按鈕,選擇“Download zip”。
  2. 下載壓縮檔並選擇檔案儲存位置。
  3. 將檔案解壓縮。

1.4 執行範例程式碼

下載好範例程式碼後,我們可以在不同的環境中執行它。

1.4.1 在Spyder中執行Python指令碼

我們可以在Spyder中執行Python指令碼。

  1. 開啟Anaconda的使用者介面。
  2. 選擇虛擬環境。
  3. 點選Spyder圖示。
  4. 在Spyder中,開啟範例Python指令碼。
  5. 點選“Run”。

1.4.2 在Jupyter Notebook中執行Python指令碼

我們也可以在Jupyter Notebook中執行Python指令碼。

  1. 開啟Anaconda的使用者介面。
  2. 選擇虛擬環境。
  3. 點選Jupyter Notebook圖示。
  4. 在根目錄中開啟的預設瀏覽器中會開啟Jupyter Notebook的介面。
  5. 找到並點選範例Python指令碼。
  6. 將Python指令碼中的程式碼複製並貼上到新建的記事本中。
  7. 點選“Run”。

1.5 視覺化工具的安裝(可選)

如果需要使用視覺化工具,可以安裝額外的套件。

# 安裝視覺化工具
(qiskit_env) $ pip install 'qiskit[visualization]'

注意:如果使用的是zsh,需要在命令中使用引號將套件括起來。

1.6 參考資料

圖表翻譯:

此圖示呈現了安裝Qiskit的流程,包括建立虛擬環境、安裝Qiskit、驗證安裝以及下載範例程式碼的步驟。

  graph LR
    A[建立虛擬環境] --> B[啟動虛擬環境]
    B --> C[更新pip]
    C --> D[安裝Qiskit]
    D --> E[驗證安裝]
    E --> F[下載範例程式碼]
    F --> G[執行範例程式碼]

圖表翻譯: 此圖示呈現了安裝和組態Qiskit的主要步驟,從建立虛擬環境到執行範例程式碼的整個流程。透過遵循這些步驟,使用者可以順利完成Qiskit的安裝和組態,並開始使用Qiskit進行量子計算的學習和開發。

安裝API金鑰並存取提供服務的量子電腦

在安裝好Qiskit之後,讀者即可開始建立自己的量子程式,並在本地模擬器中執行這些程式。如果讀者有時想在IBM Quantum的實體硬體上執行自己的量子程式,必須在本地環境中安裝自己的API金鑰,每個API金鑰都是獨一無二的。

IBM Quantum Experience的API金鑰

如果讀者在IBM Quantum Experience的Notebook環境中執行自己的Qiskit程式,系統會自動註冊一個API金鑰。

準備工作

在安裝API金鑰之前,讀者必須先建立一個IBM Quantum Experience的帳號。如果讀者還沒有建立帳號,可以回到相關章節,按照操作步驟進行建立。

操作步驟

下面,本文將介紹如何在本地環境中安裝API金鑰。

  1. 透過IBM Quantum官方網站的登入頁面登入到IBM Quantum Experience。
  2. 在IBM Quantum Experience首頁面的右上角,找到使用者圖示,點選該圖示,選擇“My account”。
  3. 在帳號頁面中找到“Qiskit in local environment”選項,點選“Copy token”。
  4. 讀者可以將複製的令牌貼上到一個臨時的位置,或者將其保留在剪下板中。
  5. 在本地裝置上存取自己的Qiskit環境。之前的步驟中已經包含這一步,但是如果讀者使用的是Anaconda,需要再次進行本操作。
  6. 啟用虛擬環境。
    $ conda activate environment_name
    
  7. 開啟Python。
    $(environment_name) ... $ python3
    
    檢查螢幕上顯示的Python版本資訊,確保正在執行的Python版本是正確的:
    Python 3.7.6 (default, Jan 8 2020, 13:42:34)
    [Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    
  8. 取得所需的IBMQ型別。
    >>> from qiskit import IBMQ
    
  9. 在本地環境中安裝API令牌。
    >>> IBMQ.save_account('MY_API_TOKEN')
    
    在這一步中,讀者需要將剛才從IBM Quantum Experience裡複製的API令牌貼上到該命令中MY_API_TOKEN的位置。要保留單引號,因為該命令需要使用單引號。
  10. 登入自己的帳號。 API令牌就位後,讀者需要驗證API金鑰是否都設定好了,自己的帳號許可權是否正常:
    >>> IBMQ.load_account()
    
    執行上述命令後,系統會顯示如下輸出結果:
    <AccountProvider for IBMQ(hub='ibm-q', group='open', project='main')>
    
    這就是為帳號提供服務的量子電腦的資訊,其中包含hub(集線器)、group(群組)和project(專案)資訊。

執行原理

在上述示例中,讀者匯入的主要的類別是IBMQ,它是一種用於使用IBM在雲上提供的量子硬體和軟體的工具箱。本章使用save_account()在本地儲存帳號。隨著學習的深入,在將要存取IBM Quantum機器的操作配方中,本文將在量子程式中使用IBMQ.load_account()IBMQ.get_provider()類別,以確保讀者能夠取得正確的存取許可權。

更新API金鑰

如果出於某些原因,讀者需要在IBM Quantum Experience中建立一個新的API令牌,並更新本地儲存的API令牌,可以使用如下命令:

>>> IBMQ.save_account('NEW_API_TOKEN', overwrite=True)

及時更新Qiskit環境

Qiskit是一個不斷更新的開源程式設計環境。在撰寫本文的過程中,經歷了Qiskit軟體次版本和主版本的多次更新。通常,及時更新並使用最新版本的Qiskit是明智之舉,但有時進行更新後,一些程式碼元件的行為可能會發生變化。建議讀者仔細閱讀每個新版本的釋出說明。有時,版本更新引入的變更會改變使用者程式碼的行為方式。在這種情況下,讀者可以推遲更新,直到驗證自己的程式碼仍然按預期工作。

準備工作

如果讀者有不止一個環境,則在開始更新Qiskit環境之前,需要在每個環境中驗證自己所執行的Qiskit的版本。在每個環境中,都可以從命令列、IDE(如Spyder)或Jupyter Notebook中啟動Python,然後執行以下程式碼:

>>> import qiskit
>>> qiskit.__qiskit_version__

如果讀者安裝了舊版本的Qiskit,執行上述程式碼可能會輸出以下結果:

{'qiskit-terra': '0.9.0', 'qiskit-aer': '0.3.0', 'qiskit-ibmqprovider': '0.3.0', 'qiskit-aqua': '0.6.0', 'qiskit': '0.12.0'}

之後,讀者就可以跳轉到Qiskit的“Release Notes”頁面,檢視是否有更新的版本可供下載。

操作步驟

  1. 啟用虛擬環境。
    $ conda activate environment_name
    
  2. 執行如下命令,以檢查虛擬環境的pip包是否已過時。
    (environment_name) ... $ pip list --outdated
    
  3. 該命令會傳回如下列表,列表中包含使用者目前所有已過時的pip包,並列出可用的版本。
  4. 使用pip命令更新Qiskit。
    (environment_name) ... $ pip install qiskit --upgrade
    
  5. 在命令列中驗證Qiskit是否安裝成功。
    (environment_name)... $ pip show qiskit
    
    該操作的傳回結果類別似如下所示:
    Name: qiskit
    Version: 0.21.0
    Summary: Software for developing quantum computing programs
    Home-page: https://git×××/Qiskit/qiskit
    Author: Qiskit Development Team
    Author-email: qiskit@us.ibm.com
    License: Apache 2.0
    Location: /Users/hassi/opt/anaconda3/envs/packt_qiskit/lib/python3.7/site-packages
    Requires: qiskit-aer, qiskit-terra, qiskit-aqua, qiskit-ignis, qiskit-ibmq-provider
    Required-by:
    ...
    
  6. 驗證Qiskit是否已整合到了自己的獨立環境中的Python上。
    1. 開啟Python:
      (environment_name)... $ python3
      
    2. 匯入Qiskit:
      >>> import qiskit
      
    3. 列出詳細的版本資訊:
      >>> qiskit.__qiskit_version__
      
    4. 執行該命令後,會顯示已安裝的Qiskit元件的版本:
      {'qiskit-terra': '0.15.2', 'qiskit-aer': '0.6.1', 'qiskit-ignis': '0.4.0', 'qiskit-ibmq-provider': '0.9.0', 'qiskit-aqua': '0.7.5', 'qiskit': '0.21.0'}
      
      恭喜,Qiskit已經成功更新了,讀者現在執行的是最新版本!

根據Python的量子計算和量子位元

儘管量子計算是一個新興領域,但它也有著一段相對較長的歷史。大約一個世紀之前,人們就提出了用於實作量子計算的想法和概念(如量子力學中的量子疊加和量子糾纏);而量子資訊科學創立於大約40年前。Peter Shor和Lov Grover等早期的研究人員提出了一些量子演算法(Shor演算法和Grover演算法),這些演算法現在開始與E=mc²這樣的基礎物理概念一樣廣為人知。

比較經典位元和量子位元

本文將從大多數正在閱讀本文的讀者已經瞭解的一個概念——“位元”開始講解,可能還有一些讀者不太瞭解這個概念。直觀來說,位元是一個要麼是0,要麼是1的東西。把多個位元放到一起,使用者可以建立位元組(byte)和任意大小的二進位制數,以此搭建出出色的電腦程式、進行數字影像編碼、加密檔案(如情書)或重要資訊(如銀行交易資訊)等。

準備工作

儘管示例的難度逐漸增加,但本文中的示例實際上一點也不困難。它只是一個使用Python和NumPy的快速實作,將一個位元定義為一個2×1矩陣,或一個表示0或1的向量。本文還引入了狄拉克符號(Dirac notation)、$\left|0\right\rangle$、$\left|1\right\rangle$來表示本文中提到的量子位元。之後,本文將帶領讀者計算測量經典位元和量子位元時,獲得不同輸出結果的機率。

操作步驟

  1. 匯入用於進行計算的numpymath
    import numpy as np
    from math import sqrt, pow
    
  2. 建立並輸出經典位元和量子位元向量,分別用[1,0][0,1]$\left|0\right\rangle$$\left|1\right\rangle$[a,b]表示0、1、$\left|0\right\rangle$、$\left|1\right\rangle$和$\left|\psi\right\rangle$。
    # Define the qubit parameters for superposition
    a = sqrt(1/2)
    b = sqrt(1/2)
    if round(pow(a,2)+pow(b,2),0)!=1:
        print("Your qubit parameters are not normalized.\nResetting to basic superposition")
        a = sqrt(1/2)
    

內容解密:

在上述程式碼中,我們首先匯入了必要的函式庫,包括numpymath。接著,我們定義了經典位元和量子位元的矢量表示。對於量子位元,我們使用了狄拉克符號來表示其狀態。變數ab用於定義量子位元的疊加狀態,並且我們檢查了這些引數是否滿足歸一化條件,以確保量子位元的狀態是有效的。

圖表翻譯:

此圖示呈現了量子位元的狀態在布洛赫球上的表示,顯示了其疊加狀態和測量結果的機率。

圖表翻譯: 圖中展示了量子位元在布洛赫球上的狀態,描述了其可能的疊加狀態和測量的機率結果。