フェルミオン
qiskit_addon_sqd.fermion
フェルミオン系の研究のための関数。
SCI州
class SCIState(amplitudes, ci_strs_a, ci_strs_b, norb, nelec)
ベース: object
量子状態を記述する振幅と行列式。
パラメーター
amplitudes
タイプ: ndarray
len(ci_strs_a) と = len(ci_strs_b) の 配列。 amplitudes[i][j] は行列式のペア (ci_strs_a[i], ci_strs_b[j]) の振幅。
ci_strs_a
タイプ: ndarray
アルファの決定要因
ci_strs_b
タイプ: ndarray
ベータ決定要因。
load
nelec
タイプ: tuple[int, int]
アルファ電子とベータ電子の数。
norb
タイプ: int
空間軌道の数。
orbital_occupancies
rdm
save
spin_square
bitstring_matrix_to_ci_strs
bitstring_matrix_to_ci_strs(bitstring_matrix, open_shell=False)
bitstring_matrix のビット列(行)を行列式の整数表現に変換する。
この関数は、 bitstring_matrix の各ビットストリングを半分に分け、整数表現に変換し、最後にそれぞれの(スピンアップまたはスピンダウン)リストに追加する。 これらのリストはソートされ、この関数から出力される。
パラメーター
- bitstring_matrix (ndarray) – 各行が1つのビット列を表すような、ビット値の
bool表現の 2D 配列 - open_shell (bool) – ビット列の左半分と右半分のユニークな構成を別々にするかどうかを指定するフラグ。
Falseの場合、ビット列の左半分と右半分からのコンフィギュレーションは、ユニークなコンフィギュレーションの単一セットに組み合わされる。 左と右のビット列の組み合わせが返される。
戻り値
length-2、ビット列の右半分(スピンアップ)と左半分(スピンダウン)をそれぞれ表す行列リストのタプル。
戻りの型
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)
サンプルベースの量子対角化(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) – 空間軌道の数。
-
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)のトリプレットのリストで、各トリプレットには対角化の結果が含まれます。
戻り値
エネルギーとそのエネルギーを持つSCI状態の推定値。
戻りの型
SCIR結果
enlarge_batch_from_transitions
enlarge_batch_from_transitions(bitstring_matrix, transition_operators)
bitstring_matrix で表されるコンフィギュレーションに、遷移演算子のセットを適用する。
パラメーター
- bitstring_matrix (ndarray) – 各行が1つのビット列を表すような、ビット値の
bool表現の 2D 配列。 - transition_operators (ndarray) – 1D、または 配列、、、 アイデンティティ、創造、消滅、または数演算子の作用を表す文字列。 2D
I+-n各行はトランジション・オペレーターを表す。
戻り値
励起演算子を適用した後の電子配置の拡張セットを表すビット列行列。
戻りの型
solve_fermion
solve_fermion(bitstring_matrix, /, hcore, eri, *, open_shell=False, spin_sq=None, shift=0.1, **kwargs)
分子積分と一組の電子配置から基底状態を近似する。
パラメーター
-
bitstring_matrix (tuple[ndarray, ndarray] | ndarray) –
ハミルトニアンが投影され対角化される部分空間を定義するコンフィギュレーションのセット。
これは2つの方法で指定できる:
- ビット列行列:
bool値の 2Dnumpy.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) – 基底状態の全スピン二乗の目標値 。
Noneの場合、スピンは課せられない。 -
shift (float) – 異なるスピンを持つ状態のレベルシフト。
-
** 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乗の期待値
戻りの型
solve_sci
solve_sci(ci_strings, one_body_tensor, two_body_tensor, norb, nelec, *, spin_sq=None, **kwargs)
CIストリングで定義される部分空間でハミルトニアンを対角化する。
パラメーター
-
ci_strings (tuple[ndarray, ndarray]) – スピンαCIストリングとスピンβCIストリングの配列のペア(strings_a, strings_b)で、そのデカルト積が対角化を行う部分空間の基底を与える。
-
one_body_tensor (ndarray) – ハミルトニアンの1体テンソル。
-
two_body_tensor (ndarray) – ハミルトニアンの2体テンソル。
-
norb (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)
ハミルトニアンを部分空間で対角化する。
パラメーター
-
ci_strings (list[tuple[ndarray, ndarray]]) – スピンαCI文字列とスピンβCI文字列の配列のペア(strings_a, strings_b)のリストで、そのデカルト積が対角化を行う部分空間の基底を与える。
-
one_body_tensor (ndarray) – ハミルトニアンの1体テンソル。
-
two_body_tensor (ndarray) – ハミルトニアンの2体テンソル。
-
norb (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)
軌道を最適化して、最小の基底状態を作り出す。
このプロセスでは、3つのステップを繰り返す:
** num_iters :**
- 積分をパラメータに対して回転させる、
k_flat - 基底状態のエネルギーと波動関数の振幅を対角化して近似する
- 勾配降下法とステップ2で求めた波動関数振幅を用いて、
k_flatを最適化する
参照 項 II A 4 この軌道最適化技術に関するより詳細な議論については、こちらを参照されたい。
パラメーター
-
bitstring_matrix (tuple[ndarray, ndarray] | ndarray) –
ハミルトニアンが投影され対角化される部分空間を定義するコンフィギュレーションのセット。
これは2つの方法で指定できる:
- ビット列行列:
bool値の 2Dnumpy.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]))
戻りの型
rotate_integrals
rotate_integrals(hcore, eri, k_flat)
積分に対して相似変換を行う。
変身は次のように説明される:
k_flat から と が生成され、1体積分と2体積分に適用される方法の詳細については、 Sec. II A 4.
パラメーター
- hcore (ndarray) – 単電子積分を表すコア・ハミルトン行列
- eri (ndarray) – 二電子積分を表す電子反発積分
- k_flat (ndarray) – 1D 軌道変換を定義する配列、
K。 この配列は、対角線を除いた対称変換演算子の上三角形を行長順に指定する。
戻り値
- 回転したコアのハミルトニアン行列
- 回転したERI行列
戻りの型