25 #ifndef INCLUDED_ParamFindingRoutine_h_GUID_C2088279_D54B_4D8B_562E_5748C748DAD0 
   26 #define INCLUDED_ParamFindingRoutine_h_GUID_C2088279_D54B_4D8B_562E_5748C748DAD0 
   46     template <
typename TrackingReferenceType, 
typename ParamSet>
 
   47     void runOptimizer(MeasurementsRows 
const &data, 
bool costOnly,
 
   48                       OptimCommonData 
const &commonData, std::size_t maxRuns) {
 
   50         std::cout << 
"Max runs: " << maxRuns << std::endl;
 
   54         using ParamVec = Vec<ParamSet::Dimension>;
 
   55         ParamVec x = ParamSet::getInitialVec(commonData);
 
   57         std::cout << 
"Optimizing, respectively: " 
   58                   << ParamSet::getVecElementNames() << 
"\n";
 
   59         std::cout << 
"Initial vector:\n" 
   60                   << x.format(getFullFormat()) << std::endl;
 
   61         auto functor = [&](ParamVec 
const ¶mVec) -> 
double {
 
   62             ConfigParams params = commonData.initialParams;
 
   65             ParamSet::updateParamsFromVec(params, paramVec);
 
   67             auto optim = OptimData::make(params, commonData);
 
   69             MainAlgoUnderStudy mainAlgo;
 
   70             TrackingReferenceType ref;
 
   71             std::size_t samples = 0;
 
   75             for (
auto const &rowPtr : data) {
 
   76                 mainAlgo(optim, *rowPtr);
 
   78                 if (ref.havePose() && mainAlgo.havePose()) {
 
   80                         costMeasurement(ref.getPose(), mainAlgo.getPose());
 
   88                 auto avgCost = (accum / 
static_cast<double>(samples));
 
   89                 auto numResets = mainAlgo.getNumResets(optim);
 
   93                     avgCost * (numResets + 1) * (numResets + 1) / samples;
 
   94                 if (std::isnan(effectiveCost)) {
 
   95                     effectiveCost = getReallyBigCost();
 
   97                 std::cout << std::setw(15) << std::to_string(effectiveCost)
 
   98                           << 
" effective cost (average cost of " << std::setw(9)
 
   99                           << avgCost << 
" over " << std::setw(4) << samples
 
  100                           << 
" eligible frames with " << std::setw(2)
 
  101                           << numResets << 
" resets)\n";
 
  102                 return effectiveCost;
 
  104             std::cout << 
"No samples with pose for both algorithms?" 
  106             return getReallyBigCost();
 
  110             auto cost = functor(x);
 
  112                 << 
"The computed cost of these initial parameter values is " 
  113                 << cost << std::endl;
 
  117                                      static_cast<long>(maxRuns), functor);
 
  118         std::cout << 
"Optimizer returned " << ret
 
  119                   << 
" and these parameter values:" << std::endl;
 
  120         std::cout << x.format(getFullFormat()) << std::endl;
 
  121         std::cout << 
"for parameters described as, respectively,\n" 
  122                   << ParamSet::getVecElementNames() << std::endl;
 
  124     using ParamOptimizerFunc = std::function<void(
 
  125         MeasurementsRows 
const &, 
bool, OptimCommonData 
const &, std::size_t)>;
 
  128 #endif // INCLUDED_ParamFindingRoutine_h_GUID_C2088279_D54B_4D8B_562E_5748C748DAD0 
double ei_newuoa_wrapped(long npt, Eigen::MatrixBase< Derived > &x, std::pair< double, double > rho, long maxfun, Function &&f)
Header for M.J.D. Powell's NEWUOA method for unconstrained minimization.