mcpField
A
alterlab-qutip

alterlab-qutip

github.com/alterlab-ieuその他7870 回インストール5 週間前に更新
リポジトリ

alterlab-qutip について

Pythonで量子系をシミュレーション・解析する研究者向けのQuTiPスキルです。閉鎖系と開放系のダイナミクスに加え、専門的な手法も扱います。

主な機能

  1. 01量子状態と演算子の構築
  2. 02閉鎖系・開放系ソルバー
  3. 03定常状態と相関関数の解析
  4. 04エンタングルメントと位相空間の計算
  5. 05量子状態とダイナミクスの可視化
  6. 06Floquet法とHEOM

活用シーン

  1. 01Lindbladマスター方程式とシュレーディンガー力学の解法
  2. 02デコヒーレンスと散逸系のモデル化
  3. 03エンタングルメント、スペクトル、相関の計算

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/alterlab-ieu/alterlab-academic-skills --skill alterlab-qutip

インストール後、Claude Code で/alterlab-qutipを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

evals/
evals.json
references/
advanced.md
analysis.md
core_concepts.md
time_evolution.md
visualization.md

詳細

QuTiP:Python の量子ツールボックス

概要

QuTiP は、量子力学系のシミュレーションと解析に役立つ包括的なツールを提供します。さまざまな状況に最適化された複数のソルバーを備え、閉じた量子系(ユニタリ系)と開いた量子系(散逸系)の両方を扱います。

このスキルを使用する場面

ユーザーが次のことを希望する場合に、このスキルを使用します。

  • リンドブラッド・マスター方程式、量子軌道、またはシュレーディンガー方程式のダイナミクスを解く(mesolve、mcsolve、sesolve)
  • デコヒーレンス、散逸、空洞 QED、または駆動系/周期系をモデル化する(フロケ、ブロッホ・レッドフィールド、HEOM)
  • 定常状態、相関関数、スペクトル、エンタングルメント、または位相空間分布を計算する
対象外
シナリオ代わりに使用
IBM ハードウェア上のゲートベース回路、トランスパイル、Runtime プリミティブalterlab-qiskit
Cirq 回路、Google ハードウェア/Quantum Virtual Machine、XEB/RBalterlab-cirq
自動微分を使った変分回路のトレーニング(量子 ML、微分可能な VQE)alterlab-pennylane
数値計算を伴わない演算子や交換子の記号的導出alterlab-sympy

インストール

uv pip install qutip

このスキルは QuTiP 5.x を対象としています(5.3.1 で検証済み、2026-09 時点の最新バージョン。Python ≥ 3.11)。v4 からの主な v5 API の変更点:ソルバーのオプションは通常の dict になりました(従来の Options/solver.Options クラスは廃止)。確率ソルバーでは noise コードの代わりに heterodyne=True/False を使用します。progress_bar には True ではなく文字列('text'/'tqdm'/'')を指定します。mcsolve は options={"map": "parallel"} を渡さない限り、軌道を逐次実行します。また、独立した floquet_modes() ファミリーは非推奨となり、FloquetBasis が推奨されています。

文字列形式の時間依存性('cos(w*t)')は、runtime-compilation エクストラがインストールされている場合に限り Cython でコンパイルされます。それ以外の場合、QuTiP は警告を出し、より低速な eval にフォールバックします。

uv pip install "qutip[runtime-compilation]"   # Cython + setuptools + filelock

追加機能を利用するためのオプションパッケージ:

# Quantum information processing (circuits, gates)
uv pip install qutip-qip

# Quantum optimal control (GRAPE/CRAB pulse optimization)
uv pip install qutip-qtrl

クイックスタート

from qutip import *
import numpy as np
import matplotlib.pyplot as plt

# Create quantum state
psi = basis(2, 0)  # |0⟩ state

# Create operator
H = sigmaz()  # Hamiltonian

# Time evolution
tlist = np.linspace(0, 10, 100)
result = sesolve(H, psi, tlist, e_ops=[sigmaz()])

# Plot results
plt.plot(tlist, result.expect[0])
plt.xlabel('Time')
plt.ylabel('⟨σz⟩')
plt.show()

主な機能

1. 量子オブジェクトと状態

量子状態と演算子を作成、操作します。

# States
psi = basis(N, n)  # Fock state |n⟩
psi = coherent(N, alpha)  # Coherent state |α⟩
rho = thermal_dm(N, n_avg)  # Thermal density matrix

# Operators
a = destroy(N)  # Annihilation operator
H = num(N)  # Number operator
sx, sy, sz = sigmax(), sigmay(), sigmaz()  # Pauli matrices

