def __init__(self,
              criterion,
              x0=None,
              step=default_step,
              line_search=default_line_search,
              stop_criterion=default_stop_criterion):
     self.criterion = criterion
     self.n_variables = criterion.n_variables
     self.step = step
     self.line_search = line_search
     self.stop_criterion = stop_criterion
     self.first_guess()
     self.optimizer = StandardOptimizer(function=self.criterion,
                                        step=self.step,
                                        line_search=self.line_search,
                                        criterion=self.stop_criterion,
                                        x0=self.current_solution)
     self.optimizer.recordHistory = self.callback
class Optimizer(object):
    def __init__(self,
                 criterion,
                 x0=None,
                 step=default_step,
                 line_search=default_line_search,
                 stop_criterion=default_stop_criterion):
        self.criterion = criterion
        self.n_variables = criterion.n_variables
        self.step = step
        self.line_search = line_search
        self.stop_criterion = stop_criterion
        self.first_guess()
        self.optimizer = StandardOptimizer(function=self.criterion,
                                           step=self.step,
                                           line_search=self.line_search,
                                           criterion=self.stop_criterion,
                                           x0=self.current_solution)
        self.optimizer.recordHistory = self.callback

    def callback(self, **kwargs):
        state = self.optimizer.state
        iter_ = state['iteration']
        crit = state['new_value']
        step = state['alpha_step']
        if state['iteration'] == 0:
            print("Iteration \t Step \t \Criterion")
        print("\t%i \t %e \t %e" % (iter_, step, crit))

    def first_guess(self, x0=None):
        """
        Sets current_solution attribute to initial value.
        """
        if x0 is None:
            self.current_solution = np.zeros(self.n_variables)
        else:
            self.current_solution = copy(x0)

    def iterate(self):
        self.optimizer.iterate()

    def __call__(self):
        self.optimizer.optimize()
class Optimizer(object):
    def __init__(self, criterion,
                 x0=None,
                 step=default_step,
                 line_search=default_line_search,
                 stop_criterion=default_stop_criterion):
        self.criterion = criterion
        self.n_variables = criterion.n_variables
        self.step = step
        self.line_search = line_search
        self.stop_criterion = stop_criterion
        self.first_guess()
        self.optimizer = StandardOptimizer(function=self.criterion,
                                           step=self.step,
                                           line_search=self.line_search,
                                           criterion=self.stop_criterion,
                                           x0=self.current_solution)
        self.optimizer.recordHistory = self.callback
    def callback(self, **kwargs):
        state = self.optimizer.state
        iter_ = state['iteration']
        crit = state['new_value']
        step = state['alpha_step']
        if state['iteration'] == 0:
            print("Iteration \t Step \t \Criterion")
        print("\t%i \t %e \t %e" % (iter_, step, crit))
    def first_guess(self, x0=None):
        """
        Sets current_solution attribute to initial value.
        """
        if x0 is None:
            self.current_solution = np.zeros(self.n_variables)
        else:
            self.current_solution = copy(x0)
    def iterate(self):
        self.optimizer.iterate()
    def __call__(self):
        self.optimizer.optimize()
 def __init__(self, criterion,
              x0=None,
              step=default_step,
              line_search=default_line_search,
              stop_criterion=default_stop_criterion):
     self.criterion = criterion
     self.n_variables = criterion.n_variables
     self.step = step
     self.line_search = line_search
     self.stop_criterion = stop_criterion
     self.first_guess()
     self.optimizer = StandardOptimizer(function=self.criterion,
                                        step=self.step,
                                        line_search=self.line_search,
                                        criterion=self.stop_criterion,
                                        x0=self.current_solution)
     self.optimizer.recordHistory = self.callback