macOS (Apple Silicon / Intel) で動作する、状態ベクトル方式の量子回路シミュレーターです。 依存は Python 3 + numpy のみ。デフォルトは 24 量子ビット (最大 24)。
| ファイル | 内容 |
|---|---|
quantum_simulator.py |
シミュレーター本体 (QuantumSimulator クラス) |
demo.py |
デモ: Bell状態 / GHZ状態 / 量子フーリエ変換 / Grover探索 |
test_simulator.py |
検証テスト (13件) |
TUTORIAL.md |
量子コンピューター入門チュートリアル (使い方の解説) |
python3 demo.py # デモを実行
python3 test_simulator.py # テストを実行from quantum_simulator import QuantumSimulator
sim = QuantumSimulator() # 24量子ビット (省略時)、初期状態 |000...0>
# sim = QuantumSimulator(16) # ビット数を指定したい場合 (1〜24)
# Bell 状態を作る
sim.h(0) # アダマールゲート
sim.cx(0, 1) # CNOT (制御 q0, ターゲット q1)
print(sim.dump()) # 振幅の大きい基底状態を表示
print(sim.sample(1024)) # 1024 ショットの測定統計
bit = sim.measure(0) # 1量子ビットの射影測定 (状態が収縮)
bits = sim.measure_all() # 全量子ビット測定 → "0000...0011" など- 1量子ビット:
xyzhssdgttdgrxryrzpu3 - 制御ゲート:
cxcyczcpccx(Toffoli)cczmcxmcz(多重制御) - その他:
swap、qft(inverse=True/False)(量子フーリエ変換) - 任意のユニタリ行列:
apply_gate(matrix, targets, controls)
量子ビット q0 が整数インデックスの最下位ビット (リトルエンディアン) です。
例: q0=1, q5=1 の基底状態はインデックス 2^0 + 2^5 = 33。
- 状態は 2^24 = 16,777,216 個の複素振幅 (complex128, 約 256 MB) として保持。
- ゲート適用は状態ベクトルをテンソル
(2,)*nに reshape し、 ターゲット軸への行列積として実行 (numpy でベクトル化)。 - 1量子ビットゲートはターゲット軸を中央にした
(A, 2, B)reshape で 2x2 行列を直接適用する高速パスを使う (全配列コピーを回避)。 - 制御付きゲートは「制御ビットがすべて 1」の部分空間だけを スライスして変換するため、多重制御でも高速。
性能の目安 (24量子ビット): 1量子ビットゲート 1 回 ≈ 40 ms。
num_qubits は 1〜24 の範囲で変更可能 (1 ビット増えるごとにメモリ・時間が倍増)。
Bell・GHZ・QFT は数秒〜十数秒で動きますが、Grover 探索は全 24 量子ビットでは
非現実的です。反復回数が √N に比例して約 3216 回必要で、1 ゲートが
1677 万振幅すべてに触れるため全体で約 3.4 時間かかります。demo.py では
探索の様子が一目で分かるよう Grover のみ 16 量子ビットで実演しています。