Skip to main content
IBM Quantum Platform

問題生成器

qiskit_addon_utils.problem_generators

問題生成のためのユーティリティ・メソッド。

generate_xyz_hamiltonian

generate_xyz_hamiltonian(coupling, *, coupling_constants=(1.0, 1.0, 1.0), ext_magnetic_field=(0.0, 0.0, 0.0), pauli_order_strategy=PauliOrderStrategy.ColorThenInteraction, coloring=None)

GitHub

量子XYZ型モデルを表す接続性を考慮した量子ビット演算子を生成する。

この関数は以下のハミルトニアンを実装している:

H^=(j,k)E(Jxσjxσkx+Jyσjyσky+Jzσjzσkz)+jV(hxσjx+hyσjy+hzσjz)\hat{H} = \sum_{(j,k)\in E} (J_{x} \sigma_j^{x} \sigma_{k}^{x} + J_{y} \sigma_j^{y} \sigma_{k}^{y} + J_{z} \sigma_j^{z} \sigma_{k}^{z}) + \sum_{j\in V} (h_{x} \sigma_j^{x} + h_{y} \sigma_j^{y} + h_{z} \sigma_j^{z})

ここで、G(V,E)は提供された coupling マップのグラフである。

この方程式の和の外には、しばしば 12-\frac{1}{2}。 このファクターは内部的には適用されないので、 coupling_constantsext_magnetic_field の入力で考慮する必要がある。

>>> from qiskit.transpiler import CouplingMap
>>> from qiskit_addon_utils.problem_generators import generate_xyz_hamiltonian

>>> coupling_map = CouplingMap.from_line(10)
>>> hamiltonian = generate_xyz_hamiltonian(
...     coupling_map,
...     coupling_constants=(0.4, 0.4, 0.0),
...     ext_magnetic_field=(0.0, 0.0, 0.6),
... )
>>> print(hamiltonian)
SparsePauliOp(['IIIIIIIXXI', 'IIIIIIIYYI', 'IIIIIXXIII', 'IIIIIYYIII',
               'IIIXXIIIII', 'IIIYYIIIII', 'IXXIIIIIII', 'IYYIIIIIII',
               'IIIIIIIIXX', 'IIIIIIIIYY', 'IIIIIIXXII', 'IIIIIIYYII',
               'IIIIXXIIII', 'IIIIYYIIII', 'IIXXIIIIII', 'IIYYIIIIII',
               'XXIIIIIIII', 'YYIIIIIIII', 'IIIIIIIIIZ', 'IIIIIIIIZI',
               'IIIIIIIZII', 'IIIIIIZIII', 'IIIIIZIIII', 'IIIIZIIIII',
               'IIIZIIIIII', 'IIZIIIIIII', 'IZIIIIIIII', 'ZIIIIIIIII'],
            coeffs=[0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j,
                    0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j,
                    0.4+0.j, 0.4+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j,
                    0.6+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j])

パラメーター

  • coupling (CouplingMap |PyGraph |PyDiGraph) – ハミルトニアンを写像するための量子ビット部分グラフ。 グラフの辺の方向性は無視され、平行な辺は演算子の生成時に1つの辺として扱われる。
  • coupling_constants (Sequence[float]) – 各直交軸における実数値の結合定数、 JiJ_i
  • ext_magnetic_field (Sequence[float]) – 各直交軸に沿った磁場を表す係数、 hih_i
  • pauli_order_strategy (PauliOrderStrategy) – Pauli 項が生成される反復戦略を示す。 参照 PauliOrderStrategy を参照のこと。
  • coloring (dict[tuple[int, int], int] | None) – ハミルトニアン項の並べ替えに使われるグラフの色付けを符号化したオプションの辞書。 この辞書は、エッジ・ラベル(整数ペアの形式)を色値(単純な整数)にマッピングする。 ハミルトニアンの相互作用項は、色の値を大きくすることで追加される。 それぞれの色の中で、エッジはソートされ、物理的には何も変わらないが、結果は読みやすくなる。

戻り値

量子XYZ型モデルを記述する量子ビット演算子。 演算子の i-番目の量子ビットは、結合写像のインデックス i のノードに対応する。

レイズ

  • ValueError - カップリング定数は、浮動小数点値の length-3 シーケンスで指定しなければならない。
  • ValueError - 外部磁場は、浮動小数点値のシーケンス( length-3 )で指定しなければならない。

戻りの型

SparsePauliOp

generate_time_evolution_circuit

generate_time_evolution_circuit(operator, *, synthesis=None, time=1.0)

GitHub

オペレーターの時間発展をモデル化する。

>>> from qiskit.quantum_info import SparsePauliOp
>>> from qiskit.synthesis import SuzukiTrotter
>>> from qiskit.transpiler import CouplingMap
>>> from qiskit_addon_utils.problem_generators import (
...     PauliOrderStrategy,
...     generate_xyz_hamiltonian,
...     generate_time_evolution_circuit,
... )
>>> coupling_map = CouplingMap.from_line(6)
>>> hamiltonian = generate_xyz_hamiltonian(
...     coupling_map,
...     coupling_constants=(0.4, 0.4, 0.0),
...     ext_magnetic_field=(0.0, 0.0, 0.6),
...     pauli_order_strategy=PauliOrderStrategy.InteractionThenColorZigZag,
... )
>>> circ = generate_time_evolution_circuit(
...     hamiltonian, synthesis=SuzukiTrotter(order=2, reps=2), time=2.0
... )
>>> _ = circ.draw("mpl", fold=-1)
前のコードからの出力。

パラメーター

  • operator (SparsePauliOp) – 時間発展をモデル化する演算子。
  • synthesis (EvolutionSynthesis | None) – 総合戦略。 None の場合、デフォルトの合成は、1回繰り返しのリー・トロッター積公式である。
  • time (float) – 進化の時間。

戻り値

A QuantumCircuit は時間発展演算子を実装している。

戻りの型

QuantumCircuit

PauliOrderStrategy

class PauliOrderStrategy(value)

GitHub

ベース: Enum

異なるパウリ順序の列挙。

色つきの辺の集合でハミルトニアンを構成する場合、生成されるパウリ項はさまざまな方法で並べることができる。 ハミルトニアンにおけるこのような項の順序は、時間発展中も維持されるため、結果として得られる量子回路に直接影響を与える。

ColorThenInteraction

デフォルト値: 1

この戦略は、まずすべてのエッジ(色値でソート)を反復し、次に相互作用( X, Y, Z のようにソート)を反復する。

InteractionThenColor

デフォルト値: 2

この戦略は ColorThenInteraction の逆バージョンである。 これはまず相互作用( X, Y, Z のようにソートされる)を反復し、次にすべてのエッジ(色値でソートされる)を反復する。

InteractionThenColorZigZag

デフォルト値: 3

この戦略は InteractionThenColor 。 しかし、1つの相互作用から次の相互作用にジャンプするときに、色の値をインクリメントしたりデクリメントしたりして、エッジを交互に反復する。 例えば、 XY の相互作用のみが含まれ、3つのカラーバリューが使用される場合({1, 2, 3} )、これは次の順序になります: ["X on 1", "X on 2", "X on 3", "Y on 3", "Y on 2", "Y on 1"]

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