Guía de Migración de Qiskit Optimization v0.6#

Este tutorial te guiará a través del proceso de migración de tu código de Qiskit Optimization v0.5 a v0.6.

Descripción General#

Qiskit Terra v0.25 obsoletizó el módulo qiskit.algorithms. Ha sido reemplazado por una nueva biblioteca independiente Qiskit Algorithms.

Qiskit Optimization v0.6 solo admite los nuevos algoritmos de Qiskit Algorithms.

No es la intención proporcionar explicaciones detalladas de los nuevos Qiskit Algorithms en esta guía de migración. Te sugerimos que leas los recursos correspondientes de la documentación de Qiskit Algorithms en su lugar.

Básicamente podemos usar los códigos existentes reemplazando qiskit.algorithms con qiskit_algorithms.

MinimumEigenOptimizer#

Los algoritmos anteriores existen en qiskit.algorithms.minimum_eigensolvers. Por otro lado, los nuevos algoritmos existen en qiskit_algorithms.minimum_eigensolvers y podemos acceder a ellos mediante qiskit_algorithms.*.

MinimumEigenOptimizer de Qiskit Optimization puede usar la interfaz qiskit_algorithms.SamplingMinimumEigensolver de los nuevos algoritmos. Ten en cuenta que MinimumEigenOptimizer básicamente no puede manejar qiskit_algorithms.MinimumEigensolver de los nuevos algoritmos. Pero hay una excepción. MinimumEigenOptimizer puede manejar qiskit_algorithms.NumPyMinimumEigensolver porque qiskit_algorithms.NumPyMinimumEigensolver tiene una extensión que permite a los usuarios acceder a los estados propios.

La siguiente es la tabla correspondiente.

Algoritmo anterior

Algoritmo nuevo

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#

Previamente

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)

Nuevo

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#

Previamente

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)

Nuevo

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#

Previamente

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)

Nuevo

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#

Previamente

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)

Nuevo

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#

Previamente

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)

Nuevo

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)