MCPcopy Create free account
hub / github.com/catboost/catboost / ArgMinPrecise

Function ArgMinPrecise

library/cpp/linear_regression/linear_regression.cpp:372–394  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

370
371namespace {
372 inline double ArgMinPrecise(std::function<double(double)> func, double left, double right) {
373 const size_t intervalsCount = 20;
374 double points[intervalsCount + 1];
375 double values[intervalsCount + 1];
376 while (right > left + 1e-5) {
377 for (size_t pointNumber = 0; pointNumber <= intervalsCount; ++pointNumber) {
378 points[pointNumber] = left + pointNumber * (right - left) / intervalsCount;
379 values[pointNumber] = func(points[pointNumber]);
380 }
381 size_t bestPointNumber = MinElement(values, values + intervalsCount + 1) - values;
382 if (bestPointNumber == 0) {
383 right = points[bestPointNumber + 1];
384 continue;
385 }
386 if (bestPointNumber == intervalsCount) {
387 left = points[bestPointNumber - 1];
388 continue;
389 }
390 right = points[bestPointNumber + 1];
391 left = points[bestPointNumber - 1];
392 }
393 return func(left) < func(right) ? left : right;
394 }
395}
396
397TFeaturesTransformer TFeaturesTransformerLearner::Solve(const size_t iterationsCount /* = 100 */) {

Callers 1

SolveMethod · 0.85

Calls 2

funcFunction · 0.85
MinElementFunction · 0.85

Tested by

no test coverage detected