Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)