0817
夏休みなのでAmazonのクラウド量子コンピュータで遊んでいました。量子回路を定義すると実行してくれるらしい。大学の授業で量子コンピュータのことは習った覚えがあったから、まあこのくらいはできるじゃろと思ってShorの素因数分解アルゴリズムを実装しようとしたのだけど、これがなかなか難しかった。まずそもそもこれは全部が量子計算というわけではない(が量子計算はキューに積まれてあとで実行されるので古典計算と混ぜて書きづらい)のと、あと巷の解説サイトがわりと説明を端折っているのと。具体的には位数推定計算に出てくる制御ユニタリゲートなんだけど、これ具体的にどういうユニタリ行列になるのか全然解説なくないですか。それとも僕の知らないギョーカイの常識があれば見ただけでわかるのだろうか……。12年前にレポート課題でこれを計算していた僕も全然わかってなかったし。これ手計算ならとりあえずできるけど、ゲートとして実装するのは全然違う話だよな。うーむ。
一応それらしく動くものは書けたけど、やはりユニタリゲートが不細工で、ここに置くユニタリ行列だけで異常にメモリを消費してしまう。10量子ビットで計算しようとしただけで2^10×2^10の行列が出てきてしまうのよね。ここも量子回路で表現する手法も知られているようだけど、さすがにそこまで深入りはできなかった。
とりあえず899の素因数分解をシミュレイタで動かすところまではできたので満足した。モノホンの量子コンピュータで動かしてみたかったけど、あれはジョブをキューに積んであとで結果を受け取る仕組みのようだから、こういう「当たるまで繰り返す」系計算には向かない(そういうのもうまく扱える仕組みがあるかもしれないけど、ドキュメントが足りなすぎて知らない)。一応全然単純な回路をチュートリアルの一環で投げてあるから、明日様子を見ようかな。
そういうわけで今日はそれ以外の趣味にはほとんど時間を使えなかった。夕方は作り置きとかしてたし。カレーも煮た。おいしい。
明日はオンライン帰省する?らしい。