L_BFGS<FunctionType>::L_BFGS(FunctionType& function, const size_t numBasis, const size_t maxIterations, const double armijoConstant, const double wolfe, const double minGradientNorm, const size_t maxLineSearchTrials, const double minStep, const double maxStep) : function(function), numBasis(numBasis), maxIterations(maxIterations), armijoConstant(armijoConstant), wolfe(wolfe), minGradientNorm(minGradientNorm), maxLineSearchTrials(maxLineSearchTrials), minStep(minStep), maxStep(maxStep) { // Get the dimensions of the coordinates of the function; GetInitialPoint() // might return an arma::vec, but that's okay because then n_cols will simply // be 1. const size_t rows = function.GetInitialPoint().n_rows; const size_t cols = function.GetInitialPoint().n_cols; newIterateTmp.set_size(rows, cols); s.set_size(rows, cols, numBasis); y.set_size(rows, cols, numBasis); // Allocate the pair holding the min iterate information. minPointIterate.first.zeros(rows, cols); minPointIterate.second = std::numeric_limits<double>::max(); }
SA<FunctionType, CoolingScheduleType>::SA( FunctionType& function, CoolingScheduleType& coolingSchedule, const size_t maxIterations, const double initT, const size_t initMoves, const size_t moveCtrlSweep, const double tolerance, const size_t maxToleranceSweep, const double maxMoveCoef, const double initMoveCoef, const double gain) : function(function), coolingSchedule(coolingSchedule), maxIterations(maxIterations), temperature(initT), initMoves(initMoves), moveCtrlSweep(moveCtrlSweep), tolerance(tolerance), maxToleranceSweep(maxToleranceSweep), gain(gain) { const size_t rows = function.GetInitialPoint().n_rows; const size_t cols = function.GetInitialPoint().n_cols; maxMove.set_size(rows, cols); maxMove.fill(maxMoveCoef); moveSize.set_size(rows, cols); moveSize.fill(initMoveCoef); }