Skip to main content
IBM Quantum Platform

フェルミオン

qiskit_addon_sqd.fermion

フェルミオン系の研究のための関数。

SCI州

class SCIState(amplitudes, ci_strs_a, ci_strs_b, norb, nelec)

GitHub

ベース: object

量子状態を記述する振幅と行列式。

パラメーター

amplitudes

タイプ: ndarray

M=M = len(ci_strs_a) と NN = len(ci_strs_b) の M×NM \times N 配列。 amplitudes[i][j] は行列式のペア (ci_strs_a[i], ci_strs_b[j]) の振幅。

ci_strs_a

タイプ: ndarray

アルファの決定要因

ci_strs_b

タイプ: ndarray

ベータ決定要因。

load

classmethod load(filename)

GitHub

.npz ファイルから SCIState オブジェクトをロードします。

nelec

タイプ: tuple[int, int]

アルファ電子とベータ電子の数。

norb

タイプ: int

空間軌道の数。

orbital_occupancies

orbital_occupancies()

GitHub

平均軌道占有率。

戻りの型

タプル [*ndarray*, ndarray]

rdm

rdm(rank=1, spin_summed=False)

GitHub

縮小密度行列を計算する。

パラメーター

戻りの型

ndarray

save

save(filename)

GitHub

SCIState オブジェクトを.npz ファイルに保存します。

spin_square

spin_square()

GitHub

スピンの2乗を返す。

戻りの型

浮動小数点

bitstring_matrix_to_ci_strs

bitstring_matrix_to_ci_strs(bitstring_matrix, open_shell=False)

GitHub

bitstring_matrix のビット列(行)を行列式の整数表現に変換する。

この関数は、 bitstring_matrix の各ビットストリングを半分に分け、整数表現に変換し、最後にそれぞれの(スピンアップまたはスピンダウン)リストに追加する。 これらのリストはソートされ、この関数から出力される。

パラメーター

  • bitstring_matrix (ndarray) – 各行が1つのビット列を表すような、ビット値の bool 表現の 2D 配列
  • open_shell (bool) – ビット列の左半分と右半分のユニークな構成を別々にするかどうかを指定するフラグ。 False の場合、ビット列の左半分と右半分からのコンフィギュレーションは、ユニークなコンフィギュレーションの単一セットに組み合わされる。 左と右のビット列の組み合わせが返される。

戻り値

length-2、ビット列の右半分(スピンアップ)と左半分(スピンダウン)をそれぞれ表す行列リストのタプル。

戻りの型

タプル [*ndarray*, ndarray]

diagonalize_fermionic_hamiltonian

diagonalize_fermionic_hamiltonian(one_body_tensor, two_body_tensor, bit_array, samples_per_batch, norb, nelec, *, num_batches=1, energy_tol=1e-08, occupancies_tol=1e-05, max_iterations=100, sci_solver=None, symmetrize_spin=False, max_dim=None, include_configurations=None, initial_occupancies=None, carryover_threshold=0.0001, callback=None, seed=None)

GitHub

サンプルベースの量子対角化(SQD)アルゴリズムを実行します。

