Source code for openqaoa.optimizers.qaoa_optimizer

from .training_vqa import (
    ScipyOptimizer,
    CustomScipyGradientOptimizer,
    PennyLaneOptimizer,
)
from ..qaoa_components.variational_parameters.variational_baseparams import (
    QAOAVariationalBaseParams,
)
from ..backends.basebackend import VQABaseBackend


[docs]def available_optimizers(): """ Return a list of available optimizers. """ optimizers = { "scipy": ScipyOptimizer.SCIPY_METHODS, "custom_scipy_gradient": CustomScipyGradientOptimizer.CUSTOM_GRADIENT_OPTIMIZERS, "custom_scipy_pennylane": PennyLaneOptimizer.PENNYLANE_OPTIMIZERS, } return optimizers
[docs]def get_optimizer( vqa_object: VQABaseBackend, variational_params: QAOAVariationalBaseParams, optimizer_dict: dict, ): """ Initialise the specified optimizer class with provided method and optimizer-specific options Parameters ---------- vqa_object: Backend object of class VQABaseBackend which contains information on the backend used to perform computations, and the VQA circuit. variational_params: Object of class QAOAVariationalBaseParams, which contains information on the circuit to be executed, the type of parametrisation, and the angles of the VQA circuit. optimizer_dict: Optimizer information dictionary used to construct the optimizer with specified options Returns ------- optimizer: Optimizer object of type specified by specified method """ SUPPORTED_OPTIMIZERS = { "scipy": ScipyOptimizer, "custom_scipy_gradient": CustomScipyGradientOptimizer, "custom_scipy_pennylane": PennyLaneOptimizer, } method = optimizer_dict["method"].lower() optimizers = available_optimizers() method_valid = False for opt_class, methods in optimizers.items(): if method in methods: selected_class = opt_class method_valid = True assert method_valid, ValueError( f"Selected optimizer method '{method}' is not supported." f"Please choose from {available_optimizers()}" ) optimizer = SUPPORTED_OPTIMIZERS[selected_class]( vqa_object, variational_params, optimizer_dict ) return optimizer