要開始進行量子程式開發,首先需要設定 Python 環境並安裝 Qiskit。這包含建立 IBM Quantum Experience 帳號以取得 API 金鑰,並在本地環境中設定金鑰以便連線 IBM Quantum 的量子電腦及雲端資源。同時,我們也會說明如何下載程式碼範例,並透過 pip 指令安裝及更新 Qiskit 套件,確保開發環境維持最新狀態。最後,我們會簡單介紹經典位元與量子位元的概念,並使用 Python 和 NumPy демонструвати 如何建立及操作量子位元,為後續的量子程式開發打下基礎。
1. 搭建程式設計環境
在開始進行量子程式開發之前,必須有一個Python環境來執行程式碼。本章將介紹如何建立IBM Quantum Experience帳號、安裝Qiskit以及下載示例程式碼。
1.1 技術要求
本章中探討的操作配方參見本文GitHub倉函式庫中對應第1章的目錄。按照本章中的步驟搭建好程式設計環境後,可以在本地的Qiskit環境中執行本文中的操作配方。
關鍵技術要求:
- Python 3.5及以上版本
- Qiskit 0.21.0(或最新版本)
- Anaconda Navigator 1.9(或最新版本)
1.2 建立IBM Quantum Experience帳號
IBM Quantum Experience帳號是存取IBM量子電腦程式設計的“鑰匙”。使用該免費帳號,可以存取線上的IBM Quantum Experience介面以及其中可用的程式設計工具。
操作步驟:
- 存取IBM Quantum Experience網站
- 使用IBMid或第三方帳號(谷歌、GitHub、領英、推特、電子郵件地址)登入
- 完成註冊流程
1.3 安裝Qiskit
Qiskit是一個開源框架,用於量子計算程式設計。安裝Qiskit需要Python 3.5及以上版本。
安裝步驟:
pip install qiskit
程式碼範例:
import qiskit
print(qiskit.__version__)
內容解密:
- 使用
pip install qiskit命令安裝Qiskit - 匯入Qiskit函式庫並列印版本號以驗證安裝
1.4 下載示例程式碼
本文提供了示例程式碼,可以從GitHub倉函式庫下載。
下載步驟:
- 存取本文的GitHub倉函式庫
- 下載對應章節的程式碼
1.5 安裝API金鑰並存取提供服務的量子電腦
要存取IBM的量子電腦,需要安裝API金鑰。
安裝API金鑰步驟:
- 登入IBM Quantum Experience
- 取得API金鑰
- 在本地Qiskit環境中組態API金鑰
程式碼範例:
from qiskit import IBMQ
IBMQ.save_account('YOUR_API_TOKEN')
內容解密:
- 使用
IBMQ.save_account方法儲存API金鑰 - 替換
'YOUR_API_TOKEN'為實際的API金鑰
1.6 及時更新Qiskit環境
Qiskit是一個快速迭代的開源專案,定期更新是必要的。
更新步驟:
pip install --upgrade qiskit
程式碼範例:
import qiskit
print(qiskit.__version__)
內容解密:
- 使用
pip install --upgrade qiskit命令更新Qiskit - 驗證更新後的版本號
參考資料
- 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 下載範例程式碼的壓縮檔
或者,我們也可以下載範例程式碼的壓縮檔。
- 在GitHub倉函式庫中,點選“Clone or download”按鈕,選擇“Download zip”。
- 下載壓縮檔並選擇檔案儲存位置。
- 將檔案解壓縮。
1.4 執行範例程式碼
下載好範例程式碼後,我們可以在不同的環境中執行它。
1.4.1 在Spyder中執行Python指令碼
我們可以在Spyder中執行Python指令碼。
- 開啟Anaconda的使用者介面。
- 選擇虛擬環境。
- 點選Spyder圖示。
- 在Spyder中,開啟範例Python指令碼。
- 點選“Run”。
1.4.2 在Jupyter Notebook中執行Python指令碼
我們也可以在Jupyter Notebook中執行Python指令碼。
- 開啟Anaconda的使用者介面。
- 選擇虛擬環境。
- 點選Jupyter Notebook圖示。
- 在根目錄中開啟的預設瀏覽器中會開啟Jupyter Notebook的介面。
- 找到並點選範例Python指令碼。
- 將Python指令碼中的程式碼複製並貼上到新建的記事本中。
- 點選“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金鑰。
- 透過IBM Quantum官方網站的登入頁面登入到IBM Quantum Experience。
- 在IBM Quantum Experience首頁面的右上角,找到使用者圖示,點選該圖示,選擇“My account”。
- 在帳號頁面中找到“Qiskit in local environment”選項,點選“Copy token”。
- 讀者可以將複製的令牌貼上到一個臨時的位置,或者將其保留在剪下板中。
- 在本地裝置上存取自己的Qiskit環境。之前的步驟中已經包含這一步,但是如果讀者使用的是Anaconda,需要再次進行本操作。
- 啟用虛擬環境。
$ conda activate environment_name - 開啟Python。
檢查螢幕上顯示的Python版本資訊,確保正在執行的Python版本是正確的:
$(environment_name) ... $ python3Python 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. >>> - 取得所需的
IBMQ型別。>>> from qiskit import IBMQ - 在本地環境中安裝API令牌。
在這一步中,讀者需要將剛才從IBM Quantum Experience裡複製的API令牌貼上到該命令中
>>> IBMQ.save_account('MY_API_TOKEN')MY_API_TOKEN的位置。要保留單引號,因為該命令需要使用單引號。 - 登入自己的帳號。
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”頁面,檢視是否有更新的版本可供下載。
操作步驟
- 啟用虛擬環境。
$ conda activate environment_name - 執行如下命令,以檢查虛擬環境的
pip包是否已過時。(environment_name) ... $ pip list --outdated - 該命令會傳回如下列表,列表中包含使用者目前所有已過時的
pip包,並列出可用的版本。 - 使用
pip命令更新Qiskit。(environment_name) ... $ pip install qiskit --upgrade - 在命令列中驗證Qiskit是否安裝成功。
該操作的傳回結果類別似如下所示:
(environment_name)... $ pip show qiskitName: 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: ... - 驗證Qiskit是否已整合到了自己的獨立環境中的Python上。
- 開啟Python:
(environment_name)... $ python3 - 匯入Qiskit:
>>> import qiskit - 列出詳細的版本資訊:
>>> qiskit.__qiskit_version__ - 執行該命令後,會顯示已安裝的Qiskit元件的版本:
恭喜,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'}
- 開啟Python:
根據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$來表示本文中提到的量子位元。之後,本文將帶領讀者計算測量經典位元和量子位元時,獲得不同輸出結果的機率。
操作步驟
- 匯入用於進行計算的
numpy和math。import numpy as np from math import sqrt, pow - 建立並輸出經典位元和量子位元向量,分別用
[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)
內容解密:
在上述程式碼中,我們首先匯入了必要的函式庫,包括numpy和math。接著,我們定義了經典位元和量子位元的矢量表示。對於量子位元,我們使用了狄拉克符號來表示其狀態。變數a和b用於定義量子位元的疊加狀態,並且我們檢查了這些引數是否滿足歸一化條件,以確保量子位元的狀態是有效的。
圖表翻譯:
此圖示呈現了量子位元的狀態在布洛赫球上的表示,顯示了其疊加狀態和測量結果的機率。
圖表翻譯: 圖中展示了量子位元在布洛赫球上的狀態,描述了其可能的疊加狀態和測量的機率結果。