(最小) EigensolverFactory マイグレーション・ガイド#
MinimumEigensolver
や Eigensolver
オブジェクトの構築に使われるすべてのファクトリー・クラスは、Qiskit Nature バージョン0.6で非推奨になりました。
QisKit Natureでこれらのアルゴリズムを適切にセットアップする方法に関する改善されたドキュメンテーションの利点は、時間の経過とともに減少しています。 これらのクラスで提供されていたものと同じ機能を実現する方法を詳述した適切な ハウツーガイド を以下に見つけることができます。以下の表は、ファクトリー・クラスを置き換えるステップを探す必要がある場所をまとめています。
レガシー・クラス |
ハウツーガイド |
---|---|
|
|
|
|
|
|
|
これらのガイドへの移行を容易にするために、 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