やること
日本量子コンピューティング協会が主催する「量子エンジニア(ゲート式)講座」が始まりました。現在、初級編(全3回)が一周終わった段階です。
私たちは「量子エンジニア(アニーリング式)講座」を提供していますが、ゲートアルゴリズムの勉強はこれまでa few回挫折しています。いろいろ検索して学ぼうとしましたが、、まあ教材作成って難しいですよね。
それに引き替え、今回のゲート式講座は非常に分かりやすかったです。ここでは初級編の演習課題である「足し算」と「引き算」の備忘録をまとめておきます。教材ではDEVEL社作成の「Qplat」というブラウザ上でポチポチできるGUIシミュレータを用いています。プログラミング不要で嬉しいですね。
Qplatのリンク↓
2024/6/24追記
基本的な量子ゲートと論理回路をまとめたチートシートを作りました。先に履修するといいです↓
学んだパーツ
入門編では5つのパーツを学びました。これらは初学者向けの説明なので不正確なものがあることにご注意ください。
Xゲート・・・0と1をひっくり返す(NOT、論理否定)
CXゲート・・・制御ビットが1であればターゲットビットをひっくり返す(if文みたいな)
CCXゲート・・・2つの制御ビットが1であればターゲットビットをひっくり返す
Hゲート・・・0と1の重ね合わせ状態を作る(読み:アダマールゲート)
M・・・観測
ANDとXOR
基本としてAND(論理積)とXOR(排他的論理和)を作りました。
AND
ANDはCCXゲートがそのまま対応しています。
※どの線もデフォルトの入力は0。何もしなければ0が観測される。
※入力直後にHゲートを置いているのは0と1のすべての組み合わせを同時に入力するため。
XOR
XORはCXゲート2個でできるとのこと。
それぞれの実行結果です。正しく計算できていることを確認してください。
1桁+1桁の足し算(同時計算)
いよいよ課題です。まず、入出力の表を書いて考えます。
上の桁がAND、下の桁がXORになっているので、そのように実装します。
実行結果がこちら。できました。
2桁-1桁の引き算(同時計算)
課題その2。こちらも入出力の表を書きましょう。ここでは桁上がり・桁下がりは学んでいないため、0-1は下側にオーバーフローして3になるとしました(赤字の部分)。
けっこう頭を使う必要があります。コーヒーを淹れましょう。。
まず、下の桁はシンプルなXORです(下図の1つ目の赤枠)。
次に、上の桁を考えます。引き算の仕組みに従うと、まずAの上の桁をコピーして出力の上の桁に置きます(2つ目の赤枠)。その後、「Aの下の桁が0」かつ「Bが1」のときだけ桁下がりでそれをひっくり返します(3つ目の赤枠)。これの実現方法ですが、「1かつ1ならひっくり返す」はCCXゲートでできることを学びましたが、「0かつ1ならひっくり返す」はどうするかというと、前者をXゲートで一時的にひっくり返せば対応できるんですね。これちゃんと戻しておかないと逆で観測されてしまいます。
ということで実行結果がこちら。無事にできました。
おわりに
Qplatにはまだまだたくさんの種類のゲートが用意されているようなので、中級編以降の講座も楽しみです。ゲートもアニーリング講座みたいにパズルで学べないかなぁと目論んでいます。(最適化ではなく汎用計算が対象だから、パズルとかじゃないらしい)(そうなのかな?)(詳しい人教えて)