diff --git a/optimize.cc b/optimize.cc index f0c843e..daf015a 100644 --- a/optimize.cc +++ b/optimize.cc @@ -1149,7 +1149,7 @@ for(; budget; ++st.iter) A=J.transposedtimes(); g=r*J; for(int i=0; i &)A)(i,i); - mu*= std::max((T)1/3,1-std::pow(2*rho-1,3)); + mu*= std::max((T)1/3,1-std::pow(2*rho-1,(T)3)); nu=2; st.step(fold-f,h.norm()); } @@ -2045,29 +2045,33 @@ return firstorder_minimize("SPSA",stepper,o,x,hp,achieved,&est); //force instantiation -template double linesearch_wolfe(optevaluator &e, NRVec &x, double &f, NRVec &g, const NRVec &p, const double alpha1, const linesearch_hyperparameters &lp); -template class optstate; -template class ParameterShift; -template class FiniteDifference; -template class FrozenOptProblem; -template class BFGS_Optimizer; -template class LBFGS_Optimizer; -template class GDIIS_Optimizer; -template class TrustRegion_Optimizer; -template class PRFO_Optimizer; -template class LM_Optimizer; -template class OptLeastSquares; -template bool hessian_update(NRSMat &B, const NRVec &s, const NRVec &y, const TR_hessian type, const double thr); -template class CG_Optimizer; -template class NelderMead_Optimizer; -template class Powell_Optimizer; -template class Rotosolve_Optimizer; -template class Cobyla_Optimizer; -template class SGD_Optimizer; -template class QNG_Optimizer; -template class Adam_Optimizer; -template class SPSA_Optimizer; -template double linemin_brent(optevaluator &e, NRVec &x, double &f, const NRVec &u, const double t1, const double tol, const double abstol, const int maxiter, const int verbose); +#define INSTANTIZE(T) \ +template T linesearch_wolfe(optevaluator &e, NRVec &x, T &f, NRVec &g, const NRVec &p, const T alpha1, const linesearch_hyperparameters &lp); \ +template class optstate; \ +template class ParameterShift; \ +template class FiniteDifference; \ +template class FrozenOptProblem; \ +template class BFGS_Optimizer; \ +template class LBFGS_Optimizer; \ +template class GDIIS_Optimizer; \ +template class TrustRegion_Optimizer; \ +template class PRFO_Optimizer; \ +template class LM_Optimizer; \ +template class OptLeastSquares; \ +template bool hessian_update(NRSMat &B, const NRVec &s, const NRVec &y, const TR_hessian type, const T thr); \ +template class CG_Optimizer; \ +template class NelderMead_Optimizer; \ +template class Powell_Optimizer; \ +template class Rotosolve_Optimizer; \ +template class Cobyla_Optimizer; \ +template class SGD_Optimizer; \ +template class QNG_Optimizer; \ +template class Adam_Optimizer; \ +template class SPSA_Optimizer; \ +template T linemin_brent(optevaluator &e, NRVec &x, T &f, const NRVec &u, const T t1, const T tol, const T abstol, const int maxiter, const int verbose); \ + +INSTANTIZE(double) + }//namespace