DUICUO

オープンソースのソフトウェア開発キットで量子コンピューティングプログラミングを試す

古典的なコンピュータは2進数に基づいており、その形式は0と1の2つしかありません。これは、2進論理システムが、より基本的な状態を持つ論理システム(アナログコンピュータでさえも)に対して本質的に優れているからではありません。むしろ、スイッチング回路の実装が容易であり、高度な半導体技術のおかげで小型で安価なコンピュータを製造できるからです。

しかし、それらには限界がないわけではありません。古典的コンピュータは、特定の問題、特に時間やメモリコストが問題のサイズ(O)に応じて指数関数的に増加する問題を解くのにはあまり効率的ではありません。このような問題をO(2^ n )(Big O記法)と呼びます。

現代の暗号化方式のほとんどはこの性質を利用しています。2つの大きな素数の乗算は低コスト(O(n ^2 ))ですが、その逆の演算は非常に時間がかかります。したがって、使用される数が十分に大きい場合、それらを素因数分解することは非常に困難になります。

量子の世界へ

量子コンピューティングの基礎的な数学とメカニズムはこの記事の範囲を超えています。しかし、いくつかの基本的な概念を事前に説明しておく必要があります。

量子コンピュータは、バイナリビットの代わりに量子ビットを使用します。量子ビットとは、量子特性を示す制御可能な計算ユニットです。量子ビットは通常、超伝導素子または自然界に存在する量子実体(電子など)で構成されます。量子ビットは「重ね合わせ」、つまり0と1が特定の方法で組み合わされた複雑な状態にあります。量子ビットは1と0の両方の状態であると聞いたことがあるかもしれませんが、これは正確ではありません。実際には、測定を行うと量子ビットの状態は0または1のいずれかに収束します。数学的には、測定されていない量子ビットの状態はブロッホ球面として考えることができます。

重ね合わせは古典コンピュータに慣れた人にとっては全く新しい概念ですが、単一の量子ビット自体は特に興味深いものではありません。量子コンピューティングにおける2つ目の概念は「干渉」です。真の量子コンピュータは本質的に統計的な性質を持っています。量子アルゴリズムは干渉パターンをエンコードし、エンコードされたスキームの状態を測定する確率を高めます。

重ね合わせと干渉の概念は斬新ですが、物理世界にも対応する現象が存在します。一方、量子力学における「エンタングルメント」の概念は、物理世界には対応する現象が存在します。しかし、指数関数的な量子加速を実現するための真の鍵となるのは、量子エンタングルメントです。量子エンタングルメントでは、ある微小粒子の測定が、その後のエンタングルメントされた他の粒子の測定に影響を与える可能性があります。たとえ物理的に無関係な粒子であってもです。

量子コンピューティングで何ができるのでしょうか?

今日の量子コンピュータは、搭載する量子ビット数が数十から数百と非常に小規模です。そのため、新しいアルゴリズムは絶えず開発されているものの、同レベルの古典コンピュータよりも高速に動作するハードウェアはまだ開発されていません。

しかし、量子コンピュータは多くの分野で大きな利点を提供します。例えば、分子などの自然量子システムのシミュレーションにおいて、その複雑さは古典コンピュータのモデリング能力を凌駕しますが、量子コンピュータはより優れた手法を提供します。量子コンピューティングは、機械学習の基盤となる線形代数や、その他多くの現代的な最適化問題にも関連しています。したがって、量子コンピューティングがこうした目的にも適していると考えるのに十分な理由があります。

ショアのアルゴリズムは、量子アルゴリズムが従来のアルゴリズムよりも優れていることを示す例として頻繁に挙げられます。このアルゴリズムは初期には素因数分解に使用されていました。1994年にMITの数学者ピーター・ショアによって発明されたこのアルゴリズムは、量子コンピュータでは現在、大規模な問題には適用できません。しかし、指数関数的な時間を要する従来のアルゴリズムとは異なり、このアルゴリズムはO(n^ 3 )時間でタスクを完了することが示されています。

Qiskitから始める

「量子コンピュータは手元にないけど、試してみたい。そもそも可能なの?」と考えている方もいるかもしれません。

Qiskit(Apache 2.0ライセンス)と呼ばれるオープンソースプロジェクトについて学びましょう。これは、IBM量子研究所の量子コンピューティングシミュレータと物理ハードウェア(無料)にアクセスするためのソフトウェア開発キット(SDK)です。APIキーを取得するには登録のみが必要です。

もちろん、Qiskitをより深く学ぶには、線形代数をはじめとする多くの分野の知識が必要です。これはこの記事の範囲をはるかに超えています。さらに詳しく知りたい場合は、完全な教科書など、オンラインで利用できる無料リソースが多数あります。しかし、始めるのも簡単で、PythonとJupyter Notebookの基本的な知識があれば十分です。

もっと楽しくするために、Qiskit チュートリアルの「Hello, World!」プログラムを全体を通して使用します。

まず、インストール チュートリアルから関連するツールとコンポーネントをインストールします。

 pip でgitをインストール+ https://github.com/qiskit-community/qiskit-textbook.git #サブディレクトリ = qiskit-textbook-src

次に、ソフトウェア パッケージをインポートします。

 qiskitからQuantumCircuitをインポートし、アセンブルし、Aer
数学からインポートpi、sqrt
qiskit.visualization から plot_bloch_multivector、plot_histogram をインポートします。

​Aer​はローカルシミュレータです。Qiskitは4つのコンポーネントで構成されています。Aer ​Aer​ベースコンポーネントの​Terra​ 、実際の量子システムにおけるノイズとエラー処理のための​Ignis​ 、そしてアルゴリズム開発のための​Aqua​

 # |0> 量子ビットでXゲートを実行してみましょう
qc =量子回路(1)
qc.x(0)
qc.draw()

量子コンピュータのXゲートは、その基礎となる数学的原理に行列乗算が関わっていますが、古典コンピュータのNOTゲートに類似していると考えることができます。(実際、このゲートは「NOTゲート」と呼ばれることもあります。)

実行して測定してみましょう。結果は予想通りです。量子ビットの初期状態は​|0>​で、その後反転してから測定されているからです。(古典コンピュータのビットと区別するために​|0>​​|1>​を使用してください。)

 # 結果を見てみましょう
svsim = Aer.get_backend( '状態ベクトルシミュレータ' )
qobj =アセンブル(qc)
状態= svsim.run(qobj).result().get_statevector()
plot_bloch_multivector(状態)

ブロッホ球は予想通りの実行結果を示しました。

結論は

ある意味では、量子コンピューティングはGPUやFPGAのように、従来型コンピュータ上で動作する独自のコプロセッサと考えることができます。しかし、近い将来、量子コンピュータはネットワークリソースのようにユーザーが利用できるようになるという違いがあります。また、他の多くのアクセラレータとは異なり、量子コンピュータは根本的に異なる動作をします。だからこそ、アルゴリズム開発には大きな関心が寄せられ、量子コンピューティングがいつ、どこで最も優れたパフォーマンスを発揮するかを研究するために、膨大なリソースが投入されているのです。こうした点について学ぶことは、非常に価値のあることです。