114 if (program.get_n_weights() == 0)
118 auto init_weights = program.get_weights();
122 CFType cost_function(evaluator);
123 ceres::TinySolver<CFType> solver;
124 solver.options.max_num_iterations = 10;
126 typename decltype(solver)
::Parameters parameters = program.get_weights();
127 solver.Solve(cost_function, ¶meters);
140 bool costs_valid = !std::isnan(solver.summary.final_cost) &&
141 !std::isinf(solver.summary.final_cost) &&
142 !std::isnan(solver.summary.initial_cost) &&
143 !std::isinf(solver.summary.initial_cost);
145 bool weights_valid = parameters.allFinite();
147 if (costs_valid && weights_valid &&
148 solver.summary.final_cost < solver.summary.initial_cost)
150 program.set_weights(parameters);