0準備:量子シミュレータをつなぐ
このコースでは、blueqat の量子シミュレータを実際に動かしながら、量子計算の基本を順番に学びます。数式はできるだけ使いません。
まず ログイン して、アカウントページで API キー を発行します(無料)。これがあなたの鍵です。
使い方は2通りあります。AI エージェントから使う(MCP) なら、Claude などの AI エージェントにこのサーバーをつなぎ、日本語で依頼するだけで回路を組んで実行します。REST API から使う なら、https://qapi.blueqat.app に JSON を送ります。
実行するたびに run_id(実行の ID)が返ってきます。これがあなたの記録で、https://mcp.blueqat.app/runs/{run_id} で誰でも確かめられます。
- ログインして API キーを発行する
- MCP(AI エージェント)か REST API を選ぶ
- run_id が実行記録になる
AI(Claude Code)につなぐ
claude mcp add --transport http blueqat https://mcp.blueqat.app/mcp --header "Authorization: Bearer YOUR_API_KEY"
ほかの MCP クライアント: streamable-HTTP で https://mcp.blueqat.app/mcp を追加し、Authorization: Bearer に API キー。
1量子ビットと重ね合わせ
普通のビットは 0 か 1 のどちらかです。量子ビット は、測るまで 0 と 1 の両方の可能性を持っていられます。これを 重ね合わせ といいます。
量子ビットは最初 0 です。アダマールゲート h をかけると、0 と 1 が半々の重ね合わせになります。測ると、毎回どちらか一方が出て、たくさん測ると半々になります。
確率を自分で決めることもできます。ry(θ) は量子ビットを角度 θ だけ回すゲートで、1 が出る確率は sin²(θ/2) になります。θ = π/3(約 1.047)なら sin²(π/6) = 1/4 です。
1 を確率 p で出したいときは、θ = 2·arcsin(√p) と計算します。p = 1/3 なら θ ≈ 1.231 です。
- 量子ビットは測るまで 0 と 1 の重ね合わせ
- h で半々、ry(θ) で 1 の確率 sin²(θ/2)
- たくさん測ると確率が見える(ショット数)
例(そのまま動きます)
run_circuit({"n_qubits": 1, "gates": [{"gate": "h", "qubits": [0]}], "shots": 256})0 と 1 がだいたい 128 回ずつ出ます。
演習(Arena の課題)
- 表と裏が半々のコイン
coin— run_circuit で 1 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。0・1 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。 - 1 が 1/4 で出るコイン
coin-1-4— run_circuit で 1 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。0(75%)・1(25%) がこの割合で出る分布に近ければ(全変動距離 0.06 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。 - 1 が 1/3 で出るコイン
coin-1-3— run_circuit で 1 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。0(67%)・1(33%) がこの割合で出る分布に近ければ(全変動距離 0.06 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。 - 1 が 1/10 で出るコイン
coin-1-10— run_circuit で 1 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。0(90%)・1(10%) がこの割合で出る分布に近ければ(全変動距離 0.06 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
2もつれ(エンタングルメント)
2つの量子ビットを もつれ させると、別々に測っても結果がいつも揃うようになります。片方が 0 ならもう片方も 0、1 なら 1 です。
作り方は2手です。1つ目の量子ビットに h をかけて重ね合わせにし、CNOT cx で2つ目にコピーします。cx は「1つ目が 1 のときだけ2つ目をひっくり返す」ゲートです。
これが ベル状態 です。測ると 00 と 11 だけが半々で出て、01 や 10 は出ません。
最後に2つ目を x でひっくり返すと、01 と 10 だけが出る「いつも反対になる」もつれになります。
- h + cx でベル状態
- 結果が必ず揃う(00 か 11)
- x を足すと必ず反対(01 か 10)
例(そのまま動きます)
run_circuit({"n_qubits": 2, "gates": [{"gate": "h", "qubits": [0]}, {"gate": "cx", "qubits": [0, 1]}], "shots": 256})ビット列は左端が qubit 0 です。00 と 11 だけが出ます。
演習(Arena の課題)
- ベル状態をつくる
bell— run_circuit で 2 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。00・11 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。 - 反対向きのベル状態
bell-psi— run_circuit で 2 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。01・10 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
3たくさんの量子ビットをもつれさせる
ベル状態は3つ以上にも広げられます。h のあと cx を鎖のようにつなぐと、全部 0 か全部 1 だけが出る GHZ 状態 になります。
もつれ方は1種類ではありません。W 状態 は「1 がちょうど1つだけ立った状態」を均等に重ねたもので、GHZ とは性質が違います。
cx を2つ使って、ある量子ビットに他の2つの 偶奇(パリティ) を書き込むこともできます。1 の数が偶数の状態だけが出るようになります。
Arena では、同じ分布をより 少ないゲート数 で作った結果が上位になります。ゲートを減らす工夫を考えてみましょう。
- h + cx の鎖で GHZ 状態
- W 状態は別の種類のもつれ
- 少ないゲート数で作るほど効率が良い
例(そのまま動きます)
run_circuit({"n_qubits": 3, "gates": [{"gate": "h", "qubits": [0]}, {"gate": "cx", "qubits": [0, 1]}, {"gate": "cx", "qubits": [1, 2]}], "shots": 256})000 と 111 だけが出ます。
演習(Arena の課題)
- 3量子ビットの GHZ 状態
ghz3— run_circuit で 3 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。000・111 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。 - 4量子ビットの GHZ 状態
ghz4— run_circuit で 4 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。0000・1111 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。 - 5量子ビットの GHZ 状態
ghz5— run_circuit で 5 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。00000・11111 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。 - 偶数パリティの重ね合わせ
parity3— run_circuit で 3 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。000・011・101・110 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。 - 3量子ビットの W 状態
w3— run_circuit で 3 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。100・010・001 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
4重ね合わせを設計する
h を並べると 2, 4, 8… 通りの一様な重ね合わせが作れますが、3通り のように 2 の累乗でない数は作れません。
そこで 制御つきのゲート を使います。まず ry で1つの量子ビットを「1 が 1/3」にし、それが 0 のときだけもう1つに h をかけます(制御アダマール ch)。
ch は「制御の量子ビットが 1 のとき」に働くので、0 のときに働かせたいときは、前後を x ではさみます。
こうすると 00・10・01 の3通りがちょうど 1/3 ずつになります。同じ考え方で W 状態や Dicke 状態も作れます。
- 2 の累乗でない数は h だけでは作れない
- ry で確率を分け、ch で枝を分ける
- x ではさむと「0 のとき」に働く
例(そのまま動きます)
run_circuit({"n_qubits": 2, "gates": [{"gate": "ry", "qubits": [1], "params": [1.231]}, {"gate": "x", "qubits": [1]}, {"gate": "ch", "qubits": [1, 0]}, {"gate": "x", "qubits": [1]}], "shots": 256})ry の角度 1.231 は 2·arcsin(√(1/3)) です。00・10・01 がほぼ均等に出ます。
演習(Arena の課題)
- 3通りの一様な重ね合わせ
uniform3— run_circuit で 2 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。00・10・01 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。 - 4量子ビットの W 状態
w4— run_circuit で 4 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。1000・0100・0010・0001 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。 - 5通りの一様な重ね合わせ
uniform5— run_circuit で 3 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。000・100・010・110・001 が均等に出る分布に近ければ(全変動距離 0.12 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。 - Dicke 状態 D(4,2)
dicke4-2— run_circuit で 4 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。1100・1010・1001・0110・0101・0011 が均等に出る分布に近ければ(全変動距離 0.12 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
5組合せ最適化と QUBO
「どれを選ぶと一番良いか」を探す問題を 組合せ最適化 といいます。候補が増えると、全部を調べるのはすぐ無理になります。
量子コンピュータで解くには、問題を QUBO の形に書きます。0 か 1 の変数 q を並べ、係数 × q_i や 係数 × q_i × q_j の和を 最小にする 形です。
例えば MaxCut は、グラフの頂点を2色に塗り、色の違う辺をできるだけ多くする問題です。各辺 (i, j) について 2·q_i·q_j − q_i − q_j を足すと、色が違う辺ごとに −1 になるので、最小化すれば切れる辺が最大になります。
Arena の最適化の課題では QUBO が決められています。そのまま run_qaoa に渡してください。
- QUBO = 0/1 変数の式を最小にする形
- MaxCut は辺ごとに 2·q_i·q_j − q_i − q_j
- 0/1(QUBO)と −1/+1(Ising)を取り違えない
例: MaxCut:三角形
run_qaoa(qubo=[{"coeff": -2.0, "qubits": [0]}, {"coeff": -2.0, "qubits": [1]}, {"coeff": -2.0, "qubits": [2]}, {"coeff": 2.0, "qubits": [0, 1]}, {"coeff": 2.0, "qubits": [0, 2]}, {"coeff": 2.0, "qubits": [1, 2]}], steps=2, shots=256)演習(Arena の課題)
- MaxCut:三角形
maxcut-triangle— 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。 - MaxCut:四角形(4頂点の輪)
maxcut-c4— 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。 - MaxCut:完全グラフ K4
maxcut-k4— 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。 - 数分割:1, 2, 3, 4
partition-1-2-3-4— 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。
6QAOA のつまみを回す
QAOA は、量子回路の角度を古典コンピュータで調整しながら、良い答えが出やすい状態を作る方法です。
つまみは3つあります。steps(深さ)を上げると表現力が増えます。seed(種)を変えると調整の出発点が変わります。n_starts を増やすと、複数の出発点から一番良いものを選びます。
返り値の best は「サンプルの中で値が最小のもの」です。いちばん多く出た状態(most_frequent)が最適とは限りません。答えには best を使いましょう。
Arena では、サンプルのうち 最適解が出た割合 が高いほど上位です。パラメータを調整して、割合を上げてください。
- steps・seed・n_starts の3つのつまみ
- best は値が最小のサンプル(最多とは限らない)
- 最適解の割合を上げるのが目標
例: MaxCut:6頂点のグラフ
run_qaoa(qubo=[{"coeff": -2.0, "qubits": [0]}, {"coeff": -3.0, "qubits": [1]}, {"coeff": -3.0, "qubits": [2]}, {"coeff": -3.0, "qubits": [3]}, {"coeff": -3.0, "qubits": [4]}, {"coeff": -2.0, "qubits": [5]}, {"coeff": 2.0, "qubits": [0, 1]}, {"coeff": 2.0, "qubits": [0, 2]}, {"coeff": 2.0, "qubits": [1, 2]}, {"coeff": 2.0, "qubits": [1, 3]}, {"coeff": 2.0, "qubits": [2, 4]}, {"coeff": 2.0, "qubits": [3, 4]}, {"coeff": 2.0, "qubits": [3, 5]}, {"coeff": 2.0, "qubits": [4, 5]}], steps=2, shots=256)演習(Arena の課題)
- MaxCut:6頂点のグラフ
maxcut-g6— 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。 - MaxCut:三角柱
maxcut-prism— 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。 - 数分割:4, 5, 6, 7, 8
partition5— 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。 - 重み付き MaxCut:K4
maxcut-k4-weighted— 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。
7制約を罰金で入れる
「ちょうど2人を選ぶ」「隣どうしは選ばない」といった 制約 は、QUBO では 罰金の項 として入れます。制約を破ると値が大きくなるようにするのです。
例えば「ちょうど k 個」なら (Σq − k)² に重み A を掛けて足します。A が小さすぎると制約を破った答えが勝ち、大きすぎると QAOA が解きにくくなります。
最大独立集合(隣り合わない頂点をできるだけ多く)は、選んだ数に −1、隣り合う2つを選ぶと +2 の罰金、という QUBO になります。
- 制約は罰金の項で入れる
- 罰金の重さは強すぎても弱すぎてもだめ
- 独立集合・頂点被覆・k 個選択
例: ちょうど 2 個を選ぶ:5人から2人を夜勤に(負担の小さい2人)
run_qaoa(qubo=[{"coeff": -33.0, "qubits": [0]}, {"coeff": -35.0, "qubits": [1]}, {"coeff": -32.0, "qubits": [2]}, {"coeff": -35.0, "qubits": [3]}, {"coeff": -31.0, "qubits": [4]}, {"coeff": 24.0, "qubits": [0, 1]}, {"coeff": 24.0, "qubits": [0, 2]}, {"coeff": 24.0, "qubits": [0, 3]}, {"coeff": 24.0, "qubits": [0, 4]}, {"coeff": 24.0, "qubits": [1, 2]}, {"coeff": 24.0, "qubits": [1, 3]}, {"coeff": 24.0, "qubits": [1, 4]}, {"coeff": 24.0, "qubits": [2, 3]}, {"coeff": 24.0, "qubits": [2, 4]}, {"coeff": 24.0, "qubits": [3, 4]}], steps=2, shots=256)演習(Arena の課題)
- ちょうど 2 個を選ぶ:5人から2人を夜勤に(負担の小さい2人)
pick5-2-3-1-4-1-5— 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。 制約を罰金の項で入れた QUBO なので、罰金の重さが QAOA の解きやすさにどう効くかも考えてみてください。 - 最大独立集合:五角形(5頂点の輪)
mis-c5— 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。 - 最小頂点被覆:星(中心+5本)
cover-star5— 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。 - ちょうど 2 個を選ぶ:4台の機械から2台を稼働(電気代を最小に)
pick4-2-5-3-6-2— 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。 制約を罰金の項で入れた QUBO なので、罰金の重さが QAOA の解きやすさにどう効くかも考えてみてください。
8VQE でエネルギーを求める
物理や化学では、ものの一番低いエネルギー(基底エネルギー)を知りたいことがよくあります。エネルギーは ハミルトニアン という式で表します。
ハミルトニアンは パウリ演算子(X・Y・Z)の積の和で書きます。例えば −Z0 Z1 は「隣どうしが揃うと得」、−X0 は「横向きの磁場」です。
VQE は、回路の角度を調整してエネルギーをできるだけ下げる方法です。変分原理 により、得られる値は必ず本当の基底エネルギー以上になります。
run_vqe の layers(層の数)を増やすと、本当の値に近づきやすくなります。Arena では、厳密な値との差が小さいほど上位です。
- エネルギーはパウリ演算子の和(ハミルトニアン)
- VQE の値は必ず本当の値以上(変分原理)
- layers を増やすと近づく
例: 横磁場イジング鎖:2量子ビット・h=1.0(臨界点)
run_vqe(n_qubits=2, hamiltonian=[{"coeff": -1.0, "paulis": [{"op": "Z", "qubit": 0}, {"op": "Z", "qubit": 1}]}, {"coeff": -1.0, "paulis": [{"op": "X", "qubit": 0}]}, {"coeff": -1.0, "paulis": [{"op": "X", "qubit": 1}]}], layers=2)演習(Arena の課題)
- 横磁場イジング鎖:2量子ビット・h=1.0(臨界点)
tfim2-h10— 下のハミルトニアンを、そのまま run_vqe に渡してください(n_qubits=2)。energy が厳密な基底エネルギーから 0.0671 以内なら合格。差が小さいほど上位です。layers(層の数)を増やすと届きやすくなります。 - 横磁場イジング鎖:3量子ビット・h=1.0(臨界点)
tfim3-h10— 下のハミルトニアンを、そのまま run_vqe に渡してください(n_qubits=3)。energy が厳密な基底エネルギーから 0.1048 以内なら合格。差が小さいほど上位です。layers(層の数)を増やすと届きやすくなります。 - 横磁場イジング鎖:4量子ビット・h=0.5(秩序相)
tfim4-h05— 下のハミルトニアンを、そのまま run_vqe に渡してください(n_qubits=4)。energy が厳密な基底エネルギーから 0.1028 以内なら合格。差が小さいほど上位です。layers(層の数)を増やすと届きやすくなります。 - 横磁場イジング鎖:5量子ビット・h=2.0(常磁性相)
tfim5-h20— 下のハミルトニアンを、そのまま run_vqe に渡してください(n_qubits=5)。energy が厳密な基底エネルギーから 0.3151 以内なら合格。差が小さいほど上位です。layers(層の数)を増やすと届きやすくなります。
9論文を再現する
研究では、論文に書かれた数値を 自分の手で再現できるか がとても大切です。
Farhi ら(2014) は、輪のグラフの MaxCut を深さ1の QAOA で解くと、切れる辺の割合(近似率)が 3/4 になることを示しました。6頂点の輪で確かめてみましょう。
O'Malley ら(2016) は、水素分子 H₂ の基底エネルギーを量子コンピュータで求めました。同じハミルトニアンを VQE で解くと、約 −1.137 ハートリーになります。
Arena の論文再現の課題では、実行結果が論文の値にどれだけ近いかで順位がつきます。
- 再現できることが研究の基本
- Farhi 2014:深さ1で近似率 3/4
- O'Malley 2016:H₂ で −1.137 Ha
演習(Arena の課題)
- QAOA の近似率 3/4 を再現する
farhi-ring6— 6頂点の輪の MaxCut(下の QUBO)を、steps=1 の run_qaoa で 100 ショット以上解いてください。返りの mean_value から近似率(平均カット ÷ 最大カット 6)を計算し、0.75 との差が 0.03 以内なら再現成功。差が小さいほど上位です。 - H₂ 分子の基底エネルギー
h2-omalley— 下のハミルトニアンを、そのまま run_vqe に渡してください(n_qubits=2)。energy が厳密な基底エネルギーから 0.0241 以内なら合格。差が小さいほど上位です。layers(層の数)を増やすと届きやすくなります。 返ってきた energy に、外した定数 −1.0524 と核の反発 0.7200 を足すと、論文の値 −1.137 Ha(ハートリー)になります。
10次のステップ
ここまでで、重ね合わせ・もつれ・QUBO と QAOA・VQE・論文再現をひと通り体験しました。
Arena には、回路・最適化・物理・論文再現のベンチマーク課題が多数あります。結果は実行記録として残り、リーダーボード の各順位は記録までたどれます。
AI エージェント(MCP)から使うと、エージェントが返り値の改善のヒントを読み、実行と提出を繰り返せます。業務の検証や社内研修にもお使いください。
実機(量子コンピュータ)での評価も準備中です。
- 課題は多数
- 結果は実行記録で検証できる
- AI エージェントから繰り返し実行