Qiskit Optimization v0.6 移行ガイド#

このチュートリアルでは、コードを Qiskit Optimization v0.5 から v0.6 へマイグレーションするプロセスをガイドします。

概要#

Qiskit Terra v0.25では qiskit.algorithms モジュールが廃止されました。これは新しいスタンドアロンライブラリー Qiskit Algorithms に取って代わられました。

Qiskit Optimization v0.6は、Qiskit Algorithmsの新しいアルゴリズムのみをサポートしています。

この移行ガイドでは、新しいQiskit Algorithmsの詳細な説明を提供する意図はありません。代わりにQiskit Algorithmsドキュメントの 対応するリソース を読むことをお勧めします。

基本的には、 qiskit.algorithmsqiskit_algorithms に置き換えることで、既存のコードを利用することができます。

MinimumEigenOptimizer#

以前のアルゴリズムは qiskit.algorithms.minimum_eigensolvers に存在します。一方、新しいアルゴリズムは qiskit_algorithms.minimum_eigensolvers に存在し、 qiskit_algorithms.* でアクセスできます。

Qiskit Optimization の MinimumEigenOptimizer は、新アルゴリズムの qiskit_algorithms.SamplingMinimumEigensolver インターフェースを使用できます。 MinimumEigenOptimizer は基本的に新アルゴリズムの qiskit_algorithms.MinimumEigensolver を扱えないことに注意してください。しかし、例外があります。 MinimumEigenOptimizerqiskit_algorithms.NumPyMinimumEigensolver を扱うことができます。なぜなら qiskit_algorithms.NumPyMinimumEigensolver には固有状態にアクセスできる拡張機能があるからです。

対応する表を以下に示します。

以前のアルゴリズム

新しいアルゴリズム

qiskit.algorithms.minimum_eigensolvers.SamplingMinimumEigensolver

qiskit_algorithms.SamplingMinimumEigensolver

qiskit.algorithms.minimum_eigensolver.NumPyMinimumEigensolver

qiskit_algorithms.NumPyMinimumEigensolver

qiskit.algorithms.minimum_eigensolvers.QAOA

qiskit_algorithms.QAOA

qiskit.algorithms.minimum_eigensolvers.SamplingVQE

qiskit_algorithms.SamplingVQE

NumPyMinimumEigensolver#

以前

from qiskit.algorithms.minimum_eigensolvers import NumPyMinimumEigensolver

from qiskit_optimization.algorithms import MinimumEigenOptimizer

mes = NumPyMinimumEigensolver()
meo = MinimumEigenOptimizer(min_eigen_solver=mes)
result = meo.solve(problem)
print(result)

新規

from qiskit_algorithms import NumPyMinimumEigensolver

from qiskit_optimization.algorithms import MinimumEigenOptimizer

mes = NumPyMinimumEigensolver()
meo = MinimumEigenOptimizer(min_eigen_solver=mes)
result = meo.solve(problem)
print(result)

QAOA#

以前

from qiskit.algorithms.minimum_eigensolvers import QAOA
from qiskit.algorithms.optimizers import COBYLA
from qiskit.primitives import Sampler

from qiskit_optimization.algorithms import MinimumEigenOptimizer

shots = 1000
mes = QAOA(sampler=Sampler(), optimizer=COBYLA())
meo = MinimumEigenOptimizer(min_eigen_solver=mes)
result = meo.solve(problem)
print(result)

新規

from qiskit_algorithms import QAOA
from qiskit_algorithms.optimizers import COBYLA
from qiskit.primitives import Sampler

from qiskit_optimization.algorithms import MinimumEigenOptimizer

shots = 1000
mes = QAOA(sampler=Sampler(), optimizer=COBYLA())
meo = MinimumEigenOptimizer(min_eigen_solver=mes)
result = meo.solve(problem)
print(result)

SamplingVQE#

以前

from qiskit.algorithms.minimum_eigensolvers import SamplingVQE
from qiskit.algorithms.optimizers import COBYLA
from qiskit.circuit.library import RealAmplitudes
from qiskit.primitives import Sampler

from qiskit_optimization.algorithms import MinimumEigenOptimizer

mes = SamplingVQE(sampler=Sampler(), ansatz=RealAmplitudes(), optimizer=COBYLA())
meo = MinimumEigenOptimizer(min_eigen_solver=mes)
result = meo.solve(problem)
print(result)

新規

from qiskit_algorithms import SamplingVQE
from qiskit_algorithms.optimizers import COBYLA
from qiskit.circuit.library import RealAmplitudes
from qiskit.primitives import Sampler

from qiskit_optimization.algorithms import MinimumEigenOptimizer

mes = SamplingVQE(sampler=Sampler(), ansatz=RealAmplitudes(), optimizer=COBYLA())
meo = MinimumEigenOptimizer(min_eigen_solver=mes)
result = meo.solve(problem)
print(result)

WarmStartQAOAOptimizer#

以前

from qiskit.algorithms.minimum_eigensolvers import QAOA
from qiskit.algorithms.optimizers import COBYLA
from qiskit.primitives import Sampler

from qiskit_optimization.algorithms import WarmStartQAOAOptimizer, SlsqpOptimizer

qaoa = QAOA(sampler=Sampler(), optimizer=COBYLA())
optimizer = WarmStartQAOAOptimizer(
    pre_solver=SlsqpOptimizer(), relax_for_pre_solver=True, qaoa=qaoa, epsilon=0.25
)
result = optimizer.solve(problem)
print(result)

新規

from qiskit_algorithms import QAOA
from qiskit_algorithms.optimizers import COBYLA
from qiskit.primitives import Sampler

from qiskit_optimization.algorithms import WarmStartQAOAOptimizer, SlsqpOptimizer

qaoa = QAOA(sampler=Sampler(), optimizer=COBYLA())
optimizer = WarmStartQAOAOptimizer(
    pre_solver=SlsqpOptimizer(), relax_for_pre_solver=True, qaoa=qaoa, epsilon=0.25
)
result = optimizer.solve(problem)
print(result)

GroverOptimizer#

以前

from qiskit.algorithms.optimizers import COBYLA
from qiskit.primitives import Sampler

from qiskit_optimization.algorithms import GroverOptimizer

optimizer = GroverOptimizer(num_value_qubits=3, num_iterations=3, sampler=Sampler())
result = optimizer.solve(problem)
print(result)

新規

from qiskit_algorithms.optimizers import COBYLA
from qiskit.primitives import Sampler

from qiskit_optimization.algorithms import GroverOptimizer

optimizer = GroverOptimizer(num_value_qubits=3, num_iterations=3, sampler=Sampler())
result = optimizer.solve(problem)
print(result)