QUANTUM ARENA · 学習コース

動かして学ぶ、量子計算

ブラウザの印刷(Ctrl/Cmd+P)で印刷できます。章ごとに改ページされます。例は https://mcp.blueqat.app で動かし、run_id を Arena に提出しましょう。

印刷する

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} で誰でも確かめられます。

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 です。

例(そのまま動きます)

run_circuit({"n_qubits": 1, "gates": [{"gate": "h", "qubits": [0]}], "shots": 256})

0 と 1 がだいたい 128 回ずつ出ます。

演習(Arena の課題)

  1. 表と裏が半々のコイン coin — run_circuit で 1 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。0・1 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
  2. 1 が 1/4 で出るコイン coin-1-4 — run_circuit で 1 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。0(75%)・1(25%) がこの割合で出る分布に近ければ(全変動距離 0.06 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
  3. 1 が 1/3 で出るコイン coin-1-3 — run_circuit で 1 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。0(67%)・1(33%) がこの割合で出る分布に近ければ(全変動距離 0.06 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
  4. 1 が 1/10 で出るコイン coin-1-10 — run_circuit で 1 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。0(90%)・1(10%) がこの割合で出る分布に近ければ(全変動距離 0.06 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
記録欄:run_id と結果を書き込もう

2もつれ(エンタングルメント)

2つの量子ビットを もつれ させると、別々に測っても結果がいつも揃うようになります。片方が 0 ならもう片方も 0、1 なら 1 です。

作り方は2手です。1つ目の量子ビットに h をかけて重ね合わせにし、CNOT cx で2つ目にコピーします。cx は「1つ目が 1 のときだけ2つ目をひっくり返す」ゲートです。

これが ベル状態 です。測ると 00 と 11 だけが半々で出て、01 や 10 は出ません。

最後に2つ目を 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 の課題)

  1. ベル状態をつくる bell — run_circuit で 2 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。00・11 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
  2. 反対向きのベル状態 bell-psi — run_circuit で 2 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。01・10 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
記録欄:run_id と結果を書き込もう

3たくさんの量子ビットをもつれさせる

ベル状態は3つ以上にも広げられます。h のあと cx を鎖のようにつなぐと、全部 0 か全部 1 だけが出る GHZ 状態 になります。

もつれ方は1種類ではありません。W 状態 は「1 がちょうど1つだけ立った状態」を均等に重ねたもので、GHZ とは性質が違います。

cx を2つ使って、ある量子ビットに他の2つの 偶奇(パリティ) を書き込むこともできます。1 の数が偶数の状態だけが出るようになります。

Arena では、同じ分布をより 少ないゲート数 で作った結果が上位になります。ゲートを減らす工夫を考えてみましょう。

例(そのまま動きます)

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 の課題)

  1. 3量子ビットの GHZ 状態 ghz3 — run_circuit で 3 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。000・111 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
  2. 4量子ビットの GHZ 状態 ghz4 — run_circuit で 4 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。0000・1111 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
  3. 5量子ビットの GHZ 状態 ghz5 — run_circuit で 5 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。00000・11111 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
  4. 偶数パリティの重ね合わせ parity3 — run_circuit で 3 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。000・011・101・110 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
  5. 3量子ビットの W 状態 w3 — run_circuit で 3 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。100・010・001 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
記録欄:run_id と結果を書き込もう

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 状態も作れます。

例(そのまま動きます)

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 の課題)

  1. 3通りの一様な重ね合わせ uniform3 — run_circuit で 2 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。00・10・01 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
  2. 4量子ビットの W 状態 w4 — run_circuit で 4 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。1000・0100・0010・0001 が均等に出る分布に近ければ(全変動距離 0.1 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
  3. 5通りの一様な重ね合わせ uniform5 — run_circuit で 3 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。000・100・010・110・001 が均等に出る分布に近ければ(全変動距離 0.12 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
  4. Dicke 状態 D(4,2) dicke4-2 — run_circuit で 4 量子ビットの回路を 100 ショット以上(256 がおすすめ)測ってください。1100・1010・1001・0110・0101・0011 が均等に出る分布に近ければ(全変動距離 0.12 以下)合格。ゲート数が少ないほど上位です。ビット列は左端が qubit 0 です。
記録欄:run_id と結果を書き込もう

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 に渡してください。

例: 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 の課題)

  1. MaxCut:三角形 maxcut-triangle — 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。
  2. MaxCut:四角形(4頂点の輪) maxcut-c4 — 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。
  3. MaxCut:完全グラフ K4 maxcut-k4 — 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。
  4. 数分割:1, 2, 3, 4 partition-1-2-3-4 — 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。
記録欄:run_id と結果を書き込もう

6QAOA のつまみを回す

QAOA は、量子回路の角度を古典コンピュータで調整しながら、良い答えが出やすい状態を作る方法です。

つまみは3つあります。steps(深さ)を上げると表現力が増えます。seed(種)を変えると調整の出発点が変わります。n_starts を増やすと、複数の出発点から一番良いものを選びます。

返り値の best は「サンプルの中で値が最小のもの」です。いちばん多く出た状態(most_frequent)が最適とは限りません。答えには best を使いましょう。

Arena では、サンプルのうち 最適解が出た割合 が高いほど上位です。パラメータを調整して、割合を上げてください。

例: 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 の課題)

  1. MaxCut:6頂点のグラフ maxcut-g6 — 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。
  2. MaxCut:三角柱 maxcut-prism — 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。
  3. 数分割:4, 5, 6, 7, 8 partition5 — 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。
  4. 重み付き MaxCut:K4 maxcut-k4-weighted — 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。
記録欄:run_id と結果を書き込もう

7制約を罰金で入れる

