フォーム読み込み中
IBM Cloudが提供している、量子コンピュータのシミュレータを使用できるQiskitをIBM Cloud のWatson Studio内に作成したノートブック上でPythonを使用し、量子回路をマッピングし、その結果を測定します。
量子力学の現象を利用して並列計算を実現するコンピュータです。
並列処理能力と、量子アルゴリズムから、データベース検索、素因数分解を用いた暗号解読、薬の開発、暗号解読や最適化問題などの古典コンピュータでは解くことは可能だが、時間がかかりすぎてしまう特定の分野で効率よく、高速に計算することが期待されています。
しかし量子コンピュータは環境のノイズや温度の変化などに左右されやすく、誤りが生じやすい欠点もあり、実用化には至っていません。
量子コンピュータの大きな特徴として、従来のコンピュータ(古典コンピュータ)がビット(0か1)を使用するのに対して、量子ビット(0と1の重ね合わせ)を使用します。そのため、複数の入力を同時に処理することが可能です。また、古典コンピュータにおいて、ビット演算を行うゲート(AND、OR、XOR、NOTなど)に対して、量子コンピュータでは、量子ゲートを使用する点も特徴の一つです。
量子ゲートについては後ほど実際に実行して確認していきます。
Qiskitは、量子コンピュータ用のオープンソースのフレームワークです。
量子回路を作成し、プロトタイプの量子デバイスやシミュレーション上で実行するためのツールを提供します。Python, Swift, JavaScriptなどの言語で記述することができ、IBMによって開発されました。量子コンピューティングの分野での研究や開発に広く利用されています。
Watson Studio(要ログイン)内に、Pythonが使える、Jupyter ノートブック・エディターを作成します。
実行環境に必要なパッケージをインストールします。
#Qiskitのインストール
!pip install qiskit
#作図に使用するpylatexencのインストール
!pip install pylatexenc
#ノイズの有無にかかわらず量子回路を実行するQiskit-Aerのインストール
!pip install qiskit-aer
量子ゲートを実際に配置して、量子回路を作成していきます。量子ゲートの1つであるHゲートを配置して結果を測定します。Hゲートは0と1が重ね合わせられた状態です。重ね合わせとは、量子力学の基本的な性質の1つで、測定するまで0と1のどちらなのか確定しない状態を言います。イメージがつきにくいので実際にHゲートを測定してみます。
以下のコードでは、量子回路に一本線を追加し、Hゲートと、その情報を取り出す測定ゲートを配置します。
#必要ライブラリインポート
from qiskit import QuantumCircuit
from qiskit.primitives import Sampler
sampler = Sampler()
#QuantumCircuitオブジェクト作成。(1,1)は1つの量子ビットと1つの※古典ビットを持つ。
qc = QuantumCircuit(1,1)
#Hゲートを配置
qc.h(0)
#測定
qc.measure([0], [0])
#配置した量子回路を実行する
job = sampler.run(qc)
#回路の実行結果を取得
result = job.result()
#結果を表示
print(f">>> {result}")
#結果のほぼ確率分布を表示
print(f" > Quasi-distribution: {result.quasi_dists[0]}")
#量子回路を作図
qc.draw('mpl')
※通常のコンピューターで使用される0または1の値を持つメモリやデータの表現に利用される単位
<結果>
量子回路図から、Hゲートと測定ゲートが配置されていることが確認できます。
また結果から、[ {0: 0.5, 1: 0.5} ]、つまりHゲートの特性の通り、0と1の値が0.5ずつ、半々の割合であることが測定されていることが確認できます。
次のコードでは、Xゲートを使用して0を1に、1を0に反転させる操作と、指定したビットによってゲートが適用されるCXゲートおよびCCXゲート(指定したビットが0の場合はゲートを置いたビットは1になり、1の場合は0になる)を使用して、1 + 1を計算します。量子回路には5つの量子線があり、1 + 1の計算部分を指定するために2つのXゲートが配置されます。また、より正確な結果を得るために、1 + 1の計算部分を指定し、それ以外のビットを0にするCXゲートが配置されます。最後に、計算結果を取得するための測定ゲートが配置されます。
#必要ライブラリインポート
import qiskit
from qiskit_aer import AerSimulator
from qiskit.visualization import plot_histogram
import time
from qiskit import ClassicalRegister, QuantumRegister
from qiskit import QuantumCircuit
backend_sim = AerSimulator()
q = QuantumRegister(4)
c = ClassicalRegister(2)
qc = QuantumCircuit(q, c)
#0、1番目の量子ビットにXゲートを配置
qc.x(q[0])
qc.x(q[1])
#そのほかのゲートにCXゲートを配置
qc.ccx(q[0],q[1],q[2])
qc.cx(q[0],q[3])
qc.cx(q[1],q[3])
#測定
qc.measure(q[2], c[1])
qc.measure(q[3], c[0])
job_1 = backend_sim.run(qc)
#結果をヒストグラムで表示
plot_histogram(job_1.result().get_counts(qc))
<結果>
量子回路で、Xゲートが2つのビットに、CXゲート、CCXゲートがそのほかのビットに、測定ゲートが配置されていることが確認できます。
結果のヒストグラムから、2つのXゲートのみを測定し、結果が二進数の10(十進数の2)であることが確認できます。
現在複数の企業で研究、開発され、注目を集めている量子コンピュータについて、ゲートの特性にフォーカスして、シミュレータをさわってみました。量子ビットを量子ゲートで操作することで、重ね合わせなどの特有の性質や、量子ゲートの効果を実際に動かすことで理解できました。量子コンピュータは古典コンピュータに比べて膨大な情報処理や複雑な問題解決が可能である一方で、まだ研究段階ではあります。しかしこの技術の発展によって、新たな分野の革新的な応用が期待されています。今後の量子コンピュータの開発に期待です。
IBM Cloudは、IBMが提供するビジネスのためのクラウドサービスです。AIプラットフォームのIBM Watsonをはじめとする幅広い製品・サービスを提供。ビジネス活用だけでなく、既存システムからのセキュアなクラウド移行や、クラウドネィティブ・アプリケーションの開発の両方に対応できるクラウドサービスです。
条件に該当するページがございません