Eigen::VectorXd operator()(const F& f, const Eigen::VectorXd& init, bool bounded) const { tools::par::init(); typedef std::pair<Eigen::VectorXd, double> pair_t; auto body = [&](int i) { // clang-format off Eigen::VectorXd r_init = tools::random_vector(init.size()); Eigen::VectorXd v = Optimizer()(f, init, bounded); double lik = opt::eval(f, v); return std::make_pair(v, lik); // clang-format on }; auto comp = [](const pair_t& v1, const pair_t& v2) { // clang-format off return v1.second > v2.second; // clang-format on }; pair_t init_v = std::make_pair(init, -std::numeric_limits<float>::max()); auto m = tools::par::max(init_v, Params::opt_parallelrepeater::repeats(), body, comp); return m.first; };
Eigen::VectorXd operator()(const F& f, const Eigen::VectorXd& init, bool bounded) const { return Chained<Params, Optimizers...>::operator()(f, Optimizer()(f, init, bounded), bounded); };
Eigen::VectorXd operator()(const F& f, const Eigen::VectorXd& init, bool bounded) const { return Optimizer()(f, init, bounded); };