見出し画像

量子コンピューティングを齧る Qiskit(そもそも編)

量子コンピュータの本を量子ビットと量子ゲートまで読み進んだ。
この分野は古典コンピュータとの区別を付けるために何かと「量子」を付けないと語れないのは面倒だ。
「語る」だって。ぷぷぷ。ちょっと恥ずかしい。


久しぶりのCUI(Character User Interface)

で、語り続けるのだがこの先はPythonを使ったプログラミングになるらしい。
その環境として使うのがIBMの"Qiskit"だそうだ。
本では導入方法や使い方は付録を参照するように書かれていて、その付録を見たところ「CUIでpipからのimport」だけだった。

ふだんはWindowsばかり使ってる。GUI専門だ。
古いMACも持っていているがこっちもGUIばかり使っていた。MACを使うようになった理由がそこだったし(いつ時代の話だろう)。
CUI、コマンドプロンプトなんてたまに触ってはくじけて終わる。

Linuxもそれこそ休眠状態だったMACをベアメタルにして(したつもりで)インストールしたまではムキになってやったけどそこで途切れてしまった。
Twitter(現X)であれこれ手助けしてもらったのに。スミマセン…

noteも「つづく…」って書いたままで終わってる。
今月末(年末)には応用技術に合格するはずだからそしたら再開する。
とかしないとか。

Windowsのコンソールはしょっちゅう変わる。
コマンドプロンプトがターミナルになってそれがPowerShellになっている。
今回もちょっと気取ってPowerShellを使ったら「新しいバージョンありますけど?」というメッセージが出てきて5.1から7.4に上げた。
何が変わったのかはわからない。

要は黒い画面触ることになった。
この話はとりあえずいったんここまで。

こういうやつ。


Qiskitって何だ?

脱線に脱線して乗り換えまでしている。
Qiskitの話だった。

QiskitはIBMが"Qiskit is the world’s most popular software stack for quantum computing."だと言っている。

"stack"って?

「てんこ盛り」

本によると今どき量子ソフトウェアはあれこれあって量子回路を作るサポートをしてくれるらしい。他に何があるかわからないがQiskitを取り上げていたのでそのまま従うことにした。

なのでQiskitは量子回路作成支援ツールだ。
この感覚は古典コンピュータのプログラミングだとちょっとつかみにくいかもしれない。
回路については情報工学の最初の方でやる(んだよね?今でも)。
ただそこは飛ばしても何かしらのITエンジニアにはなれる(と思う)。プログラマーだっていけるんじゃなかろうか。

高級言語があるからだ(今は高水準言語っていうの?)。
ウィキには「記述の抽象度が高い」と書いてある。ハードウェアから浮き気味でも行けるということなんだろう。
オートマみたいな感じ?(限定免許の話すると炎上するんでしょ?)

あえて車の例を引っ張るなら量子コンピューティングは押しがけができた時代から電子制御に切り替わったあたりじゃなかろうか。
「押しがけ」ってほら、ミッションの…あ、マニュアルって意味…MT車…伝わらないか…
ホラー映画の"Come on! Come on! Come on! Come on!!!"も「何言ってるの?」って感じだろうしハリウッドが廃れるのも時代。

というわけで、なかなか手強い状態にあることだけはお分かりいただけ…(説明放棄)。


Qiskitでできる(できた)こと

再び情報工学の話に戻ると一番最初に「デジタルというのは0か1で、それはスイッチをオンにするかオフにするかのどちらか」といった説明があるんじゃないかと思う。
スイッチを入れたら灯りが点く。ものすごい数のスイッチをものすごいスピードでカチカチやってるのが今のコンピュータってことは誰しもがご存知のことと…(説明放棄)。

量子コンピュータはもやっと点く。点いてるのか?点いてないのか?どっちなんだい?
といのうをいくつも繋げていくんだけど最終的には点くか点かないじゃないと人間側が付いていけないから「ま、これぐらいなら点いてるってことで」と折り合いを付ける。

その図がこれ。

もつれ状態の回路

まずHをする。アダマール。

そこに茶々が入る。丸にプラス。標的q₁をHしたはずのq₀が制御する。量子の場合はもつれにもつれているのでどっちがどっちでもいい(わけじゃないと思うけど)。

それを測る。メーターみたいなやつ。測ったら第三者機関である一番下のcにチクる。

で、ようやくcから報告を受ける。この図でいうと全部で1,024回やった内どっちがどれだけやったのかがグラフになっている。ああ、どっちもやっちゃってますわ。

もつれ状態のシミュレーション

もう一つ例を挙げるともう乱れに乱れる。

SWAPゲートを構成

両者くんずほぐれつだから何が何だかよくわからないぐらいSWAPしてる。それを測る。1周回って立場が逆になったらしい。

SWAPのシミュレーション(|0〉と|0〉をSWAPした…)


Qiskitで何やったの?

これが何だという話になる気がする。
でもとりあえず量子コンピューティングの基本中の基本はたぶんこのあたりなんだろう。
少なくとも本の基礎編(~p.24)に書かれている話が図になる。

$$
CNOT(H \otimes I)|00\rangle
$$

$$
SWAP = (CNOT_{12})(CNOT_{21})(CNOT_{12})
$$

この式(「式」で合ってる?)から図にして最終的に千回ぐらい量子ビットを模擬的に通すぐらいだったらたぶん半日ぐらいでできる。

実は「もつれ状態の回路」を測定する前まではIBMがコードを公開している。

from qiskit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import EstimatorV2 as Estimator

# Create a new circuit with two qubits
qc = QuantumCircuit(2)

# Add a Hadamard gate to qubit 0
qc.h(0)

# Perform a controlled-X gate on qubit 1, controlled by qubit 0
qc.cx(0, 1)

# Return a drawing of the circuit using MatPlotLib ("mpl"). This is the
# last line of the cell, so the drawing appears in the cell output.
# Remove the "mpl" argument to get a text drawing.
qc.draw("mpl")

IBM"Hello world"(https://docs.quantum.ibm.com/guides/hello-world)

みんな大好き"Hello world"である。
Pythonで書かれている。
qiskit関連のライブラリをimportしてそのQuantumCircuitという量子ビット作るクラスのインスタンスを作ってアダマールゲートh()やCNOTゲートcx()なんかの操作をしたら最後にMatPlotLibで絵を描く。
それだけのこと。


ここで教えてくれた

急にできたようなことを書いたけどYouTubeで教えてもらった。
Quantum Tokyo(@QuantumTokyoo)って有志のチャンネル。

測定ゲートから先も観ているとなんとなくわかる。
SWAPゲートあたりは見よう見まねで作れる。

ただ個人的にはPythonは忘れかけてたし最初に書いた通りコマンドはすっかり忘れてたしご飯食べたかも忘れたしいろいろたいへんだった。
なので忘れない間に「量子コンピューティングを齧る Qiskit(準備編)」を書こうと思ってる。
忘れなければ…


いいなと思ったら応援しよう!