NumPyEigensolver を使用して、励起状態のエネルギーを検索します。#

NumPyEigensolver クラスを使用して物理的に意味のあるハミルトニアンの励起状態を確実に見つけるためには、ソルバーの filter_criterion 属性を設定する必要があります。

BaseProblem の Qiskit ネーチャーのサブクラスは、 get_default_filter_criterion() メソッドを提供します。このメソッドは、一般的に遭遇するケースに対するフィルター基準のデフォルト実装を提供します。

以下に、この設定を使用する方法を示します。

  1. 解決したい :class:`~qiskit_nature.second_q.problems.natures.ElectronicStructureProblem 『 クラスを取得します。

from qiskit_nature.second_q.drivers import PySCFDriver
driver = PySCFDriver(atom="H 0 0 0; H 0 0 0.735", basis="sto-3g")
problem = driver.run()
  1. QubitMapper をセットアップします:

from qiskit_nature.second_q.mappers import JordanWignerMapper
mapper = JordanWignerMapper()
  1. NumPyEigensolver をセットアップします:

from qiskit_algorithms import NumPyEigensolver
algo = NumPyEigensolver(k=100)
algo.filter_criterion = problem.get_default_filter_criterion()
  1. ExcitedStatesEigensolver ですべてをラップします。

from qiskit_nature.second_q.algorithms import ExcitedStatesEigensolver
solver = ExcitedStatesEigensolver(mapper, algo)
  1. 問題を解きます:

result = solver.solve(problem)

print(f"Total ground state energy = {result.total_energies[0]:.4f}")
print(f"Total first excited state energy = {result.total_energies[1]:.3f}")
print(f"Total second excited state energy = {result.total_energies[2]:.3f}")
Total ground state energy = -1.1373
Total first excited state energy = -0.163
Total second excited state energy = 0.495