# Composite systems
psi_AB = tensor(psi_A, psi_B)  # Tensor product

詳細は references/core_concepts.md を参照してください。量子オブジェクト、状態、演算子、テンソル積について包括的に説明しています。

2. 時間発展とダイナミクス

さまざまな状況に対応する複数のソルバーを利用できます。

# Closed systems (unitary evolution)
result = sesolve(H, psi0, tlist, e_ops=[num(N)])

# Open systems (dissipation)
c_ops = [np.sqrt(0.1) * destroy(N)]  # Collapse operators
result = mesolve(H, psi0, tlist, c_ops, e_ops=[num(N)])

# Quantum trajectories (Monte Carlo)
result = mcsolve(H, psi0, tlist, c_ops, ntraj=500, e_ops=[num(N)])

ソルバーの選択ガイド:

  • sesolve:純粋状態、ユニタリ発展
  • mesolve:混合状態、散逸、一般的な開放系
  • mcsolve:量子ジャンプ、光子計数、個別の軌道
  • brmesolve:弱い系・浴結合
  • fmmesolve:時間周期ハミルトニアン(フロケ)

詳細は references/time_evolution.md を参照してください。ソルバー、時間依存ハミルトニアン、高度なオプションについて説明しています。

3. 解析と測定

物理量を計算します。

# Expectation values
n_avg = expect(num(N), psi)

# Entropy measures
S = entropy_vn(rho)  # Von Neumann entropy
C = concurrence(rho)  # Entanglement (two qubits)

# Fidelity and distance
F = fidelity(psi1, psi2)
D = tracedist(rho1, rho2)

# Correlation functions
corr = correlation_2op_1t(H, rho0, taulist, c_ops, A, B)
w, S = spectrum_correlation_fft(taulist, corr)

# Steady states
rho_ss = steadystate(H, c_ops)

詳細は references/analysis.md を参照してください。エントロピー、忠実度、測定、相関関数、定常状態の計算について説明しています。

4. 可視化

量子状態とダイナミクスを可視化します。

# Bloch sphere
b = Bloch()
b.add_states(psi)
b.show()

# Wigner function (phase space)
xvec = np.linspace(-5, 5, 200)
W = wigner(psi, xvec, xvec)
plt.contourf(xvec, xvec, W, 100, cmap='RdBu')

# Fock distribution
plot_fock_distribution(psi)

# Matrix visualization
hinton(rho)  # Hinton diagram
matrix_histogram(H.full())  # 3D bars

詳細は references/visualization.md を参照してください。ブロッホ球のアニメーション、ウィグナー関数、Q 関数、行列の可視化について説明しています。

5. 高度な手法

複雑な状況に対応する専門的な手法です。

# Floquet theory (periodic Hamiltonians); floquet_modes() is deprecated in v5
T = 2 * np.pi / w_drive
fbasis = FloquetBasis(H, T, args=args)
f_energies = fbasis.e_quasi   # quasi-energies
f_modes = fbasis.mode(0)      # Floquet modes at t = 0
result = fmmesolve(H, psi0, tlist, c_ops, T=T, args=args)

# HEOM (non-Markovian, strong coupling)
from qutip.solver.heom import HEOMSolver, BosonicBath
# Bath correlation as a sum of exponentials: ck_real, vk_real, ck_imag, vk_imag
bath = BosonicBath(Q, ck_real, vk_real, ck_imag, vk_imag)
hsolver = HEOMSolver(H_sys, [bath], max_depth=5)
result = hsolver.run(rho0, tlist)

# Permutational invariance (identical particles)
from qutip.piqs.piqs import dicke, jspin  # not exported at qutip.piqs top level
psi = dicke(N, j, m)  # Dicke states
Jz = jspin(N, 'z')  # Collective operators

詳細は references/advanced.md を参照してください。フロケ理論、HEOM、置換不変性、確率ソルバー、スーパー演算子、パフォーマンス最適化について説明しています。

よくあるワークフロー

減衰する調和振動子のシミュレーション
# System parameters
N = 20  # Hilbert space dimension
omega = 1.0  # Oscillator frequency
kappa = 0.1  # Decay rate

# Hamiltonian and collapse operators
H = omega * num(N)
c_ops = [np.sqrt(kappa) * destroy(N)]

# Initial state
psi0 = coherent(N, 3.0)

# Time evolution
tlist = np.linspace(0, 50, 200)
result = mesolve(H, psi0, tlist, c_ops, e_ops=[num(N)])

