量子ビットが周囲へエネルギーを失う様子を計算すると、平均は滑らかに減っていきます。一方、環境で光子を検出する記録に応じて状態を追えば、変化が突然起きる経路も現れます。同じモデルを扱っていても、一本の経路と、多数の経路を集めた平均は別の結果です。
QuTiPのmcsolveは、このような「量子軌道」を計算するソルバーです。軌道数を増やせば何が改善し、計算が終了したときには何を確認すればよいのでしょうか。QuTiP 5.1.1の固定実装を読み、小さな独立計算で判断の手掛かりを整理します。最新版や実機の性能評価ではありません。[1][2]
簡単にまとめると?
- 量子軌道は、環境の観測記録を条件にした状態の時間経路です。最後の状態から測定結果を何回取り出すか、というショット数とは分けて考えます。
- 軌道ごとのばらつきと、平均を推定する誤差は別です。まれな変化が標本に出ないだけで、変化が起きないとは判断できません。
- 軌道数、時間制限、誤差目標のどれで止まったかを確認します。統計的な誤差目標は、物理モデルや数値積分の正しさまで保証しません。
滑らかな平均を、条件付きの経路から作る
環境とやり取りする量子系では、密度行列を使って多数の実現の平均的な変化を求める方法があります。量子軌道法は、同じ開放系モデルに対して、環境の観測記録に対応する経路を生成し、その結果を平均する方法です。ここでは、光子を数える観測のように、検出のたびに状態が変わる量子ジャンプの表現を扱います。物体が空間を走る軌跡ではなく、量子状態の時間経路です。[1]
計算では、ジャンプがまだ起きていない状態を進め、その生存確率と乱数を比べて、ジャンプの時刻を選びます。ジャンプ時には、c_opsで指定した作用を状態へ適用し、正規化して先へ進みます。環境をどのように観測するかという表現に依存するため、一本の軌道を、測定方法によらない実物の唯一の履歴とみなすことはできません。[1][2]
この方法では、一本ずつの状態ベクトルを扱うことで、大きな密度行列を直接進める負担を減らせる場合があります。ただし、必要な平均精度を得るために多数の経路が要ることもあります。状態空間の大きさだけでなく、観測したい量、必要な精度、保存する経路数を揃えて選ぶ必要があり、「軌道法なら必ず速い」という関係ではありません。
一本は途中で変わり、平均は少しずつ変わる
二つの状態0と1を持つ、説明用のモデルを考えます。最初は励起状態1にあり、速度γで基底状態0へ緩和します。再励起する駆動はなく、ハミルトニアンは0、環境の作用はC=√γ|0⟩⟨1|です。γは時間の逆数の単位で、時間を秒で表すなら毎秒です。以下では無次元の時間τ=γtを使います。
このモデルでは、一回のジャンプの後は0に留まります。それぞれの正規化された軌道では、ジャンプまでは1の確率が1、ジャンプ後は0です。多くの軌道を平均すると、時刻τにまだ1にいる割合はexp(−τ)となります。個々の経路の突然の変化と、平均の滑らかな減少は矛盾しません。
ここでは一様乱数UからγJ=−log(U)でジャンプ時刻Jを生成する独立コードを用意しました。乱数シードを20261014に固定し、同じ10,000本の先頭100本、1,000本、全体を集計した結果です。QuTiP本体の実行結果ではなく、同じ単純モデルの待ち時間を直接生成した数学的検算です。
| 軌道数M | 標本の平均 | 理論値との差の絶対値 | 平均の理論標準誤差 |
|---|---|---|---|
| 100 | 0.3500 | 約0.01788 | 約0.04822 |
| 1,000 | 0.3440 | 約0.02388 | 約0.01525 |
| 10,000 | 0.3676 | 約0.000279 | 約0.004822 |
狭い画面では表を横にスクロールできます。平均の理論標準誤差は、独立なM本をあらかじめ決めて集める場合の√(p(1−p)/M)で、ここではp=exp(−1)です。回数を増やすほど推定のばらつきは小さくなりますが、個別の標本の誤差が毎回小さくなる保証はありません。この実行でも、100本から1,000本へ増やした段階では理論値との差が一度広がっています。
「ばらつきゼロ」が、十分な計算を意味しない場合
同じモデルでも、短い時間τ=0.01では、一軌道にジャンプが起きる確率は約0.995%です。このとき、独立な100本がすべてジャンプしない確率は(exp(−0.01))100=exp(−1)、約36.8%もあります。0回という結果は、十分に起こり得る標本です。
その標本だけを見れば、励起状態の値は全軌道で1となり、経験的な分散は0です。しかし、モデル上のジャンプ確率まで0になったわけではありません。まれな過程を調べるなら、無変化の標本が得られる確率や、軌道数を増やした比較も確かめます。結果が静かだから十分、と判断しないための具体例です。
QuTiPのstd_expectにも注意が必要です。確認した実装は、各軌道の期待値の二乗平均と平均の二乗からばらつきを計算します。これは軌道間の標準偏差であり、そのまま平均の推定誤差を表す欄ではありません。上の単純な独立・等重みの例では、軌道間の理論標準偏差は√(p(1−p))、平均の標準誤差はさらに√Mで割った値です。重み付きの計算や、結果を見て途中で止める計算へ、この式を無条件に当てはめないようにします。[3]
終了した理由を、要求した精度と照合する
固定版のmcsolveでは、ntrajは軌道数の上限です。timeoutによる時間制限やtarget_tolによる誤差目標も指定すると、いずれかに先に達したところで止まります。したがって、ntraj=1000と書いたことだけでは、1,000本が計算されたとも、誤差目標を満たしたとも言えません。結果のnum_trajectoriesとstats["end_condition"]を読み、実際の本数と終了理由を確かめます。[2][3]
target_tolは、指定した観測量e_opsと出力時刻に対する平均の統計的誤差を見ます。確認した版ではジャックナイフ法に基づく推定を使い、絶対誤差、または絶対・相対誤差の組を指定できます。これは数値積分の誤差許容値atol・rtolとは別です。観測していない量、出力点の間の挙動、モデルの近似、状態空間の打ち切りまで保証するものではありません。[2][3]
まれなジャンプが重要な場合には、同版のimproved_samplingも検討対象です。無ジャンプの経路を先に計算してその確率を保持し、残りはジャンプを含む条件付きの経路を生成して、対応する重みで平均します。ジャンプを多く見せるために物理的な発生率を増やす設定ではありません。本稿の表は、この重み付き方式を使った性能比較ではありません。[2]
版による制約もあります。5.1.1は混合初期状態を受け取れますが、その場合はtarget_tolをサポートせず、APIの注意書きは軌道数以外の理由で終了した結果を無効と扱うよう求めています。純粋な初期状態で確認した設定を、そのまま混合状態へ広げる前に、採用版の制約を読み直します。[2]
残すべきなのは、平均曲線だけではない
比較のためには、ハミルトニアン、環境の作用、初期状態、観測量、出力時刻、採用版を揃え、乱数シード、実際の軌道数、終了理由も残します。ジャンプ時刻や各軌道を保存すれば、平均がどのような経路からできたかを追えます。ただし、全経路を保存する量は本数とともに増えるので、必要な観測結果に合わせて保存範囲を選びます。
量子軌道の本数は、状態を計算し終えてから最終測定を何回行うかというショット数や、計算空間に何状態を残すかというFock打ち切りとは異なります。まず同じ物理モデルの経路を十分に標本化できているかを点検し、そのうえで数値計算や物理的な仮定を確かめる。これらを分けると、曲線のばらつきに対して何を増やし、何を見直すべきかが判断しやすくなります。
参考資料
QuTiPは5.1.1の固定コミット7accc77a70a08f965a29fdd13515f79cdcab9703と5.1系の公式文書を参照。資料は2026年10月14日に確認しました。表、待ち時間の生成、まれな事象の確率はQuantum Seaによる独立検算であり、実機測定やQuTiP実行時間の比較ではありません。
- QuTiP 5.1 Documentation, Monte Carlo Solver。量子ジャンプの生成、個別経路と平均、結果の保存を参照。
- QuTiP 5.1.1, mcsolve.py。入力、停止条件、混合初期状態の制約、improved samplingの固定実装。対応API解説。
- QuTiP 5.1.1, multitrajresult.py。平均・軌道間標準偏差、目標誤差と終了理由の記録を参照。コードの利用条件はBSD 3-Clause。
