Cost function#

変分法を解く際、target_moleculeで設定されたスピン状態に関する値や電子数などに対して、制約を課して量子状態を計算します。 具体的には以下のような場面で有用です。

  • 分子の基底/励起状態の電子数が保存する制約条件を課したい

  • 特定のスピン量子数を持つ励起状態のエネルギー準位を求めたい

  • 下のエネルギー準位にある全ての固有状態と直交する励起状態を求めたい

Type#

以下の手法が選択可能です。

  • NONE: エネルギーのみをコスト関数に取ります。 (デフォルト)

  • SIMPLE: 以下のようにペナルティー項をかけたコスト関数を取ります。

以下の式で表すように、コスト関数にペナルティー項 \(\mathcal{L}_{\mathrm{penalty}}\) を足すことで量子状態のスピン量子数や電子数に制約条件を課します。

\[\mathcal{L}_{\mathrm{cost}} = \mathcal{L}_{\mathrm{energy}} + \mathcal{L}_{\mathrm{penalty}} = \langle\psi(\vec{\theta})| H |\psi(\vec{\theta})\rangle + \sum_i w_i \langle\psi(\vec{\theta})| ( \hat{O}_i - o_i )^2 |\psi(\vec{\theta})\rangle\]

ただし、\(w_i\)はペナルティー項の重み、\(\hat{O}_i\) は制約条件を課す物理量の演算子、\(o_i\)\(\langle \hat{O}_i \rangle\)がとるべき値です。

共通オプション#

solver で以下の手法

  • VQE

  • SSVQE

  • MCVQE

  • VQD

が選択された際に共通するオプションは以下です。

  • s2_number_weight: \(\langle \hat{S}^2 \rangle\) の制約条件に与える重みの値 \(w_i\)

  • sz_number_weight: \(\langle \hat{S}_z \rangle\) の制約条件に与える重みの値 \(w_i\)

  • particle_number_weight: 電子数 \(\langle \hat{N}_{tot} \rangle\) の制約条件に与える重みの値 \(w_i\)

入力例#

"cost_function": {
    "type": "SIMPLE",
    "s2_number_weight": 10,
    "sz_number_weight": 10,
    "particle_number_weight": 10
}

SSVQEのオプション#

solverSSVQE が選択された時のオプション:

  • SSVQE_weights

これは下の式で表される SSVQE アルゴリズムのコスト関数 \(\mathcal{L}_{\mathrm{energies}}\) に加算される際の重みの値 \(w_i\) です。 (ただし、{\(|\psi_0(\vec{\theta})\rangle, ..., |\psi_{k-1}(\vec{\theta})\rangle\)}は互いに直交な量子状態)

\[\mathcal{L}_{\mathrm{cost}} = \mathcal{L}_{\mathrm{energies}} + \mathcal{L}_{\mathrm{penalty}} = \sum_{i} w_{i} \langle\psi_{i}(\vec{\theta})|H|\psi_{i}(\vec{\theta})\rangle + \mathcal{L}_{\mathrm{penalty}}\]

入力例#

"cost_function": {
    "type": "SIMPLE",
    "SSVQE_weights": [4.0, 1.0]
}

VQDのオプション#

solverVQD が選択された時のオプション:

  • overlap_weights

  • overlap_weight

overlap_weightsoverlap_weight はどちらかを設定します。

これは下の式で表される VQD アルゴリズムのコスト関数に加算される波動関数の重なりに対するペナルティー項 \(\mathcal{L}_{\mathrm{overlap}}\) の重みの値 \(w_i\) です。 (ただし, \(\psi_{i}(\vec{\theta_i}\)) は \(k\) より下の準位の固有状態)

\[\mathcal{L}_{\mathrm{cost}} = \mathcal{L}_{\mathrm{energy}} + \mathcal{L}_{\mathrm{overlap}} + \mathcal{L}_{\mathrm{penalty}} = \langle\psi_{k}(\vec{\theta_k})|H|\psi_{k}(\vec{\theta_k})\rangle + \sum^{k-1}_{i} w_{i} \left| \langle\psi_{i}(\vec{\theta_i})|\psi_{k}(\vec{\theta_k})\rangle \right|^2 + \mathcal{L}_{\mathrm{penalty}}\]

overlap_weights を設定する場合は、求める励起状態の数と同じ数の要素を持ったリストで入力します。 overlap_weight を設定する場合は重みの値を1つ入力します。この際、各状態の重なりに対するペナルティー項の重みの値は全て入力された値が用いられます。

入力例#

"cost_function": {
    "type": "SIMPLE",
    "overlap_weights": [4.0, 1.0]
}
"cost_function": {
    "type": "SIMPLE",
    "overlap_weight": 4.0
}