QISKit 作為目前主流的量子程式設計 SDK,提供 Python 介面,方便開發者進行量子程式開發。本文除了詳細說明在 Windows 和 Linux CentOS 系統上安裝 QISKit 的步驟,也提供程式碼範例示範其基本使用方法,讓讀者快速上手。同時,為了讓讀者更深入理解量子計算的原理,文章也介紹了量子位元的向量表示、疊加態的概念,以及 NOT 閘和 Hadamard 閘等基本量子閘的操作原理,這些都是理解量子計算的根本。透過理解這些基本概念,讀者可以更有效地使用 QISKit 進行量子程式設計。
QISKit:Python 中量子程式設計的強大 SDK
在本章中,您將開始使用 QISKit,這是目前為止最好的量子程式設計 SDK。您將學習如何在本地系統中輕鬆安裝此 SDK。在撰寫第一個量子程式之前,瞭解量子計算的基本原理以及它與經典計算的不同之處是非常有幫助的。本章將使用線性代數對量子位狀態和量子閘進行基本的解釋。本章還將介紹量子程式的結構,包括系統呼叫、電路編譯格式、量子彙編等。
安裝 QISKit
QISKit 是 Quantum Information Software Kit 的縮寫,是雲端量子程式設計的事實上 SDK。它是用 Python 撰寫的,Python 是一種用於科學計算的強大指令碼語言。
在 Windows 中設定
QISKit 需要 Python 3.5 或更高版本。如果您使用的是 Windows 系統,很可能您尚未安裝 Python。如果是這樣,您可以從 Python.org 網站下載安裝程式。下載安裝程式後執行它,並透過在命令視窗中執行以下命令來驗證安裝:
C:\>Python -V
Python 2.7.6
您可以同時安裝多個版本的 Python。在這種情況下,下載嵌入式 zip 檔案並佈署到 C:\Python36-64,因此在這種情況下:
C:\>C:\Python36-64\Python.exe -V
Python 3.6.4
Python 有一個非常棒的套件管理器叫做 pip(首選安裝程式),它使得安裝模組變得非常容易。因此,要安裝 QISKit,只需在控制檯輸入:
C:\>pip install qiskit
您的螢幕輸出應該類別似於清單 4-1。請確保沒有錯誤訊息。
清單 4-1:在 Windows 64 位元中安裝 QISKit
Collecting qiskit
Using cached qiskit-0.4.11.tar.gz
Collecting IBMQuantumExperience>=1.8.28 (from qiskit)
Using cached IBMQuantumExperience-1.9.0-py3-none-any.whl
Collecting matplotlib<2.2,>=2.1 (from qiskit)
Using cached matplotlib-2.1.2.tar.gz
Collecting networkx<2.1,>=2.0 (from qiskit)
Downloading networkx-2.0.zip (1.5MB)
100% |████████████████████| 1.6MB 400kB/s
Collecting numpy<1.15,>=1.13 (from qiskit)
Downloading numpy-1.14.2-cp36-cp36m-manylinux1_i686.whl (8.7MB)
100% |████████████████████| 8.7MB 105kB/s
...
Running setup.py install for pycparser ... done
Running setup.py install for matplotlib ... done
Running setup.py install for networkx ... done
Running setup.py install for ply ... done
Running setup.py install for mpmath ... done
Running setup.py install for sympy ... done
Running setup.py install for qiskit ... done
Successfully installed IBMQuantumExperience-1.9.0 qiskit-0.4.11 requests-2.18.4 ...
在 Linux CentOS 中設定
在 CentOS 6 或 7 中設定會比較棘手。這是由於 CentOS 主要關注穩定性而不是最新的軟體。因此,CentOS 預設附帶 Python 2.7;此外,官方發行版不提供 Python 3.5 的套件。然而,這並不意味著 Python 3.5 無法安裝。讓我們看看如何做到這一點。
步驟 1:準備您的系統
首先,請確保 yum(Linux 更新管理器)是最新的,方法是執行命令:
$ sudo yum -y update
接下來,安裝 yum-utils,一套擴充和補充 yum 的工具和外掛程式:
$ sudo yum -y install yum-utils
安裝 CentOS 開發工具。這些工具包括編譯器和函式庫,允許構建和編譯許多型別的軟體:
$ sudo yum -y groupinstall development
現在,讓我們安裝 Python 3。請注意,我們將執行多個版本的 Python:官方的 2.7 和用於開發的 3.6。
步驟 2:安裝 Python 3
為了擺脫預設 CentOS 發行版的限制,我們可以使用一個名為 Inline with Upstream Stable(IUS)的社群專案。這是一套最新的開發函式庫,用於那些不提供它們的作業系統,如 CentOS。讓我們透過 yum 安裝 IUS:
$ sudo yum -y install https://centos7.iuscommunity.org/ius-release.rpm (CentOS7)
$ sudo yum -y install https://centos6.iuscommunity.org/ius-release.rpm (CentOS6)
一旦 IUS 安裝完成,我們就可以安裝最新版本的 Python(3.6):
$ sudo yum -y install python36u
檢查安裝是否正確:
$ python3.6 -V
Python 3.6.4
現在,讓我們安裝 pip 並驗證:
$ sudo yum -y install python36u-pip
$ pip3.6 -V
#### 內容解密:
本段落詳細介紹了在 Windows 和 Linux CentOS 系統中安裝 QISKit 的步驟,包括準備環境、安裝 Python 和必要的套件管理器 pip,以及最終安裝 QISKit 的過程。其中提到了在不同作業系統中可能遇到的挑戰和解決方案,如在 CentOS 中使用 IUS 社群專案來安裝最新版本的 Python。
QISKit 的基本使用
QISKit 提供了一系列有用的模擬器來在本機或遠端執行您的程式。它還允許您在真實裝置上執行程式。逐步地,您將學習如何在由 IBM Q Experience 雲端平台提供的真實裝置上執行您的量子程式。
程式碼範例:
# 初始化 QISKit
from qiskit import QuantumCircuit, execute, Aer
# 建立一個量子電路,包含 2 個量子位元和 2 個經典位元
qc = QuantumCircuit(2, 2)
# 在第一個量子位元上應用 Hadamard Gate
qc.h(0)
# 在第一個和第二個量子位元之間應用 CNOT Gate
qc.cx(0, 1)
# 將量子位元的狀態測量到經典位元中
qc.measure([0, 1], [0, 1])
# 使用 Aer 的 qasm_simulator 後端執行電路
job = execute(qc, Aer.get_backend('qasm_simulator'))
# 取得結果
result = job.result()
# 列印結果
print(result.get_counts(qc))
#### 內容解密:
本程式碼範例展示瞭如何使用 QISKit 建立一個簡單的量子電路,並在模擬器上執行它。首先,建立了一個包含兩個量子位元和兩個經典位元的量子電路。然後,在第一個量子位元上應用了 Hadamard Gate,接著在第一個和第二個量子位元之間應用了 CNOT Gate。最後,將量子位元的狀態測量到經典位元中,並使用 Aer 的 qasm_simulator 後端執行電路,輸出測量結果的統計計數。
在 CentOS 上安裝 QISKit
步驟 1:更新系統
首先,確保您的 CentOS 系統是最新的:
$ sudo yum -y update
步驟 2:安裝 Python 3.6
預設情況下,CentOS 6.x 搭載的是 Python 2.6。為了安裝 QISKit,您需要安裝 Python 3.6。請按照以下步驟進行:
- 安裝 IUS(Inline with Upstream Stable)套件函式庫:
$ sudo yum -y install https://centos6.iuscommunity.org/ius-release.rpm
2. 安裝 Python 3.6:
```bash
$ sudo yum -y install python36u
- 安裝 pip(Python 的套件管理器):
$ sudo yum -y install python36u-pip
4. 安裝 Python 開發函式庫:
```bash
$ sudo yum -y install python36u-devel
步驟 3:設定虛擬環境(可選)
如果您在一個多使用者系統上工作,並且希望避免幹擾其他使用者,可以設定一個虛擬環境。虛擬環境允許您在不影響系統 Python 環境的情況下安裝套件。
- 建立一個新的資料夾來存放您的 QISKit 程式:
$ mkdir $HOME/qiskit $ cd $HOME/qiskit
2. 使用 Python 3.6 建立一個虛擬環境:
```bash
$ python3.6 -m venv qiskit
- 啟動虛擬環境:
$ source qiskit/bin/activate (qiskit) [centos@localhost qiskit]$
在虛擬環境中,您可以直接使用 `python` 和 `pip` 命令,而不需要指定版本(例如 `python3.6` 和 `pip3.6`)。
#### 虛擬環境中的 Python 版本確認
```bash
$ python -V
Python 3.6.4
步驟 4:安裝 QISKit
在虛擬環境中,執行以下命令來安裝 QISKit:
$ pip install qiskit
安裝過程輸出範例
Collecting qiskit
Downloading qiskit-0.5.7.tar.gz (4.5MB)
100% |████████████████████| 4.5MB 183kB/s
Collecting IBMQuantumExperience>=1.8.28 (from qiskit)
Downloading IBMQuantumExperience-1.9.0-py3-none-any.whl
Collecting matplotlib<2.2,>=2.1 (from qiskit)
Downloading matplotlib-2.1.2.tar.gz (36.2MB)
100% |████████████████████| 36.2MB 18kB/s
...
Installing collected packages: IBMQuantumExperience, numpy, python-dateutil, pytz, cycler, pyparsing, matplotlib, decorator, networkx, ply, scipy, mpmath, sympy, pillow, qiskit
Running setup.py install for pycparser ... done
Running setup.py install for matplotlib ... done
Running setup.py install for networkx ... done
Running setup.py install for ply ... done
Running setup.py install for mpmath ... done
Running setup.py install for sympy ... done
Running setup.py install for qiskit ... done
Successfully installed IBMQuantumExperience-1.9.0 qiskit-0.4.11 requests-2.18.4 requests-ntlm-1.1.0 scipy-1.0.1 six-1.11.0 sympy-1.1.1 urllib3-1.22
(qiskit) [centos@localhost qiskit]$
Qubit 的代數表示法
在深入量子程式設計之前,我們需要複習一些基本的數學概念,以瞭解幕後發生的事情。
線性代數基本概念
- 線性向量:用於表示 qubit 的基本狀態,如 $\begin{pmatrix} 1 \ 0 \end{pmatrix}$。
- 複數:由實部和虛部組成,表示為 $a + bi$,其中 $i = \sqrt{-1}$。qubit 的疊加狀態係數 $\alpha$ 和 $\beta$ 就是複數。
- 複共軛:透過改變虛部的符號獲得,例如 $a + bi$ 的複共軛是 $a - bi$。
- 矩陣乘法:兩個矩陣的乘積運算,用於描述量子閘的操作。
Dirac 的 Ket 表示法
使用 Dirac 表示法,qubit 的基本量子狀態表示為 $|0\rangle$ 和 $|1\rangle$,稱為計算基礎狀態。
####### 本章重點回顧
- 在 CentOS 上安裝 Python 3.6 和 QISKit。
- 設定虛擬環境以隔離套件安裝。
- 複習線性代數和 Dirac 表示法的基本概念。
透過本章的學習,您應該對 QISKit 的安裝和 qubit 的數學表示有了基本的瞭解。接下來,我們將進一步探索量子程式設計的世界。
量子位元與量子閘:深入理解量子計算的基本原理
在量子計算的世界中,量子位元(qubit)是資訊的基本單位。與經典位元不同,量子位元可以同時存在於多個狀態,這種特性稱為疊加態(superposition)。本篇文章將探討量子位元的數學表示、量子閘的操作原理,以及如何利用這些基本元件進行量子計算。
量子位元的向量表示
在量子力學中,量子位元的狀態可以使用二維複向量空間中的向量來表示。這種表示方法根據狄拉克符號(Dirac notation),其中 $|0\rangle$ 和 $|1\rangle$ 是兩個基態,分別對應於二維向量空間中的兩個單位向量。一個一般的量子態可以寫成這兩個基態的線性組合:
$\alpha|0\rangle + \beta|1\rangle$
其中 $\alpha$ 和 $\beta$ 是複數,且滿足歸一化條件 $|\alpha|^2 + |\beta|^2 = 1$。這種表示方法為理解量子閘的操作提供了基礎。
疊加態:線性代數的觀點
疊加態是量子力學中的一個基本概念,描述了量子系統可以同時存在於多個狀態的特性。從線性代數的角度來看,疊加態只是基態 $|0\rangle$ 和 $|1\rangle$ 的線性組合。這種觀點有助於我們更好地理解量子態的性質和量子閘的操作。
使用向量表示疊加態
如果您熟悉線性代數,可以使用向量來表示疊加態。例如,疊加態 $\alpha|0\rangle + \beta|1\rangle$ 可以寫成向量的形式:
$\begin{bmatrix} \alpha \ \beta \end{bmatrix} = \alpha \begin{bmatrix} 1 \ 0 \end{bmatrix} + \beta \begin{bmatrix} 0 \ 1 \end{bmatrix}$
這種表示方法使得我們可以使用線性代數的工具來分析和操作量子態。
量子閘:操控量子位元的狀態
量子閘是量子計算中的基本邏輯閘,用於操控量子位元的狀態。它們與經典邏輯閘類別似,但操作的是量子態。接下來,我們將介紹兩種重要的量子閘:NOT閘(Pauli X)和Hadamard閘。
NOT閘(Pauli X)
NOT閘是一種簡單的量子閘,它將 $|0\rangle$ 對映到 $|1\rangle$,將 $|1\rangle$ 對映到 $|0\rangle$。它的矩陣表示為:
$X = \begin{bmatrix} 0 & 1 \ 1 & 0 \end{bmatrix}$
使用這個矩陣,我們可以計算NOT閘對基態的操作結果:
$X|0\rangle = \begin{bmatrix} 0 & 1 \ 1 & 0 \end{bmatrix} \begin{bmatrix} 1 \ 0 \end{bmatrix} = \begin{bmatrix} 0 \ 1 \end{bmatrix} = |1\rangle$
$X|1\rangle = \begin{bmatrix} 0 & 1 \ 1 & 0 \end{bmatrix} \begin{bmatrix} 0 \ 1 \end{bmatrix} = \begin{bmatrix} 1 \ 0 \end{bmatrix} = |0\rangle$
Hadamard閘
Hadamard閘是一種重要的量子閘,它可以建立疊加態。它的操作定義為:
$|0\rangle \rightarrow \frac{|0\rangle + |1\rangle}{\sqrt{2}}$
$|1\rangle \rightarrow \frac{|0\rangle - |1\rangle}{\sqrt{2}}$
Hadamard閘的矩陣表示為:
$H = \frac{1}{\sqrt{2}} \begin{bmatrix} 1 & 1 \ 1 & -1 \end{bmatrix}$
使用這個矩陣,我們可以計算Hadamard閘對基態的操作結果:
$H|0\rangle = \frac{1}{\sqrt{2}} \begin{bmatrix} 1 & 1 \ 1 & -1 \end{bmatrix} \begin{bmatrix} 1 \ 0 \end{bmatrix} = \frac{1}{\sqrt{2}} \begin{bmatrix} 1 \ 1 \end{bmatrix}$
$H|1\rangle = \frac{1}{\sqrt{2}} \begin{bmatrix} 1 & 1 \ 1 & -1 \end{bmatrix} \begin{bmatrix} 0 \ 1 \end{bmatrix} = \frac{1}{\sqrt{2}} \begin{bmatrix} 1 \ -1 \end{bmatrix}$
圖示說明
此圖示展示了量子位元的向量表示和疊加態的概念。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title QISKit 量子程式設計流程與量子閘操作
package "QISKit 開發環境" {
component [Python 3.5+] as python
component [pip 套件管理] as pip
component [QISKit SDK] as qiskit
}
package "量子電路建構" {
component [QuantumCircuit] as qc
component [量子位元初始化] as qubit_init
component [量子閘操作] as gates
}
package "量子閘類型" {
component [Hadamard 閘] as hadamard
component [Pauli X/Y/Z 閘] as pauli
component [CNOT 閘] as cnot
component [測量操作] as measure
}
package "執行與結果" {
component [Aer 模擬器] as aer
component [IBM Quantum 後端] as ibm
component [結果分析] as result
}
python --> pip : 安裝工具
pip --> qiskit : 安裝 SDK
qiskit --> qc : 建立電路
qc --> qubit_init : 初始化量子位元
qubit_init --> gates : 應用量子閘
gates --> hadamard : 建立疊加態
gates --> pauli : 位元翻轉
gates --> cnot : 糾纏操作
gates --> measure : 測量結果
hadamard --> aer : 本地模擬
hadamard --> ibm : 真實量子電腦
aer --> result : 統計結果
ibm --> result : 量子測量
note right of hadamard
Hadamard 閘公式:
H = 1/√2 [[1, 1], [1, -1]]
將 |0⟩ 轉為疊加態
end note
note right of cnot
CNOT 閘實現量子糾纏
控制位元決定目標位元翻轉
end note
note right of result
測量結果為機率分布
多次執行統計頻率
end note
@enduml
程式碼範例與解析
import numpy as np
# 定義NOT閘(Pauli X)的矩陣表示
X = np.array([[0, 1], [1, 0]])
# 定義Hadamard閘的矩陣表示
H = 1/np.sqrt(2) * np.array([[1, 1], [1, -1]])
# 定義基態|0⟩和|1⟩的向量表示
zero_state = np.array([1, 0])
one_state = np.array([0, 1])
# 使用NOT閘翻轉基態
print("NOT閘操作結果:")
print(np.dot(X, zero_state))
print(np.dot(X, one_state))
# 使用Hadamard閘建立疊加態
print("Hadamard閘操作結果:")
print(np.dot(H, zero_state))
print(np.dot(H, one_state))
程式碼解密:
- 首先,我們匯入了
numpy函式庫,用於進行矩陣運算。 - 定義了NOT閘和Hadamard閘的矩陣表示,這些矩陣用於描述量子閘的操作。
- 定義了基態 $|0\rangle$ 和 $|1\rangle$ 的向量表示,這些向量是二維複向量空間中的單位向量。
- 使用
np.dot函式計算了NOT閘和Hadamard閘對基態的操作結果,分別對應於翻轉態和疊加態。 - 列印了操作結果,以驗證計算是否正確。
透過這個程式碼範例,我們展示瞭如何使用Python和numpy函式庫來實作和操作量子閘,從而更好地理解量子計算的基本原理。