教室でQiskitを使ってみよう
このQiskit in Classroomsモジュールでは、以下のパッケージをインストールした動作するPython環境が必要です:
qiskitv2.1.0以降qiskit-ibm-runtimev0.40.1以降qiskit-aerv0.17.0以降qiskit.visualizationnumpypylatexenc
上記パッケージのセットアップとインストールについては、Qiskitのインストールガイドをご参照ください。 実際の量子コンピューターでジョブを実行するには、IBM Cloud®アカウン トの設定ガイドの手順に従ってIBM Quantum®のアカウントを作成する必要があります。
このモジュールはHeron v2プロセッサー上でテストされ、2秒のQPU時間を使用しました。これはあくまで推定値であり、実際の使用量は異なる場合があります。
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-aer qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'
はじめに
Qiskit in the Classroomモジュールでは、量子コンピューターを使って、量子力学・コンピューターサイエンス・化学などの量子コンピューティングに関連する様々な分野の概念を探求する機会があります。このモジュールは他のモジュールの前提条件として機能しており、量子コンピューティングの基礎と、Qiskitを使って量子Circuit(回路)を実行する方法を紹介します。
まず古典的なコンピューターの仕組みについて簡単に説明し、次にこれらの概念が量子コンピューティングのパラダイムにどのように適用されるかを示します。最後に、これらの概念をまとめて最初の量子Circuit(回路)を構築・実行する方法をお見せします。
古典的なコンピューター
古典的なコンピューターの仕組みの基礎はすでにご存知かもしれませんが、ここでは量子コンピューターとの比較ができるよう、主要な特徴をいくつか取り上げます。
情報の基本単位:ビット
古典的なコンピューターは古典的な情報を処理しており、古典的な情報の基本単位はビットです。1つのビットは「はい/いいえ」という1つの問いへの答えを格納できます。ビットの2つの二進状態は通常「0」と「1」で表されます。
二進数の復習
ビットを組み合わせることで、より多くの情報を格納できます。例えば、0から15の数値を格納したい場合、次のように4ビットで表現できます:
| 0 = 0000 | 4 = 0100 | 8 = 1000 | 12 = 1100 |
| 1 = 0001 | 5 = 0101 | 9 = 1001 | 13 = 1101 |
| 2 = 0010 | 6 = 0110 | 10 = 1010 | 14 = 1110 |
| 3 = 0011 | 7 = 0111 | 11 = 1011 | 15 = 1111 |
一般に、ビットの二進数を馴染みのある10進数に変換するには、最下位(最右端)のビットをで乗算し、その左のビットをで、次のビットをで乗算し、最上位(最左端)のビットに達するまでで乗算するまで続けます。
つまり、ビットは通りの異なる状態のうちの1つになり得ます。
理解度チェック
以下の問いを読み、答えを考えてから、三角形をクリックして解答を確認してください。
86という数を表すには何ビット必要ですか?この数を二進数でエンコードするビット列を書き出してください。
答え:
ビットではからまでの数を表せることを思い出してください。6ビットでは最大です。それでは足りません。もう1ビット追加してまで表せるようにします。では86を2の冪乗に分解しましょう:
基本演算:Gate(ゲート)
コンピューターは、計算を行うためにビットに対して何らかの操作を実行できる必要があります。二進Gate(ゲート)は、より複雑なアルゴリズムやコードすべての基本的な構成要素となる演算です。
1ビットGate(ゲート):
NOT
1つのビットしかない場合、その状態を変換する方法は1つだけです:状態を0から1へ、または1から0へ反転させます。これを「NOT」Gate(ゲート)と呼びます。このGate(ゲート)の効果——および以下で説明する他のGate(ゲート)の効果——は、いわゆ る「真理値表」で表すことができます。真理値表には、Qubitの入力状態と出力状態の列があります。NOT Gate(ゲート)の真理値表は以下のとおりです:
| 入力 | 出力 |
|---|---|
| 0 | 1 |
| 1 | 0 |
複数ビットGate(ゲート):
AND
ANDは2つの入力ビットを受け取り、1つのビットを出力する2ビットGate(ゲート)です。両方の入力ビットが1の場合に1を出力し、それ以外は0を出力します:
| 入力 | 出力 |
|---|---|
| 00 | 0 |
| 01 | 0 |
| 10 | 0 |
| 11 | 1 |
OR
ORも単一の出力ビットを持つ2ビットGate(ゲート)です。どちらかのビットが1であれば1を出力します:
| 入力 | 出力 |
|---|---|
| 00 | 0 |
| 01 | 1 |
| 10 | 1 |
| 11 | 1 |
XOR
XORは「排他的論理和(exclusive OR)」の略で、OR Gate(ゲート)に似ていますが、入力ビットのうちの1つだけが1の場合に1を出力します。両方が1または両方が0の場合は0を出力します:
| 入力 | 出力 |
|---|---|
| 00 | 0 |
| 01 | 1 |
| 10 | 1 |
| 11 | 0 |
測定:
古典的なコンピューティングを学ぶ際、ビットの状態を読み出すプロセスにはあまり注意が払われません。これは、概念的な観点から見るとそれほど複雑ではないためです。ビットは計算の前後いつでも測定でき、結果に影響を与えません。これは量子コンピューティングには当てはまらず、以下で説明します。
Circuit(回路):
上記のGate(ゲート)を組み合わせることで、コンピューター上で任意の操作を実行できます。簡単な例として、ANDとXOR Gate(ゲート)を使って、2ビットの和を計算する半加算器Circuit(回路)を構成できます。これは論理Circuit(回路)図で表され、ワイヤーがビットを表し、各ビットに作用するGate(ゲート)が対応するワイヤー上のシンボルとして示されます:
つまり、2つのビットがコピーされ、AND Gate(ゲート)とXOR Gate(ゲート)の両方に入力されます。XOR Gate(ゲート)の結果は「和ビット」(S)で、二進数の1の位の値を表し、AND Gate(ゲート)の結果は「桁上げビット」(C)で、二進数の次の上位桁の値を表します。真理値表は以下のとおりです:
| 和 () | 桁上げ () | ||
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
理解度チェック
以下の問いを読み、答えを考えてから、三角形をクリックして解答を確認してください。
上記の真理値表が加算器Circuit(回路)の正しい解を与えることを確認してください。つまり、AとBの4つの選択肢それぞれについて、が成り立つことを確認してください。
答え: