カレーか、ラーメンか。それが問題だ。
こんにちは、佐藤です。
皆さんは、お昼ごはんのメニューが決まらずに貴重な昼休みを浪費してしまった経験はありませんか?
気づけば時計の針は12:15を回り、店選びの選択肢がどんどん狭まっていく絶望感…。
正直なところ、私自身何度もそんな経験があります。
はじめに
15分の使い方が人生(と仕事)を変える?
そんな私ですが、先日Yahoo!ニュースでこんな興味深い記事を見かけました。
週明け15分の「デジタル断捨離」が、仕事のパフォーマンスを劇的に変える理由
(中略…記事の要約)…週明けのたった15分を使ってデスクトップのファイル整理やスマホのアプリ整理(デジタル断捨離)をするだけで、デジタルのノイズが減り、その後の生産性が劇的に向上するとのこと。
…待ってください。
記事によれば「たった15分」で仕事の生産性を劇的に向上させららしい。
それなのに私はその貴重な15分を「今日、麺にするか米にするか」という悩みだけで溶かしている。
そんなの許されるわけがありません。
ランチの決定ごときに時間をかけてはいけない、0秒で決めるべきです。
普段Javaなどを扱っているエンジニアなら math.random() を使おうとか思いつくかもしれません。
しかし PC内部の時計に依存した「疑似乱数」で、私の大切な胃袋の運命を決定していいはずがありません。
「真のランダムに、私の胃袋を委ねたい。」
そう決意した私は、とりあえずAWSを開きました(?)
ということで今回は、量子コンピュータを手軽に使えるサービス「Amazon Braket」を使って、
量子力学の「重ね合わせ」を利用し、今日のランチを文字通り一瞬で決定してみようと思います。
シュレディンガーのカレーとは?
皆さんは「シュレディンガーの猫」をご存知でしょうか?
オーストリアの物理学者エルヴィン・シュレディンガーが提唱した思考実験で、
箱の中の猫が「生きている状態」と「死んでいる状態」が観測されるまで同時に存在するという、
量子力学の奇妙な性質(重ね合わせ)を表したものです。
コイントスなどを想像するとわかりやすいかと思います。
投げられたコインをハイスピードカメラで捉えると、きっと表か裏か、どちらかを向いていると思います。
ですが我々の目では、回っているコインの表裏を判別することができません。
その瞬間を、量子力学では「表と裏が混ざり合っている『重ね合わせ』の状態」と考えるのです。
ならば、私のランチも量子力学の重ね合わせに委ねてみてはいかがでしょうか。
状態 |1> : ラーメン
この2つの状態が、観測されるその瞬間まで同時に存在している。
要するに「店に入って券売機を見るまで、私のランチはカレーでもありラーメンでもある!」
という、優柔不断な状態を物理学的に正当化してみただけですね。
私のランチは、カレーでもありラーメンでもある。
これこそが「シュレディンガーのカレー」です(ここまで理解できましたか…?)
やってみた
BedrockではなくあえてBraketを使ってみる
さて、さっそくAWSで量子コンピューティングを始めてみましょう。
こういう話題はもっぱらAmazon Bedrockが話題ですが、今回使用するのはAmazon Braketです。
Braketとは、量子コンピューティングの調査、評価、実験のためのフルマネージドサービスです。
マネジメントコンソールから「Amazon Braket」を検索し、有効化していきます。
ちなみにリージョンは安定のバージニア北部(us-east-1)で。
案内に従ってノートブックインスタンスを作成し、JupyterLabを起動すれば準備はOK。
Notebookのconda_braketを選択すればOK。
ここまでの所要時間は数分。デジタル断捨離よりも早いです。。。
量子回路でランチを設計する…?
今回の検証で最も大切な部分、コードの実装です。
Jupyter Notebook上で、以下のようなロジックを組みました。
重ね合わせで「2つのメニューが混ざり合っている」状態へ
まず、量子回路(Circuit)を作成し、1量子ビットを用意します。
ここに「アダマールゲート(H)」という操作を加えます。これが魔法のゲートです。
「0」という確定した状態をこのゲートに通すと、量子の世界特有の「0と1が半々で重なり合った状態に変化します。
先ほどの例で言うところのコインを投げる行為に等しいと言えます。
# 量子回路の作成
circuit = Circuit().h(0)
このたった1行で、量子ビットは「0」と「1」の重ね合わせ状態になります。
つまり、カレー(0)とラーメン(1)が50:50の確率で重なり合っている状態を作り出すのです。
量子回路図で見るとこんな感じ。

シンプルですが、この中に宇宙の真理が詰まっています。
いざ、実機(IonQ)で運命の観測!
ここでシミュレーター(LocalSimulator)を使えば、コストもかからず一瞬で結果が出ます。
しかし、それでは面白くありません。いえ、それでは「真のランダム」とは言えません。
自然界の真理に委ねるため、今回は妥協なく実際の量子コンピュータ(QPU)を使用します。
デバイスには、イオントラップ方式の量子コンピュータ 「IonQ Forte-1」 を指定しました。
# 実機(IonQ)を使う場合 (有料かつ待ち時間あり)
device = AwsDevice("arn:aws:braket:us-east-1::device/qpu/ionq/Forte-1")
タスクのショット数(試行回数)を100回に設定し、いざ実行!
「これで今日のランチ迷子とはおさらばだ!」と意気込んで実行ボタンを押しました。
print("量子コンピュータ(またはシミュレータ)で測定中...")
観測結果はいかに
待つこと…1時間。
ようやくIonQから観測結果が返ってきました。
私の胃袋の重ね合わせが収束した瞬間です。
結果はこちら↓
ラーメン (1) : 52回
僅差ですが、「1」の勝利!
ということで量子コンピュータは私にラーメンを食べるよう啓示を授けました。。。
デジタル断捨離4回分の代償は大きかった…
無事にランチが決まってよかった!
…と、素直に喜べる状況ではありません。2つの悲惨な代償が襲いかかってきます。
まず、金銭的コスト。
今回の「IonQ」実機利用(100ショット)にかかった費用は…
30ドル(約4,732円)
ランチ代より高くないですか!?ラーメン4杯分です。
そして何より、時間的コスト。
実行から結果が返ってくるまでの待ち時間、
60分
冒頭のニュースを思い出してください。
「15分のデジタル断捨離で、仕事のパフォーマンスは劇的に変わる」
私は、その4倍にあたる60分を、ただ「ラーメンを食べる」という決断のためだけに費やしました。
しかも、結果が出た頃には昼休憩が終了しているという失態ぶり…
まとめ
今回はAmazon BraketのIonQを使って、今日のランチを量子力学的に決定してみました。
結果として、厳正なる宇宙の法則によってランチメニューは決定されましたが、
「ランチを食べる時間」そのものがなくなり、結局パンを齧るのでした…
学び
・実機(QPU)を使うと、お財布と時間に大ダメージを受ける可能性がある。
・15分あるなら、量子計算を待つのではなく、デスクトップのファイルを整理すべき。
それでも軽い気持ちで量子コンピュータを試してみたい!
そんな方はぜひシミュレーターを使って気軽に量子コンピュータを試してみてください!
私のような物好きはせめて時間に余裕がある休日に行うことを強くおすすめします!
ぜひ、皆さんもお財布に気をつけて楽しんでみてください!



