TeNPy TEBD バックエンド
qiskit_addon_mpf.backends.tenpy_tebd
A tenpy-ベースのTEBDバックエンド。
このバックエンドは、オプションの依存関係がインストールされている場合にのみ利用可能です:
pip install "qiskit-addon-mpf[tenpy]"TEBDEvolver | 内部MPOを進化させるためのTEBDアルゴリズム。 |
MPOState | TeNPy's MPO をインターフェイスにマッチさせるための Mediator クラス。 State インターフェースと一致させます。 |
MPS_neel_state | Néel 状態を MPS として構築する。 |
基礎となる方法
このモジュールは、テンソルネットワークライブラリに実装されているTEBD(time-evolving block decimation)アルゴリズム [1に基づいて]、動的MPF係数を計算するための時間発展バックエンドを提供します。 tenpy テンソルネットワークライブラリに実装されています。
このモジュールが提供するクラスは2つの目的を果たす:
- コネクティング
tenpyの実装をqiskit_addon_mpf.backends. - 拡張
tenpyTEBDの実装を拡張し、(MPSではなく)内部のMPO状態を扱えるようにした(詳しくはStateを参照)。
最も単純な意味では、このモジュールは、内部MPO状態を進化させるために、TEBDアルゴリズムをストレートに拡張したものである。 そのため、動的MPFアルゴリズムにこのバックエンドを使用したい場合は、時間進化させたいハミルトニアンを、以下のようなネイティブな形式でエンコードする必要がある。 tenpy-ネイティブな形で より具体的には TEBDEvolver クラス(これは tenpy.algorithms.tebd.TEBDEngineのサブクラスです)。 Model. TeNPy モジュールには、このようなハミルトニアンを構築するための便利なメソッドが多数用意されている。 tenpy.models モジュールで提供している。 これらのどれもあなたのニーズを満たさない場合、Qiskitネイティブオブジェクトからのいくつかの変換メソッドを実装した LayerModel クラスを使うことを検討できます。
コード例
このセクションでは、このバックエンドを使い始めるための簡単な例を示します。 この例では、以下の3つのファクトリー関数を作成する方法を示しています。 setup_dynamic_lse().
まず、時間発展させたいハミルトニアンを定義する。 ここでは、単に tenpyの便利なメソッドの一つを選ぶだけである。
>>> from tenpy.models import XXZChain2
>>> hamil = XXZChain2(
... {
... "L": 10,
... "Jz": 0.8,
... "Jxx": 0.7,
... "hz": 0.3,
... "bc_MPS": "finite",
... "sort_charge": False,
... }
... )次に、 identity_factory 。 IdentityStateFactory プロトコルと一致させなければならない。 そのためには、先ほど定義したハミルトニアンの基礎となる格子を唯一の入力とする initialize_from_lattice() 簡便法を用いる。
>>> from functools import partial
>>> from qiskit_addon_mpf.backends.tenpy_tebd import MPOState
>>> identity_factory = partial(MPOState.initialize_from_lattice, hamil.lat),これで ExactEvolverFactory そして ApproxEvolverFactory 時間進化インスタンスファクトリを構築することができる。 そのためには、単純にイニシャライザの定義済みの値をバインドすればよい。 TEBDEvolver イニシャライザを、それぞれの関数プロトコルが期待する正しいインターフェイスに縮小する。
>>> from qiskit_addon_mpf.backends.tenpy_tebd import TEBDEvolver
>>> exact_evolver_factory = partial(
... TEBDEvolver,
... model=hamil,
... dt=0.05,
... options={
... "order": 4,
... "preserve_norm": False,
... },
... )dt の値を小さな時間ステップに固定し、上記の正確な時間発展を模倣するために高次のスズキ・トロッター分解を使っていることに注目してほしい。
以下では、 dt の値を固定せず、近似的な時間発展のための2次のSuzuki-Trotter式のみを使用する。 さらに、いくつかの切り捨て設定も指定する。
>>> approx_evolver_factory = partial(
... TEBDEvolver,
... model=hamil,
... options={
... "order": 2,
... "preserve_norm": False,
... "trunc_params": {
... "chi_max": 10,
... "svd_min": 1e-5,
... "trunc_cut": None,
... },
... },
... )もちろん、ここに示した例に限定されるわけではないので、 TeNPy’s で提供されている他の設定を試してみることをお勧めする。 TEBDEngine の実装を試してみることをお勧めする。
制限
最後に、このバックエンドで扱えるハミルトニアンの種類について、いくつかの既知の制限を指摘する:
- すべての相互作用は1次元でなければならない
- 相互作用には有限境界条件を使用しなければならない
リソース
[1]: https://en.wikipedia.org/wiki/Time-evolving _block_decimation