パラメーター

  • one_body_tensor (ndarray) – ハミルトニアンの1体テンソル。

  • two_body_tensor (ndarray) – ハミルトニアンの2体テンソル。

  • bit_array (BitArray) – サンプリングされたビット列の配列。 [b_N, ..., b_0, a_N, ..., a_0]各ビット文字列は、アルファ部分とベータ部分の両方が連結され、アルファ部分が右側に連結されたものでなければならない。

  • samples_per_batch (int) – 各サブサンプリングされたビット列のバッチに含めるビット列の数。

  • norb (int) – 空間軌道の数。

  • nelec (tuple[int, int]) – アルファ電子とベータ電子の数。

  • num_batches (int) – 各構成回復反復でサブサンプリングするバッチ数。 この引数は、対角化部分空間の次元を間接的に制御する。 値が大きいほど、部分空間の次元が大きくなる。

  • energy_tol (float) – エネルギーの収束に関する数値的な許容範囲。 反復間のエネルギーの変化がこの値より小さい場合、占有率も収束していれば、構成回復ループは終了する( occupancies_tol 引数を参照)。

  • occupancies_tol (float) – 平均軌道占有率の収束に関する数値的許容範囲。 繰り返しの間の軌道の平均占有率の絶対値の変化の最大値がこの値より小さい場合、エネルギーも収束していれば、コンフィギュレーション回復ループは終了する( energy_tol 引数を参照)。

  • max_iterations (int) – コンフィギュレーション・リカバリーの反復回数の制限。

  • sci_solver (Callable[[list[tuple[ndarray, ndarray]], ndarray, ndarray, int, tuple[int, int]], list[SCIResult]] | None) –

    選択されたコンフィギュレーション・インタラクション・ソルバー機能。

    入力:

    • スピンαCI文字列とスピンβCI文字列の配列のペア(strings_a, strings_b)のリストで、そのデカルト積が対角化を行う部分空間の基底を与える。 ソルバー関数が対角化を並列に実行できるようにリストが渡される。
    • ハミルトニアンの1体テンソル。
    • ハミルトニアンの2体テンソル。
    • 空間軌道の数。
    • アルファ電子とベータ電子の数を示すペア(n_alpha, n_beta)。

    出力:各トリプレットは対応する対角化の結果を含む。

  • symmetrize_spin (bool) – 対角化部分空間がスピンアルファとスピンベータの交換に関して不変であるように、スピンアルファとスピンベータのCI文字列を常に単一のリストにマージするかどうか。

  • max_dim (int |tuple[int, int] | None) –

    SCI部分空間のスピンセクターの次元の限界。 どちらでもいい:

    • (max_dim_a, max_dim_b) 、スピンアルファとスピンベータセクターに別々の制限を与える整数のタプル。 この場合、SCI部分空間の次元は max_dim_a * max_dim_b を超えることはない。
    • スピンアルファ、スピンベータの両セクターで使用されるリミットを指定する1つの整数。 この場合、SCI部分空間の次元は max_dim**2 を超えることはない。
    • Noneこの場合、制限はない。

    次元の限界はスピンセクターで設定され、SCI部分空間の全次元は個々のスピンセクターの次元の積であることに注意してください。

  • include_configurations (list[int] | tuple[list[int], list[int]] | ndarray | None) – 対角化部分空間に常に含める構成。 両方のスピンセクタに使用する単一スピン文字列の単一リスト、または各スピンに使用する単一スピン文字列のリストのペア(alpha_strings, beta_strings)を指定することができます。

  • initial_occupancies (tuple[ndarray, ndarray] | None) – 軌道の平均占有率の初期推定値。

  • carryover_threshold (float) – コンフィギュレーション・リカバリーのある反復から次の反復まで、CIのウェイトが大きいビット列を持ち越すための閾値。 係数の絶対値がこの閾値より大きいコンフィギュレーションに関連するすべての単一スピンのCIストリングは、次の反復のための対角化部分空間に含まれる。 閾値を小さくすると、より多くのコンフィギュレーションを保持することになり、部分空間が大きくなるため、対角化のコストが高くなる。

  • callback (Callable[[list[SCIResult]], None] | None) – 各コンフィギュレーション・リカバリーの反復後に呼び出されるコールバック関数。 この関数は sci_solver 関数の出力を渡されます。この出力は(energy, sci_state, occupancies)のトリプレットのリストで、各トリプレットには対角化の結果が含まれます。

  • seed (Generator |int | None) – 擬似乱数生成器のシード。

戻り値

エネルギーとそのエネルギーを持つSCI状態の推定値。

戻りの型

SCIR結果

enlarge_batch_from_transitions

enlarge_batch_from_transitions(bitstring_matrix, transition_operators)

GitHub

bitstring_matrix で表されるコンフィギュレーションに、遷移演算子のセットを適用する。

パラメーター

  • bitstring_matrix (ndarray) – 各行が1つのビット列を表すような、ビット値の bool 表現の 2D 配列。
  • transition_operators (ndarray) – 1D、または 配列、、、 アイデンティティ、創造、消滅、または数演算子の作用を表す文字列。 2D I + - n 各行はトランジション・オペレーターを表す。

戻り値

励起演算子を適用した後の電子配置の拡張セットを表すビット列行列。

