Source code for pbparam.optimisers.base_optimiser

#
# Base optimiser class
#

import pybamm


[docs] class BaseOptimiser(object): """ Optimise an optimisation problem. Parameters ---------- method : str, optional The method to use for optimisation, specific to each optimiser """ def __init__(self): # Defaults, can be overwritten by specific optimisers self.name = "Base optimiser" self.single_variable = False self.global_optimiser = False
[docs] def optimise( self, optimisation_problem, x0=None, bounds=None, pybamm_logging_level=None ): """ Optimise the optimisation problem. Parameters ---------- optimisation_problem : :class:`pbparam.OptimisationProblem` The optimisation problem to be optimised. x0 : numpy array (optional) The initial guesses for the optimisation. bounds : list of tuples (optional) The bounds for the optimisation. pybamm_logging_level : str, optional The logging level to use when running the PyBaMM simulations. If None, it defaults to "ERROR" Returns ------- result : :class:`OptimisationResult` object. The results of the optimisation. """ # Setup cost function which resets simulation.solve.integrator_specs # Otherwise the multiprocessing will fail optimisation_problem.setup_objective_function() # Change logging level old_logging_level = pybamm.logger.level if pybamm_logging_level: pybamm.set_logging_level(pybamm_logging_level) else: pybamm.set_logging_level("ERROR") self.x0 = x0 or optimisation_problem.x0 self.bounds = bounds or optimisation_problem.bounds result = self._run_optimiser(optimisation_problem, self.x0, self.bounds) # Restore original logging level pybamm.set_logging_level(old_logging_level) return result
def _run_optimiser(self, optimisation_problem, x0, bounds): """ Run the optimiser. It is implemented in subclasses. """ pass