基礎講義 / 010–3分 · 3分
量子コンピューターとは
量子の性質を利用して計算するコンピューター。
量子力学:電子や光などの振る舞いを説明する物理法則。
計算の鍵:重ね合わせと干渉。
簡単な歴史
- 1981
発想
ファインマン
量子の世界を、量子の仕組みで計算。
- 1994
アルゴリズム
ショア
大きな整数の素因数分解の方法を提案。
- 2016
クラウドで体験
IBM
インターネット経由で実機を公開。
何に使う? — 応用研究の例
分子・材料分子のエネルギーを計算
電池の材料、化学反応の研究。
本イベント:SQD
組合せ最適化多数の候補から良い組合せを探す
配送ルート、工場のスケジュール。
本イベント:量子最適化
計算の高速化は、問題・アルゴリズム・装置の条件による。応用例は研究対象。
まずは、重ね合わせと干渉を二重スリットで確認。
基礎講義 / 023–6分 · 3分
ヤングの二重スリット実験
光の干渉を示すヤングの実験。電子でも、検出点の蓄積 → 干渉縞。
粒子としての予想
左右どちらかを直進 → 2本の帯観測される現象
検出点の蓄積 → 縞模様検出点:1000個
点群は模型。左図は直進する粒子の予想。古典的な波には干渉あり。
基礎講義 / 036–8分 · 2分
重ね合わせ → 干渉 → 縞模様
∣ ⟩:ケット。量子状態を表す記号。
左右の状態に重みをつけて足す∣ψ⟩=α∣L⟩+β∣R⟩
- α, β
- 確率振幅=状態の重み
左右の重ね合わせ→振幅どうしの干渉→縞模様
確率振幅の和から、強め合い・打ち消し合い。
基礎講義 / 048–11分 · 3分
重ね合わせの割合は調整可能
検出点8,000個。点群の高さ=点の多さの目安(模式図)。
半々:左右対称
振幅 → 確率PL=∣α∣2 PR=∣β∣2 正規化=確率の合計1∣α∣2+∣β∣2=1
PL, PR:経路を測った場合の確率。干渉を見るときは経路を測定しない。
右70%の振幅:√0.7。0.7ではない。
基礎講義 / 0511–14分 · 3分
ベクトル=重みの列
成分の順序:上=左、下=右。
∣L⟩=(10) ∣R⟩=(01)
線形結合=定数倍+和α∣L⟩+β∣R⟩=α(10)+β(01)=(αβ)
成分ごとの計算
量子状態として使う場合:確率の合計1に正規化。ベクトルの成分は空間の座標ではない。
基礎講義 / 0614–17分 · 3分
ブロッホ球:確率と相対位相
量子ビット:0・1を基準とする量子計算の単位。ここから左・右 → 0・1。
北極=0、南極=1、赤道=確率半々。ドラッグ:視点の変更。
球面:1本の状態ベクトルで表せる純粋状態。電子の空間位置とは別。
相対位相と複素数
相対位相:2成分の位相差。途中の位相には複素数を使用。
i2=−1,∣a+bi∣2=a2+b2 a,b:実数。i:虚数単位。
α=P0,β=eiϕ1−P0 P0:0の確率。φ:相対位相(式ではラジアン)。eiφ=cosφ+i sinφ。全体の位相は物理的状態を変えない。
基礎講義 / 0717–20分 · 3分
関数 → 演算子 → 行列
数を入力する関数
例:f(x)=2x。入力3 → 出力6。
ベクトルを入力する演算子
入力 v→A→出力 w w=Av 演算子:入力に作用するルール。
行列:数を行・列に並べた表。ここでは線形演算子を、2×2行列で表現。
線形:入力の和・定数倍を、そのまま出力の和・定数倍に対応させる。
例:Xゲート=上下の成分を交換X=(0110) X(10)=(01)
入力ベクトル → 行列の作用 → 出力ベクトル
基礎講義 / 0820–23分 · 3分
行列×ベクトル:各行の積と和
(acbd)(xy)=(ax+bycx+dy)
a,b,c,d:行列の成分。x,y:入力ベクトルの成分。
NumPy:行列積
import numpy as np
X = np.array([[0, 1], [1, 0]])
ket0 = np.array([1, 0])
print(X @ ket0) # [0 1]
@:行列積。*:成分ごとの積。
w=Av:行列がベクトルに作用する計算
基礎講義 / 0923–27分 · 4分
Hゲート:重ね合わせと干渉
H=21(111−1) H:アダマールゲート。
H∣0⟩=2∣0⟩+∣1⟩ +の状態。振幅1/2、確率1/2。
Hをもう一度:振幅の和と差H∣+⟩=21(1+11−1)=(10)
Z:1側の振幅の符号を反転。ゲートの計算は振幅に作用。
量子アルゴリズムの設計=量子干渉の設計(ゲート型計算の見方)。
ゲートの条件
ユニタリ行列:状態の正規化を保つ可逆な操作。X・H・Zはいずれもユニタリ。
基礎講義 / 1027–31分 · 4分
固有値:行列の作用が、元のベクトルの何倍か
Av=λv,v=0 vベクトル2×1。数を縦に2つ並べた列。
λスカラー1つの数。ここでは+1・−1。
左辺も右辺も、2×1のベクトル。固有値は、その共通の倍率。
同じ行列、3つの入力を比較
A=X=(0110) Xは上・下の成分を交換。計算を見やすくするため、まず正規化前のベクトルを使う。
① 行列×ベクトル → ベクトル
(0110)(11)=(11) (2×2)(2×1)⟶(2×1) 2×2の「2行・2列」と、2×1の「2行・1列」。
横軸:上の成分。縦軸:下の成分。ブロッホ球とは別。 全成分が同じ倍率 → 固有ベクトル。その倍率 → 固有値。
任意のベクトルに行列をかけるだけでは、固有値が分かるとは限らない。
固有値を未知数として求める:+1・−1は、どこから出る?
固有値λと、ベクトルの成分x・yを未知数にする。
v=(xy) Xvλv=(yx)=(λxλy) 2つの列が等しい条件:上同士、下同士が等しい。
{y=λxx=λy 上の式を、下の式へ代入。
x=λ(λx)=λ2x この行列では、x=0なら上の式からy=0。零ベクトルは除外するので、x=0。両辺をxで割れる。
λ2=1⟹λ=+1,−1 固有値+1
y=x,v=(11) 固有値−1
y=−x,v=(1−1) 最後に、上の④で両方を検算。ベクトルはそれぞれ、0以外の何倍でも同じ固有値。
量子状態へ:正規化しても、固有値は同じ
∣+⟩=21(11) ∣−⟩=21(1−1) 振幅の絶対値の2乗の和を1へ。倍率1/2を左辺・右辺の両方にかけても、X∣+⟩=+1∣+⟩、X∣−⟩=−1∣−⟩は成立。固有値は確率ではない。
なぜ零ベクトルを除く? なぜ−1も固有値?
A0=λ0=0 零ベクトルでは、どんな倍率でも成立するため固有値を特定できない。−1倍は全成分の符号を反転する。向きは逆、長さは同じ。量子状態全体の−1倍は同じ物理的状態だが、行列の固有値−1はその作用を表す値として残る。
基礎講義 / 1131–35分 · 4分
観測量の固有値=測定で得られる値
A^∣ψn⟩=an∣ψn⟩
- A^
- 位置・運動量など、観測量の演算子
- ψn
- 固有状態(量子状態の固有ベクトル)
- an
- 固有値=測定値。nは固有状態の番号。
数学A^ ψn=an ψn演算子の作用を計算 →実験固有状態ψnを測定 → an対応する測定値を確率1で検出
位置の2状態模型:左−1 cm/右+1 cm
測定値:未測定
記録:0回
毎回、同じ状態を準備。検出は理想的な測定の模型。
一般の重ね合わせ:固有値のどれかを、対応する確率で検出。行列の積と、1回の測定結果は別。
運動量も同じ構造
p^ψp=pψp p^:運動量演算子。ψp:運動量pの固有状態。p:運動量の測定値(確率ではない)。
演算子 → 固有状態への作用 → 固有値p → 運動量の測定値p。
連続的な位置・運動量は波動関数で表現。本編の2×2行列は有限の2状態模型。
基礎講義 / 1235–37分 · 2分
エネルギーも、同じ固有値の式
HE∣ψE⟩=E∣ψE⟩
- HE
- ハミルトニアン=エネルギーの演算子
- 基底状態
- 最小の固有値に対応する状態
行列の作用 → 固有値 → エネルギー
Hゲート:状態の変換。HE:エネルギーの観測量。
NumPy:固有値と検算
import numpy as np
X = np.array([[0., 1.], [1., 0.]])
values, vectors = np.linalg.eigh(X)
print(values) # [-1. 1.]
v = vectors[:, 0]
print(np.allclose(X @ v, values[0] * v)) # True
HE=Xとした説明用の模型。最小固有値−1、基底状態は−の状態。実在分子の計算ではない。
eigh:エルミート行列の固有値・固有ベクトル。今回のXは実対称行列。
基礎講義 / 1337–40分 · 3分
Qiskit:干渉の計算
H → 位相変更 → H。位相0:0を検出。位相π:1を検出。
import numpy as np
from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector
for phase in [0, np.pi]:
qc = QuantumCircuit(1)
qc.h(0)
qc.p(phase, 0)
qc.h(0)
probabilities = Statevector.from_instruction(qc).probabilities()
print(np.round(probabilities, 6))
# [1. 0.]
# [0. 1.]
出力順:0、1。π=180°。p(π)=Z。Statevector:理想的な確率の計算。
有限回の測定
from qiskit.primitives import StatevectorSampler
measured = qc.copy() # 最後の回路:位相π
measured.measure_all()
sampler = StatevectorSampler(seed=7)
result = sampler.run([measured], shots=1024).result()
print(result[0].data.meas.get_counts())
# {'1': 1024}
StatevectorSampler:有限回の測定を模擬。実機への接続なし。
実行確認:Python 3.12.14 / Qiskit 2.5.1。
基礎実習Notebookを開く・保存(実習NotebookはこのZIPに含みません)
重ね合わせ → 干渉 → ベクトル → 行列の作用 → 固有値 → 測定値