本日はウェビナーの資料をつくります。スライドで作ることも多いですが、ブログ形式にしました。今回のテーマは、
「量子重ね合わせ」
です。一番最初ですので、ここで躓いてしまうとそのあとの話が全部わからなくなります。
企業概要ですが、2022年の最初ではこちらが一番詳しいので、こちらを参照ください。
https://www.opensiliconquantum.com/
さっそくまいりたいと思います。
ビット
デジタルの計算では0と1を使って二進数で計算をします。足し算だったり引き算だったり。通常のコンピュータの仕組みはここでは触れませんが、量子コンピュータでは、この基本が異なります。
量子ビット
量子コンピュータでも0と1を使います。ただ、普通のビットと異なるところがあります。それが0と1を使うのですが、その0と1の状態を重ね合わせることができるというものです。
状態の重ね合わせというのはどういうものがかなりイメージがしづらいと思います。実際には、下のような鉛筆を想像するといいと思います。パチンコでもいいです。下の状態はどちらにでも倒れる状態ですね。これが重ね合わせです。0でも1でも取りうるので、この状態で手を離すと0か1がでます。
例えば、この後に条件付きの操作をしたりすると結果が変わります。たとえば0だと何もしないけど、1の場合には1を0にする回路がある場合、重ね合わせの後に、この条件付きをつけると計算結果は必ず0になります。
条件付きの操作を複数の量子ビットと組み合わせることによって、いろいろな用途がでます。複数量子ビットでこのような重ね合わせを実行すると、少ない量子ビットで多くの答えの状態を取ることができるようになり、あとは条件付きの操作などを組合わせて答えを絞り込んでいくことができます。
プログラミング
プログラミングはシンプルです。hが重ね合わせを作る操作に対応。
from blueqat import Circuit
Circuit().h[0].m[:].run(shots=100)
上記はシミュレーターが動きます。本物の量子コンピュータは、
from bqcloud import load_api
from blueqat import Circuit
from bqcloud import Device
api = load_api()
Circuit, Device, Number of shots, Group name(Optional) for IonQ
task_ionq = api.execute(Circuit().h[0], Device.IonQDevice, 100)
Circuit, Device, Number of shots, Group name(Optional) for Rigetti
task_rigetti = api.execute(Circuit().h[0], Device.Aspen11, 100)
こんな簡単に実行ができます。
次回は解の絞り込み方を見てみたいと思います。以上です。