戻りの型

ndarray

solve_fermion

solve_fermion(bitstring_matrix, /, hcore, eri, *, open_shell=False, spin_sq=None, shift=0.1, **kwargs)

GitHub

分子積分と一組の電子配置から基底状態を近似する。

パラメーター

  • bitstring_matrix (tuple[ndarray, ndarray] | ndarray) –

    ハミルトニアンが投影され対角化される部分空間を定義するコンフィギュレーションのセット。

    これは2つの方法で指定できる:

    • ビット列行列: bool 値の 2D numpy.ndarray で、各行がビット列を表す。 スピンアップコンフィギュレーションはカラムインデックス (N, N/2]、スピンダウン コンフィギュレーションはカラムインデックス (N/2, 0]、ここで N は量子ビットの数である。
    • CI文字列:それぞれスピンアップ行列式とスピンダウン行列式の整数表現を含む2つのシーケンスのタプル。 期待されるフォーマットは ([a_str_0, ..., a_str_N], [b_str_0, ..., b_str_M])
  • hcore (ndarray) – 単電子積分を表すコア・ハミルトン行列

  • eri (ndarray) – 二電子積分を表す電子反発積分

  • open_shell (bool) – ビット列の左半分と右半分の構成を別々にするかどうかを指定するフラグ。 False の場合、ビット列の左半分と右半分からのCI文字列は、ユニークなコンフィギュレーションの単一セットに結合され、アルファ部分空間とベータ部分空間の両方に使用される。

  • spin_sq (float | None) – 基底状態の全スピン二乗の目標値 S2=s(s+1)S^2 = s(s + 1)None の場合、スピンは課せられない。

  • shift (float) – 異なるスピンを持つ状態のレベルシフト。 (H+shiftS2)ψ>=Eψ>(H + shift * S^2)|ψ> = E|ψ>

  • ** kwargs - 渡すキーワード引数 pyscf.fci.selected_ci.kernel_fixed_space

戻り値

  • SCI計算による最小エネルギー
  • SCIの基底状態
  • スピンアップ軌道とスピンダウン軌道の軌道占有率を含むタプル。 としてフォーマットされている: (array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N]))
  • スピン2乗の期待値

戻りの型

タプル[ float, SCIState, タプル [*ndarray*, ndarray ], float ]

solve_sci

solve_sci(ci_strings, one_body_tensor, two_body_tensor, norb, nelec, *, spin_sq=None, **kwargs)

GitHub

CIストリングで定義される部分空間でハミルトニアンを対角化する。

パラメーター

  • ci_strings (tuple[ndarray, ndarray]) – スピンαCIストリングとスピンβCIストリングの配列のペア(strings_a, strings_b)で、そのデカルト積が対角化を行う部分空間の基底を与える。

  • one_body_tensor (ndarray) – ハミルトニアンの1体テンソル。

  • two_body_tensor (ndarray) – ハミルトニアンの2体テンソル。

  • norb (int) – 空間軌道の数。

  • nelec (tuple[int, int]) – アルファ電子とベータ電子の数。

  • spin_sq (float | None) – 基底状態の全スピンの2乗の目標値。 None の場合、スピンはかからない。

  • ** kwargs

    に渡すキーワード引数 pyscf.fci.selected_ci.kernel_fixed_space

戻り値

対角化の結果。

戻りの型

SCIR結果

solve_sci_batch

solve_sci_batch(ci_strings, one_body_tensor, two_body_tensor, norb, nelec, *, spin_sq=None, **kwargs)

GitHub

ハミルトニアンを部分空間で対角化する。

パラメーター

  • ci_strings (list[tuple[ndarray, ndarray]]) – スピンαCI文字列とスピンβCI文字列の配列のペア(strings_a, strings_b)のリストで、そのデカルト積が対角化を行う部分空間の基底を与える。

  • one_body_tensor (ndarray) – ハミルトニアンの1体テンソル。

  • two_body_tensor (ndarray) – ハミルトニアンの2体テンソル。

  • norb (int) – 空間軌道の数。

  • nelec (tuple[int, int]) – アルファ電子とベータ電子の数。

  • spin_sq (float | None) – 基底状態の全スピンの2乗の目標値。 None の場合、スピンはかからない。

  • ** kwargs

    に渡すキーワード引数 pyscf.fci.selected_ci.kernel_fixed_space

