Source code for kona.algorithms.base_algorithm

import sys

from kona.options import get_opt

[docs]class OptimizationAlgorithm(object): """ Base class for all optimization algorithms. Parameters ---------- primal_factory, state_factory, eq_factory, ineq_factory : VectorFactory optns : dict, optional Attributes ---------- primal_factory : :class:`~kona.linalg.memory.VectorFactory` Generates primal vectors. state_factory : :class:`~kona.linalg.memory.VectorFactory` Generates state vectors. eq_factory : :class:`~kona.linalg.memory.VectorFactory` Generates dual vectors for equality constraints. eq_factory : :class:`~kona.linalg.memory.VectorFactory` Generates dual vectors for inequality constraints. max_iter : int Maximum nonlinear iterations for the optimization. primal_tol : float Relative convergence tolerance for the primal variables. constraint_tol : float, optional Relative convergence tolerance for the constraints. info_file : file File stream for data output. """ def __init__(self, primal_factory, state_factory, eq_factory, ineq_factory, optns=None): # set up vector factories self.primal_factory = primal_factory self.state_factory = state_factory self.eq_factory = eq_factory self.ineq_factory = ineq_factory # create empty options dict if optns is None: self.optns = {} else: assert type(optns) is dict, "Invalid options! Must be a dictionary." self.optns = optns # set up max iterations and primal tolerance for convergence self.max_iter = get_opt(self.optns, 100, 'max_iter') self.primal_tol = get_opt(self.optns, 1e-6, 'opt_tol') self.cnstr_tol = get_opt(self.optns, 1e-6, 'feas_tol') # set up the info file self.info_file = get_opt(self.optns, sys.stdout, 'info_file') if isinstance(self.info_file, str): self.info_file = self.primal_factory._memory.open_file( self.info_file) # set up the hist file self.hist_file = get_opt(self.optns, 'kona_hist.dat', 'hist_file') if isinstance(self.hist_file, str): self.hist_file = self.primal_factory._memory.open_file( self.hist_file)
[docs] def solve(self): """ Triggers the optimization run. """ raise NotImplementedError # pragma: no cover