def _iterate(self, param: parametrization.Parametrization, iteration: int) -> None: """Run the optimization. This function actually runs the optimization. Args: param: Parametrization to use to run. """ iter_num = iteration # Make a callback function for the optimization that logs the data. def _callback(_) -> None: nonlocal iter_num # Increase iteration count. iter_num += 1 # Log the data. transformation_state = { ScipyOptimizer.EVENT_ITERATION: iter_num, ScipyOptimizer.EVENT_STATE: ScipyOptimizer.EVENT_STATE_OPTIMIZING } self.logger.write( event=transformation_state, param=param, monitor_list=self.monitor_lists.callback_monitors) # Run optimization. opt_options = self.optimization_options.to_native() # If restoring, decrease maximum number of iterations based on # number of iterations already performed. if "maxiter" in opt_options: opt_options["maxiter"] -= iteration scipy_optimizer = optim.ScipyOptimizer(method=self.optimizer, options=opt_options) if self.monitor_lists.callback_monitors: scipy_optimizer(opt=self._opt_prob, param=param, callback=_callback) else: scipy_optimizer(opt=self._opt_prob, param=param)
def fit2eps(self, eps_bg, S, eps): from spins.invdes.problem import Fit2Eps, OptimizationProblem import spins.invdes.optimization as optim # make objective obj = Fit2Eps(eps_bg, S, eps) obj = OptimizationProblem(obj) # optimize continuous opt_cont = optim.ScipyOptimizer( method='L-BFGS-B', options={ 'maxiter': 200, 'maxcor': 10 }) iter_num = 0 def callback(_): nonlocal iter_num iter_num += 1 opt_cont(obj, self, callback=callback)