# Visualize
plt.plot(tlist, result.expect[0])
plt.xlabel('Time')
plt.ylabel('⟨n⟩')
plt.title('Photon Number Decay')
plt.show()
2量子ビットのエンタングルメント・ダイナミクス
# Create Bell state
psi0 = bell_state('00')

# Local dephasing on each qubit
gamma = 0.1
c_ops = [
    np.sqrt(gamma) * tensor(sigmaz(), qeye(2)),
    np.sqrt(gamma) * tensor(qeye(2), sigmaz())
]

# Track entanglement
tlist = np.linspace(0, 10, 100)
result = mesolve(qeye([2, 2]), psi0, tlist, c_ops)

# With collapse operators, result.states are density matrices (type 'oper'),
# so pass them straight to concurrence() — do NOT call .proj() on them.
C_t = [concurrence(state) for state in result.states]

plt.plot(tlist, C_t)
plt.xlabel('Time')
plt.ylabel('Concurrence')
plt.title('Entanglement Decay')
plt.show()
Jaynes-Cummings モデル
# System parameters
N = 10  # Cavity Fock space
wc = 1.0  # Cavity frequency
wa = 1.0  # Atom frequency
g = 0.05  # Coupling strength

# Operators
a = tensor(destroy(N), qeye(2))  # Cavity
sm = tensor(qeye(N), sigmam())  # Atom

# Hamiltonian (RWA)
H = wc * a.dag() * a + wa * sm.dag() * sm + g * (a.dag() * sm + a * sm.dag())

# Initial state: cavity in coherent state, atom in ground state
psi0 = tensor(coherent(N, 2), basis(2, 0))

# Dissipation
kappa = 0.1  # Cavity decay
gamma = 0.05  # Atomic decay
c_ops = [np.sqrt(kappa) * a, np.sqrt(gamma) * sm]

# Observables
n_cav = a.dag() * a
n_atom = sm.dag() * sm

# Evolve
tlist = np.linspace(0, 50, 200)
result = mesolve(H, psi0, tlist, c_ops, e_ops=[n_cav, n_atom])

# Plot
fig, axes = plt.subplots(2, 1, figsize=(8, 6), sharex=True)
axes[0].plot(tlist, result.expect[0])
axes[0].set_ylabel('⟨n_cavity⟩')
axes[1].plot(tlist, result.expect[1])
axes[1].set_ylabel('⟨n_atom⟩')
axes[1].set_xlabel('Time')
plt.tight_layout()
plt.show()

効率的なシミュレーションのためのヒント

  1. ヒルベルト空間を切り詰める:ダイナミクスを捉えられる最小の次元を使用します
  2. 適切なソルバーを選択する:純粋状態には sesolve を使用すると、mesolve より高速です
  3. 時間依存項:文字列形式(例:'cos(w*t)')はコンパイル後に最速です(qutip[runtime-compilation] が必要です)
  4. 必要なデータのみを保存する:すべての状態を保存する代わりに e_ops を使用します
  5. 許容誤差を調整する:options 辞書(atol/rtol/nsteps)を使って、精度と計算時間のバランスを取ります
  6. 並列軌道:v5 では mcsolve はデフォルトで逐次実行されます — options={"map": "parallel", "num_cpus": 4}(または "loky"/"mpi")を渡します
  7. 収束を確認する:ntraj、ヒルベルト空間のサイズ、許容誤差を変えて確認します

トラブルシューティング

メモリの問題:ヒルベルト空間の次元を減らす、store_final_state オプションを使用する、または Krylov 法を検討します

シミュレーションが遅い場合:文字列ベースの時間依存性を使用する、許容誤差を少し大きくする、または剛性問題では method='bdf' を試します

数値的不安定性:時間ステップを短くする(nsteps オプション)、許容誤差を大きくする、またはハミルトニアン/演算子が適切に定義されているか確認します

インポートエラー:QuTiP が正しくインストールされていることを確認します。量子ゲートには qutip-qip パッケージが必要です

参考資料

このスキルには、詳細な参考ドキュメントが含まれています。

  • references/core_concepts.md:量子オブジェクト、状態、演算子、テンソル積、複合系
  • references/time_evolution.md:すべてのソルバー(sesolve、mesolve、mcsolve、brmesolve など)、時間依存ハミルトニアン、ソルバーのオプション
  • references/visualization.md:ブロッホ球、ウィグナー関数、Q 関数、フォック分布、行列プロット
  • references/analysis.md:期待値、エントロピー、忠実度、エンタングルメント指標、相関関数、定常状態
  • references/advanced.md:フロケ理論、HEOM、置換不変性、確率的手法、超演算子、パフォーマンスのヒント

外部リソース

AlterLab Academic Skills スイートの一部です。

コメント