量子コンピューターは
量子コンピューターって、一言でいうと、量子力学の重ね合わせの状態を使って計算しているんだろうけど、よくわからないので、このままだと可哀そうな半死半生の「シュレディンガーの猫」に噛みつかれそうなので、ちょっと動かしながら勉強してみました。
シュレディンガーの猫
by wikipedia
シュレディンガーの猫とは、wikipediaの説明を簡単にすると
猫と放射性元素のある密閉した鋼鉄の箱の中で、放射性元素の1時間あたりの原子の放射性崩壊確率を50%とし、ガイガー計数管が原子崩壊を検知すると電気的に毒ガスが放出されて猫が殺される仕掛けになっています。1時間後には、箱の中の猫は「放射線が放出されたので猫が死んでいる」と「放射線が放出されていないので猫は生きている」という二つの状態が50%ずつの重ね合わせた状態になっています。箱をあけるまではこの状態で箱を開けた瞬間に猫の生死が決まります。
量子コンピューターをちょっと勉強して、この猫の気持ちを味わいたいと思います。
IBMの量子コンピューターの動かし方
量子コンピューター on IBM Cloudのチュートリルがありますので、それを使うと量子コンピューターを動かすことができます。
Googleアカウントでアカウントが簡単にできてログインできます。
そうなんです。量子コンピューターと言っても、googleアカウントがあればすぐに動かすことができます。
ログインするとこんな画面です。
IBM Quantum Composer は、楽譜みたいなGUIを使ってプログラムを作ります。
IBM Quantum Lab は、jupyterlabが立ち上がり、pythonでプログラムを作ります。
なんか楽譜みたいなプログラムって、超クールっぽいので、composerでプログラムを作ってみます。
### 量子コンピューターの「Hello World」は
量子コンピューターでの「Hello World」は、ベル状態を作り出すことのようです。
でもベル状態ってなんだったのか、量子力学の落ちこぼれには思い出すことができません。でもどうやらこれでシュレディンガーの猫の気持ちが少しわかるようです。動かしてみましょう
### Create your first circuit walkthrough
docs&tutorial にCreate your first circuit walkthrough があるので、これを一つずつやってみます。
以下の「 」内はチュートリアルの日本語でgoogle翻訳です。
page1
「最初の回路を作りましょう Composerには、量子ハードウェアまたはシミュレーターで量子回路を構築、視覚化、および実行できるようにするカスタマイズ可能なツールのセットがあります。 最初の回路、ベル状態を一緒に構築しましょう。」
page2
「量子ゲートと操作 ゲートと操作はキュービットを操作します。 それらは量子回路の構成要素です。 量子回路を構築するために、操作ブロックを下のワイヤーにドラッグアンドドロップします。」
page3
「ベル状態の構築 ベル状態を構築します。 ベル状態は、特定の最大に絡み合った2量子ビット状態を生成します。詳細をご覧ください。まず、アダマールをドラッグします(NS)最初のキュービットワイヤ(q0)にゲートします。」
最初にアダマールゲートを $ q_0 $ におきます。
このアダマールゲートがポイントです。アダマールゲートは、量子 $ q_0 $ を $ |0⟩ $ と $ |1⟩ $の状態に重ね合わせる状態にするゲートです
page4
「今何があったの? 視覚化では、回路を測定する前に、シミュレーターを使用して量子コンピューターで何が起こっているかを示します。 ワイヤに操作を追加するたびに更新されます。現在、視覚化はアダマールゲートの効果を示しています。 キュービットは重ね合わせになりました。」
アダマールゲートを置いたので、下の可視化のところで、00、01と、 $ q_0 $の確率が50%ずつになっています。
page5
「2つの量子ビットを絡める Hゲートの右側にCNOTゲートを追加します(NS)ワイヤーq0上。 この操作は、q0とq1の2つのキュービットに作用します。新しいゲートを追加すると、ビジュアライゼーションが更新されることに注意してください。 キュービットが絡み合っています。」
CNOTゲートを設置します。このゲートを設置することで、$ q_0 $ が $ |0⟩ $ の時には何もせず、 $ |1⟩ $ の時に反転します。そのため、$ q_1 $ の半分の $ |0⟩ $ が $ |1⟩ $ になります。
今、猫は、こんな状態になっています。
page6
「回路を測定する ワイヤq0およびq1のCNOTゲートの右側に測定操作をドラッグアンドドロップします。 測定結果は、クラシックレジスタにクラシックビットとして記録されます。測定操作を下のワイヤに接続する垂直のワイヤは、キュービットから古典的なレジスタに流れる情報を示しています。」
最後に観測します。観測すると、11となっています。
page7
「コードエディタ 回路に操作を追加すると、コードエディタが更新されます。 openQASMコードを更新すると、変更はグラフィカルエディターに反映されます。コードはopenQASMまたは読み取り専用のQiskit(Python)で確認できます。 他のアプリケーションで使用するためにコードをエクスポートできます。」
page8
「学び続けます 次に何をすべきかわからない? 回路を実行するための手順、量子コンピューティングに関する背景情報など、必要なすべての情報は、ドキュメントとチュートリアルのパネルにあります。」
学び続けますと言われても、ちょっと限界に近いですが、少しだけ猫の気持ちがわかったような気がします。
次は、1+1=2を計算したいと思います。
参考にしたHP
量子計算におけるゲート色々
Qiskit を使った量子計算の学習
IBMQを動かして学ぶ量子コンピューター