Skip to main content
IBM Quantum Platform

Quimb回路ベースのバックエンド

qiskit_addon_mpf.backends.quimb_circuit

回路を用いた時間発展バックエンド quimb.

警告

このバックエンドは、オプションの依存関係がインストールされている場合にのみ利用可能です:

pip install "qiskit-addon-mpf[quimb]"
CircuitEvolver量子回路に基づく時間進化エンジン。
CircuitState量子回路に基づく時間発展状態のMPO的表現。

基礎となる方法

Quimbは、テンソル・ネットワーク・ベースの表現という形で、量子回路のシミュレーションを直接サポートしている。 quimb.tensor.Circuit 表現である。 これを利用して、明示的な時間発展アルゴリズムを回避し、代わりに時間発展を直接 QuantumCircuit で時間発展を直接エンコードし quimb を使って2つの回路の重なりを計算することができる。 詳しくは、 量子回路のガイドをご覧ください。


コード例

このセクションでは、このバックエンドを使い始めるための簡単な例を示します。 この例では、以下の3つのファクトリー関数を作成する方法を示しています。 setup_dynamic_lse().

この IdentityStateFactory プロトコルは CircuitState コンストラクタによってすでに満たされており、 identity_factory の引数は些細なものである:

>>> from qiskit_addon_mpf.backends.quimb_circuit import CircuitState
>>> identity_factory = CircuitState

のセットアップは少し複雑だ。 CircuitEvolver のセットアップは少し複雑だ。 **パラメータ化された **QuantumCircuit オブジェクトを入力として必要とする。 Parameter はトロッター法の時間ステップ(dt)の代わりとなる。

このようなパラメータ化されたトロッター回路テンプレートがどのように構築されるかを示すために、以下と同じハミルトニアンと2次の鈴木-トロッター式を再利用する。 quimb_layers.

>>> from qiskit.quantum_info import SparsePauliOp
>>> hamil = SparsePauliOp.from_sparse_list(
...     [("ZZ", (i, i+1), 1.0) for i in range(0, 9, 2)] +
...     [("Z", (i,), 0.5) for i in range(10)] +
...     [("ZZ", (i, i+1), 1.0) for i in range(1, 9, 2)] +
...     [("X", (i,), 0.25) for i in range(10)],
...     num_qubits=10,
... )

しかし今回は、実際の回路を構成する際の引数として Parametertime

>>> from functools import partial
>>> from qiskit.circuit import Parameter
>>> from qiskit.synthesis import SuzukiTrotter
>>> from qiskit_addon_mpf.backends.quimb_circuit import CircuitEvolver
>>> from qiskit_addon_utils.problem_generators import generate_time_evolution_circuit
>>> dt = Parameter("dt")
>>> suzuki_2 = generate_time_evolution_circuit(hamil, time=dt, synthesis=SuzukiTrotter(order=2))
>>> approx_evolver_factory = partial(CircuitEvolver, circuit=suzuki_2)
警告

名前Parameterdt

exact_evolver_factory に高次のトロッター式を選ぶことができる。 しかし、 partial 関数を構築するときにパラメータをすぐにバインドしたとしても、再びパラメータ化された回路を使わなければならないことに注意してほしい。

>>> suzuki_4 = generate_time_evolution_circuit(hamil, time=dt, synthesis=SuzukiTrotter(order=4))
>>> exact_evolver_factory = partial(CircuitEvolver, circuit=suzuki_4, dt=0.05)

これらのファクトリー関数は、次のように使用することができる。 setup_dynamic_lse(). 詳しくはドキュメントを参照してほしい。

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