Skip to main content
IBM Quantum Platform

進化

class Evolution(num_modes, operator, time=1.0, *, synthesis=None, atomic=False)

ベース: FermionicGate

演算子の時間発展を実装します。

フェルミオン HHoperator と進化 tt が与えられたとき time 、このゲートはユニタリー演算を実装する

U=e−itH.U = e^{-i t H}.

UU がユニタリであるためには、 HH がエルミートでなければならない。 これは発信者の責任であり、確認は行われていません。

注

フェルミオン空間においてこのゲートを(より小さなゲ Evolution ートの回路に)分解することは任意であり、これを制御するのがこの属性 synthesis です。 このゲートは、フェルミオンから量子ビットへの変換ステージにそのまま渡すことも可能です。このステージでは、ゲート operator に含まれる項の数がいくら多くても、ゲート全体をマッピングして合成します。 参照 synthesis。

(例えば decompose()、によって)分解される際、その方法を決定 synthesis する。 デフォルトでは に設定されており FermionicLieTrotter、に が割り当て operatorgroups られている場合は進化をグループごとに分割し( 「グループ演算子の項:演算子構造の使用 」を参照)、それ以外の場合は項ごとに分割します(個々の因子が互いに可換である場合にのみ正確になります)。 トランスパイレーションの過程で、分解がさらに変化する場合があります。例えば QDriftTrotterization、進化は、その項のランダムなサンプルに置き換えられます。 それが放出するゲートは であるため atomic、 synthesis はもはやそれらには適用されません。

注

状態ベクトルによるシミュレーション経路は、を経由しません synthesis。状態ベクトル全体を正確 operator に指数関数的に変換するからです。 したがって、このゲートをシミュレートしてもトロッター誤差は生じないが、分解された回路では一般的に生じる。

このゲートのインスタンスの初期化は、以下に挙げる引数を使用して行うことができます。

パラメーター

  • num_modes (int) – このゲートが作用するフェルミオンモードの数。
  • operator (OperatorTrait) – 作用を受けるフェルミオンモードを時間発展させるためのエルミート演算子 HH。
  • time (float) – 進化時間 tt に、 e−itHe^{-i t H} の指数を入力します。負の値を入力すると、時間が逆方向に遡って進化します。
  • synthesis (FermionicEvolutionSynthesis | None) – このゲートを分解する場合(もし分解されるのであれば)、その際に用いるフェルミオン間合成法。 None (デフォルトの場合)、インスタンス FermionicLieTrotter が使用されます。
  • atomic (bool) – このゲートが、フェルミオン空間においてこれ以上分解してはならない、完全に分解された因数であるかどうか。 atomic を参照してください。

属性

atomic

このゲートが、これ以上分解してはならない要素であるかどうか。

A は、自身が放出する因子に「原子」というマークを FermionicEvolutionSynthesis 付けます。なぜなら、それらは A が実行することを選択した分裂の結果であり、それらをさらに分解してしまうと、その選択が無効になってしまうからです。 単一の演算子項の展開が原子的なのは、これ以上分割できるものが残っていないという、より強力な理由によるものである。

アトミックゲートには定義がまったくないため、それを展開するのではなく、そのまま decompose() 残す。 フェルミオンからクビットへのレベルでは、依然として通常通りマッピングと合成が行われており、この段階で因子が実際の演算に変換されます。

これは読み取り専用です。その理由は、. と同じです synthesis。

synthesis

このゲートを分解するフェルミオン間合成法。

これは読み取り専用です。ゲートの定義は一度構築されるとキャッシュされるため、事後に割り当てられた合成手法は反映されません。 その代わりに、コンストラクタに渡してください。

operator

作用を受けたフェルミオンモードを時間発展させる際の演算子。


方法

inverse

inverse(annotated=False)

このゲートの逆関数である e+itHe^{+i t H} を返します。

パラメーター

annotated (bool) – 無視された。 このゲートの逆は別のゲートであるため Evolution、それがになる必要は決してない AnnotatedOperation。

戻り値

否定された時間に対して同じ演算子を変化させるアン・ Evolution ゲート。

戻りの型

進化

プロトコルの手法

_apply_unitary_placed_

_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)

オペレータをグローバルモードに再ラベル付けした exp(-i * time * operator) 後に適用されます。

演算子はグローバルモードに再ラベル付けされ、に変換されてに渡し ffsim.FermionOperatorffsim.linear_operator() 、その後、を介してベクトルに適用される scipy.sparse.linalg.expm_multiply()。 まだ ではない演算子は、まず プロトコル SupportsFermionOperator を通じて変換される FermionOperator ため、このパッケージのあらゆる演算子型を進化させることができます。

パラメーター

  • vec (np.ndarray) – 作用させる状態ベクトル。
  • norb (int) – グローバル状態ベクトルの空間軌道数。
  • nelec (int |tuple[int, int]) – スピンを持たない系の場合は単一の整数、あるいはスピンαおよびスピンβのフェルミオンの数を表す整数のペアのいずれか。 整数を選ぶと、スピンなしモードの解釈(演算子のモード norb はアルファ軌道である)が選択され、ペアを選ぶと、演算子のモード 2 * norb のスピンあり解釈 (orb, spin) が選択される。
  • copy (bool) – 操作を行う前にベクトルをコピーするかどうか。
  • freg_indices (list[int]) – このゲートのローカルモードがマッピングされる絶対(グローバル)モードのインデックス。 この演算子は、適用される前に、そのローカルモードからこれらのグローバルモードへと再ラベル付けされます。これは、トランスパイラの合成パスを反映したものです。

戻り値

変換後のベクトル。

昇給

  • MissingOptionalLibraryError – ffsim がインストールされていない場合。
  • ValueError – 演算子がセクター (norb, nelec) を保存しない場合。 Evolving under は、 がセクターをそれ自体に写像 operator する場合に exp(-i * time * operator) のみユニタリとなるため、ffsim は、粒子数もスピンの z 成分も保存しない演算子を拒否する。

戻りの型

np.ndarray

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。