Encontrar energías de estado excitado usando el NumPyEigensolver#

Para garantizar que se encuentren estados excitados físicamente significativos de un Hamiltoniano al usar NumPyEigensolver, es necesario configurar el atributo filter_criterion del solucionador.

Las subclases de BaseProblem en Qiskit Nature proporcionan el método get_default_filter_criterion() que proporciona una implementación predeterminada de dicho criterio de filtro para casos comunes.

A continuación te mostramos cómo puedes utilizar esta configuración.

  1. Obtenemos un ElectronicStructureProblem que queremos resolver:

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. Configuramos nuestro QubitMapper:

from qiskit_nature.second_q.mappers import JordanWignerMapper
mapper = JordanWignerMapper()
  1. Configuramos nuestro NumPyEigensolver:

from qiskit_algorithms import NumPyEigensolver
algo = NumPyEigensolver(k=100)
algo.filter_criterion = problem.get_default_filter_criterion()
  1. Encapsulamos todo en un ExcitedStatesEigensolver:

from qiskit_nature.second_q.algorithms import ExcitedStatesEigensolver
solver = ExcitedStatesEigensolver(mapper, algo)
  1. Resolvemos el problema:

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