(最小) EigensolverFactory マイグレーション・ガイド#

MinimumEigensolverEigensolver オブジェクトの構築に使われるすべてのファクトリー・クラスは、Qiskit Nature バージョン0.6で非推奨になりました。

QisKit Natureでこれらのアルゴリズムを適切にセットアップする方法に関する改善されたドキュメンテーションの利点は、時間の経過とともに減少しています。 これらのクラスで提供されていたものと同じ機能を実現する方法を詳述した適切な ハウツーガイド を以下に見つけることができます。以下の表は、ファクトリー・クラスを置き換えるステップを探す必要がある場所をまとめています。

Table 1 (最小) EigensolverFactory の代替#

レガシー・クラス

ハウツーガイド

NumPyEigensolverFactory

NumPyEigensolverで励起状態エネルギーを見つける

NumPyMinimumEigensolverFactory

NumPyMinimumEigensolverで基底状態エネルギーを見つける

VQEUCCFactory

VQEとUCCのようなansatzを使用する

VQEUVCCFactory

VQEとUVCCのようなansatzを使用する

これらのガイドへの移行を容易にするために、 VQEUCCFactory の例と、 NumPyEigensolverFactory の例を以下に示します。

セットアップ#

以下の例では、 PySCFDriver から取得できる単純な ElectronicStructureProblem が必要です:

from qiskit_nature.second_q.drivers import PySCFDriver
from qiskit_nature.second_q.mappers import ParityMapper

driver = PySCFDriver(atom="H 0 0 0; H 0 0 0.735")
problem = driver.run()

hamiltonian = problem.hamiltonian.second_q_op()

mapper = ParityMapper(num_particles=problem.num_particles)

qubit_op = mapper.map(hamiltonian)
aux_ops = {}
aux_ops.update(mapper.map(problem.properties.particle_number.second_q_ops()))
aux_ops.update(mapper.map(problem.properties.angular_momentum.second_q_ops()))

VQEUCCFactory#

古い方法:

from qiskit.algorithms.optimizers import SLSQP
from qiskit.primitives import Estimator
from qiskit_nature.second_q.circuit.library import UCCSD
from qiskit_nature.second_q.algorithms import VQEUCCFactory

solver_factory = VQEUCCFactory(Estimator(), UCCSD(), SLSQP())

solver = solver_factory.get_solver(problem, mapper)

result = solver.compute_minimum_eigenvalue(qubit_op, aux_ops)
print(f"Eigenvalue = {result.eigenvalue: .6f}")
Eigenvalue = -1.857275

対応する新しい方法:

from qiskit.algorithms.minimum_eigensolvers import VQE
from qiskit.algorithms.optimizers import SLSQP
from qiskit.primitives import Estimator
from qiskit_nature.second_q.circuit.library import HartreeFock, UCCSD
from qiskit_nature.second_q.algorithms.initial_points import HFInitialPoint

ansatz = UCCSD(
    problem.num_spatial_orbitals,
    problem.num_particles,
    mapper,
    initial_state=HartreeFock(
        problem.num_spatial_orbitals,
        problem.num_particles,
        mapper,
    ),
)

initial_point = HFInitialPoint()
initial_point.ansatz = ansatz
initial_point.problem = problem

solver = VQE(Estimator(), ansatz, SLSQP())
solver.initial_point = initial_point.to_numpy_array()

result = solver.compute_minimum_eigenvalue(qubit_op, aux_ops)
print(f"Eigenvalue = {result.eigenvalue: .6f}")
Eigenvalue = -1.857275

NumPyEigensolverFactory#

古い方法:

from qiskit_nature.second_q.algorithms import NumPyEigensolverFactory

solver_factory = NumPyEigensolverFactory(
    k=10,
    use_default_filter_criterion=True,
)

solver = solver_factory.get_solver(problem)

result = solver.compute_eigenvalues(qubit_op, aux_ops)

for idx, eigenvalue in enumerate(result.eigenvalues):
    print(f"{idx}: {eigenvalue: .6f}")
0: -1.857275
1: -0.882722
2: -0.224911

対応する新しい方法:

from qiskit.algorithms.eigensolvers import NumPyEigensolver

solver = NumPyEigensolver(k=10)
solver.filter_criterion = problem.get_default_filter_criterion()

result = solver.compute_eigenvalues(qubit_op, aux_ops)

for idx, eigenvalue in enumerate(result.eigenvalues):
    print(f"{idx}: {eigenvalue: .6f}")
0: -1.857275
1: -0.882722
2: -0.224911