「ちょうど2人を選ぶ」「隣どうしは選ばない」といった 制約 は、QUBO では 罰金の項 として入れます。制約を破ると値が大きくなるようにするのです。

例えば「ちょうど k 個」なら (Σq − k)² に重み A を掛けて足します。A が小さすぎると制約を破った答えが勝ち、大きすぎると QAOA が解きにくくなります。

最大独立集合(隣り合わない頂点をできるだけ多く)は、選んだ数に −1、隣り合う2つを選ぶと +2 の罰金、という QUBO になります。

例: ちょうど 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 の課題)

  1. ちょうど 2 個を選ぶ:5人から2人を夜勤に(負担の小さい2人) pick5-2-3-1-4-1-5 — 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。 制約を罰金の項で入れた QUBO なので、罰金の重さが QAOA の解きやすさにどう効くかも考えてみてください。
  2. 最大独立集合:五角形(5頂点の輪) mis-c5 — 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。
  3. 最小頂点被覆:星(中心+5本) cover-star5 — 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。
  4. ちょうど 2 個を選ぶ:4台の機械から2台を稼働(電気代を最小に) pick4-2-5-3-6-2 — 下の QUBO をそのまま run_qaoa に渡し、100 ショット以上で解いてください。best が最適解なら合格。サンプルのうち最適解だった割合が高いほど上位です。深さ(steps)・種(seed)・初期値の数(n_starts)を調整できます。 制約を罰金の項で入れた QUBO なので、罰金の重さが QAOA の解きやすさにどう効くかも考えてみてください。
記録欄:run_id と結果を書き込もう

8VQE でエネルギーを求める

物理や化学では、ものの一番低いエネルギー(基底エネルギー)を知りたいことがよくあります。エネルギーは ハミルトニアン という式で表します。

ハミルトニアンは パウリ演算子(X・Y・Z)の積の和で書きます。例えば −Z0 Z1 は「隣どうしが揃うと得」、−X0 は「横向きの磁場」です。

VQE は、回路の角度を調整してエネルギーをできるだけ下げる方法です。変分原理 により、得られる値は必ず本当の基底エネルギー以上になります。

run_vqe の layers(層の数)を増やすと、本当の値に近づきやすくなります。Arena では、厳密な値との差が小さいほど上位です。

例: 横磁場イジング鎖: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 の課題)

  1. 横磁場イジング鎖:2量子ビット・h=1.0(臨界点) tfim2-h10 — 下のハミルトニアンを、そのまま run_vqe に渡してください(n_qubits=2)。energy が厳密な基底エネルギーから 0.0671 以内なら合格。差が小さいほど上位です。layers(層の数)を増やすと届きやすくなります。
  2. 横磁場イジング鎖:3量子ビット・h=1.0(臨界点) tfim3-h10 — 下のハミルトニアンを、そのまま run_vqe に渡してください(n_qubits=3)。energy が厳密な基底エネルギーから 0.1048 以内なら合格。差が小さいほど上位です。layers(層の数)を増やすと届きやすくなります。
  3. 横磁場イジング鎖:4量子ビット・h=0.5(秩序相) tfim4-h05 — 下のハミルトニアンを、そのまま run_vqe に渡してください(n_qubits=4)。energy が厳密な基底エネルギーから 0.1028 以内なら合格。差が小さいほど上位です。layers(層の数)を増やすと届きやすくなります。
  4. 横磁場イジング鎖:5量子ビット・h=2.0(常磁性相) tfim5-h20 — 下のハミルトニアンを、そのまま run_vqe に渡してください(n_qubits=5)。energy が厳密な基底エネルギーから 0.3151 以内なら合格。差が小さいほど上位です。layers(層の数)を増やすと届きやすくなります。
記録欄:run_id と結果を書き込もう

9論文を再現する

研究では、論文に書かれた数値を 自分の手で再現できるか がとても大切です。

Farhi ら(2014) は、輪のグラフの MaxCut を深さ1の QAOA で解くと、切れる辺の割合(近似率)が 3/4 になることを示しました。6頂点の輪で確かめてみましょう。

O'Malley ら(2016) は、水素分子 H₂ の基底エネルギーを量子コンピュータで求めました。同じハミルトニアンを VQE で解くと、約 −1.137 ハートリーになります。

Arena の論文再現の課題では、実行結果が論文の値にどれだけ近いかで順位がつきます。

演習(Arena の課題)

  1. QAOA の近似率 3/4 を再現する farhi-ring6 — 6頂点の輪の MaxCut(下の QUBO)を、steps=1 の run_qaoa で 100 ショット以上解いてください。返りの mean_value から近似率(平均カット ÷ 最大カット 6)を計算し、0.75 との差が 0.03 以内なら再現成功。差が小さいほど上位です。
  2. H₂ 分子の基底エネルギー h2-omalley — 下のハミルトニアンを、そのまま run_vqe に渡してください(n_qubits=2)。energy が厳密な基底エネルギーから 0.0241 以内なら合格。差が小さいほど上位です。layers(層の数)を増やすと届きやすくなります。 返ってきた energy に、外した定数 −1.0524 と核の反発 0.7200 を足すと、論文の値 −1.137 Ha(ハートリー)になります。
記録欄:run_id と結果を書き込もう

10次のステップ

ここまでで、重ね合わせ・もつれ・QUBO と QAOA・VQE・論文再現をひと通り体験しました。

Arena には、回路・最適化・物理・論文再現のベンチマーク課題が多数あります。結果は実行記録として残り、リーダーボード の各順位は記録までたどれます。

AI エージェント(MCP)から使うと、エージェントが返り値の改善のヒントを読み、実行と提出を繰り返せます。業務の検証や社内研修にもお使いください。

実機(量子コンピュータ)での評価も準備中です。