バックエンド
qiskit_addon_mpf.backends
オプションの DynamicMPF アルゴリズムに
可用性
あるバックエンドが使えるかどうかは、基礎となるテンソルネットワークライブラリが使えるかどうかに依存する。 これは、以下のインジケータを使って実行時に簡単にアサートできる:
ハズ・クインブ
オプションの quimb 依存関係がインストールされているかどうかを示します。
ハス・テンピー
オプションの tenpy 依存関係がインストールされているかどうかを示します。
バックエンド
可用性(上記参照)に応じて、以下のバックエンドが利用可能です:
quimb_tebd | A quimb-ベースのTEBDバックエンド。 |
quimb_layers | を使用したレイヤーワイズ時間進化バックエンド。 quimb. |
quimb_circuit | 回路を用いた時間発展バックエンド quimb. |
tenpy_tebd | A tenpy-ベースのTEBDバックエンド。 |
tenpy_layers | を使用したレイヤーワイズ時間進化バックエンド。 tenpy. |
インターフェース
これらの任意のバックエンドによって実装されるインターフェースは、以下のクラスで構成される:
進化者
class Evolver
ベース: ABC
で使用される時間発展アルゴリズムのインターフェイスである。 DynamicMPF.
この時間進化インターフェイスは DynamicMPF.lhs そして DynamicMPF.rhs で使用され State オブジェクトを時間進化させる。 アルゴリズムの正確なメカニズムについては、以下を参照されたい。 DynamicMPF, Stateおよび setup_dynamic_lse().
conjugate
abstract property
タイプ: bool
この時間分解インスタンスが右辺で動作するかどうかを返します。
evolved_time
abstract property
タイプ: float
現在の進化時間を返します。
step
状態
class State
ベース: ABC
のインターフェースは DynamicMPF.evolution_state.
この時間発展状態は、LHSとRHSの間で共有される。 Evolver インスタンスの間で共有される。 DynamicMPF インスタンスの間で共有される。 このインターフェイスを実装する具体的なバックエンドがテンソル・ネットワークに基づいているほとんどの場合、この状態は行列積演算子(MPO)になる。 というのも、ほとんどの時間発展アルゴリズムでは、通常、下図に示すように、行列積状態(MPS)を進化させるからである。ここで、時間発展ブロック(U# )は、1次元のMPS(S# )に連続して適用される。ここでは、テンソルネットワークは時間が経つにつれて右に向かって成長している。
MPS Evolution
S0┄┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄
│ ┃ U1 ┃ ┃ U5 ┃
S1┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
│ ┃ U3 ┃
S2┄┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄ ...
│ ┃ U2 ┃ ┃ U6 ┃
S3┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
│ ┃ U4 ┃
S4┄┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄しかし、今回のケースでは、2つの時間進化エンジンが1つの状態を共有することを望んでいる。 そのためには、片方の状態を右から進化させ(先ほどと同じように U# )、もう片方の状態を左から進化させればよい(V# )。この場合、状態もその方向に向かう結合を持つ必要があり、以前の1次元のMPSではなく、2次元のMPO(M#)となる。
MPO Evolution
┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄┄M0┄┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄
┃ V5 ┃ ┃ V1 ┃ │ ┃ U1 ┃ ┃ U5 ┃
┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄┄M1┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
┃ V3 ┃ │ ┃ U3 ┃
... ┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄┄M2┄┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄ ...
┃ V6 ┃ ┃ V2 ┃ │ ┃ U2 ┃ ┃ U6 ┃
┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄┄M3┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
┃ V4 ┃ │ ┃ U4 ┃
┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄┄M4┄┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