1 #ifndef STAN_SERVICES_OPTIMIZE_BFGS_HPP 2 #define STAN_SERVICES_OPTIMIZE_BFGS_HPP 53 template <
class Model>
55 unsigned int random_seed,
unsigned int chain,
66 std::vector<int> disc_vector;
67 std::vector<double> cont_vector
68 = util::initialize<false>(
model, init, rng, init_radius,
false,
71 std::stringstream bfgs_ss;
74 Optimizer
bfgs(model, cont_vector, disc_vector, &bfgs_ss);
83 double lp = bfgs.logp();
85 std::stringstream initial_msg;
86 initial_msg <<
"Initial log joint probability = " << lp;
87 logger.info(initial_msg);
89 std::vector<std::string>
names;
90 names.push_back(
"lp__");
91 model.constrained_param_names(names,
true,
true);
92 parameter_writer(names);
94 if (save_iterations) {
95 std::vector<double>
values;
96 std::stringstream
msg;
97 model.write_array(rng, cont_vector, disc_vector, values,
99 if (msg.str().length() > 0)
102 values.insert(values.begin(), lp);
103 parameter_writer(values);
111 || ((bfgs.
iter_num() + 1) % refresh == 0)))
123 bfgs.params_r(cont_vector);
127 || !bfgs.
note().empty()
129 || ((bfgs.
iter_num() + 1) % refresh == 0))) {
130 std::stringstream
msg;
131 msg <<
" " << std::setw(7) << bfgs.
iter_num() <<
" ";
132 msg <<
" " << std::setw(12) << std::setprecision(6)
134 msg <<
" " << std::setw(12) << std::setprecision(6)
136 msg <<
" " << std::setw(12) << std::setprecision(6)
137 << bfgs.
curr_g().norm() <<
" ";
138 msg <<
" " << std::setw(10) << std::setprecision(4)
139 << bfgs.
alpha() <<
" ";
140 msg <<
" " << std::setw(10) << std::setprecision(4)
142 msg <<
" " << std::setw(7)
143 << bfgs.grad_evals() <<
" ";
144 msg <<
" " << bfgs.
note() <<
" ";
148 if (bfgs_ss.str().length() > 0) {
149 logger.info(bfgs_ss);
153 if (save_iterations) {
154 std::vector<double>
values;
155 std::stringstream
msg;
156 model.write_array(rng, cont_vector, disc_vector, values,
159 if (msg.str().length() > 0)
162 values.insert(values.begin(), lp);
163 parameter_writer(values);
167 if (!save_iterations) {
168 std::vector<double>
values;
169 std::stringstream
msg;
170 model.write_array(rng, cont_vector, disc_vector, values,
172 if (msg.str().length() > 0)
174 values.insert(values.begin(), lp);
175 parameter_writer(values);
180 logger.info(
"Optimization terminated normally: ");
183 logger.info(
"Optimization terminated with error: ");
Scalar prev_step_size() const
const VectorT & curr_g() const
stan::optimization::BFGSMinimizer< stan::optimization::ModelAdaptor< Model >, stan::optimization::BFGSUpdate_HInv<> > Optimizer
const Scalar & alpha() const
const Scalar & alpha0() const
rosenbrock_model_namespace::rosenbrock_model Model
std::string get_code_string(int retCode)
chain
Check that an output directory exists.
LSOptions< Scalar > _ls_opts
ConvergenceOptions< Scalar > _conv_opts
const std::string & note() const
const size_t iter_num() const
int bfgs(Model &model, stan::io::var_context &init, unsigned int random_seed, unsigned int chain, double init_radius, double init_alpha, double tol_obj, double tol_rel_obj, double tol_grad, double tol_rel_grad, double tol_param, int num_iterations, bool save_iterations, int refresh, callbacks::interrupt &interrupt, callbacks::logger &logger, callbacks::writer &init_writer, callbacks::writer ¶meter_writer)
const XML_Char XML_Content * model
boost::ecuyer1988 create_rng(unsigned int seed, unsigned int chain)