戻り値

ci_stringsで与えられた部分空間での対角化の結果。

戻りの型

[SCIResultの]リスト

optimize_orbitals

optimize_orbitals(bitstring_matrix, /, hcore, eri, k_flat, *, open_shell=False, spin_sq=0.0, num_iters=10, num_steps_grad=10000, learning_rate=0.01, **kwargs)

GitHub

軌道を最適化して、最小の基底状態を作り出す。

このプロセスでは、3つのステップを繰り返す:

** num_iters :**

  • 積分をパラメータに対して回転させる、 k_flat
  • 基底状態のエネルギーと波動関数の振幅を対角化して近似する
  • 勾配降下法とステップ2で求めた波動関数振幅を用いて、 k_flat を最適化する

参照 項 II A 4 この軌道最適化技術に関するより詳細な議論については、こちらを参照されたい。

パラメーター

  • bitstring_matrix (tuple[ndarray, ndarray] | ndarray) –

    ハミルトニアンが投影され対角化される部分空間を定義するコンフィギュレーションのセット。

    これは2つの方法で指定できる:

    • ビット列行列: bool 値の 2D numpy.ndarray で、各行がビット列を表す。 スピンアップコンフィギュレーションはカラムインデックス (N, N/2]、スピンダウン コンフィギュレーションはカラムインデックス (N/2, 0]、ここで N は量子ビットの数である。
    • CI文字列:それぞれスピンアップ行列式とスピンダウン行列式の整数表現を含む2つのシーケンスのタプル。 期待されるフォーマットは ([a_str_0, ..., a_str_N], [b_str_0, ..., b_str_M])
  • hcore (ndarray) – 単電子積分を表すコア・ハミルトン行列

  • eri (ndarray) – 二電子積分を表す電子反発積分

  • k_flat (ndarray) – 1D 軌道変換を定義する配列、 K。 この配列は、対角線を除いた対称変換演算子の上三角形を行長順に指定する。

  • open_shell (bool) – ビット列の左半分と右半分の構成を別々にするかどうかを指定するフラグ。 False の場合、ビット列の左半分と右半分からのCI文字列は、ユニークなコンフィギュレーションの単一セットに結合され、アルファ部分空間とベータ部分空間の両方に使用される。

  • spin_sq (float) – 基底状態の全スピン2乗の目標値

  • num_iters (int) – 軌道最適化の繰り返し回数

  • num_steps_grad (int) – 各最適化反復で実行する勾配降下のステップ数

  • learning_rate (float) – 勾配降下で使用する学習率

  • ** kwargs

    に渡すキーワード引数 pyscf.fci.selected_ci.kernel_fixed_space

戻り値

  • 最後の最適化反復で見つかった基底状態のエネルギー
  • 軌道変換を定義する最適化された 1D 配列
  • スピンアップ軌道とスピンダウン軌道の軌道占有率を含むタプル。 としてフォーマットされている: (array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N]))

戻りの型

タプル[ float, ndarray, タプル [*ndarray*, ndarray ]] ]

rotate_integrals

rotate_integrals(hcore, eri, k_flat)

GitHub

積分に対して相似変換を行う。

変身は次のように説明される:

H~^=U^(k)H^U^(k)\hat{\widetilde{H}} = \hat{U^{\dagger}}(k)\hat{H}\hat{U}(k)

k_flat から U^\hat{U}U^\hat{U^{\dagger}} が生成され、1体積分と2体積分に適用される方法の詳細については、 Sec. II A 4.

パラメーター

  • hcore (ndarray) – 単電子積分を表すコア・ハミルトン行列
  • eri (ndarray) – 二電子積分を表す電子反発積分
  • k_flat (ndarray) – 1D 軌道変換を定義する配列、 K。 この配列は、対角線を除いた対称変換演算子の上三角形を行長順に指定する。

戻り値

  • 回転したコアのハミルトニアン行列
  • 回転したERI行列

戻りの型

タプル [*ndarray*, ndarray]

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