MCPcopy Create free account
hub / github.com/davisking/dlib / test_bound_solver_brown

Function test_bound_solver_brown

dlib/test/optimization.cpp:1091–1141  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1089
1090 template <typename search_strategy_type>
1091 double test_bound_solver_brown (dlib::rand& rnd, search_strategy_type search_strategy)
1092 {
1093 using namespace dlib::test_functions;
1094 print_spinner();
1095 matrix<double,4,1> starting_point(4), lower(4), upper(4), x;
1096
1097 const matrix<double,0,1> solution = brown_solution();
1098
1099 // pick random bounds
1100 lower = rnd.get_random_gaussian(), rnd.get_random_gaussian(), rnd.get_random_gaussian(), rnd.get_random_gaussian();
1101 lower = lower*10 + solution;
1102 upper = rnd.get_random_gaussian(), rnd.get_random_gaussian(), rnd.get_random_gaussian(), rnd.get_random_gaussian();
1103 upper = upper*10 + solution;
1104 for (int i = 0; i < lower.size(); ++i)
1105 {
1106 if (upper(i) < lower(i))
1107 swap(upper(i),lower(i));
1108 }
1109
1110 starting_point = rnd.get_random_double()*(upper(0)-lower(0))+lower(0),
1111 rnd.get_random_double()*(upper(1)-lower(1))+lower(1),
1112 rnd.get_random_double()*(upper(2)-lower(2))+lower(2),
1113 rnd.get_random_double()*(upper(3)-lower(3))+lower(3);
1114
1115 dlog << LINFO << "lower: "<< trans(lower);
1116 dlog << LINFO << "upper: "<< trans(upper);
1117 dlog << LINFO << "starting: "<< trans(starting_point);
1118
1119 // The contract for find_min_box_constrained() says we always call obj() before der(). So
1120 // these lambdas verify that this is so.
1121 dlib::matrix<double,0,1> last_x;
1122 auto obj = [&](const dlib::matrix<double,0,1> &x) { last_x = x; return brown(x); };
1123 auto der = [&](const dlib::matrix<double,0,1> &x) {
1124 // check that obj(x) was called before der(x).
1125 DLIB_TEST_MSG(max(abs(x - last_x)) == 0, max(abs(x - last_x)));
1126 return brown_derivative(x);
1127 };
1128
1129 x = starting_point;
1130 double val = find_min_box_constrained(
1131 search_strategy,
1132 objective_delta_stop_strategy(1e-16, 500),
1133 obj, der, x,
1134 lower,
1135 upper
1136 );
1137
1138 DLIB_TEST(std::abs(val - brown(x)) < 1e-14);
1139 dlog << LINFO << "brown solution:\n" << x;
1140 return unconstrained_gradient_magnitude(brown_derivative, x, lower, upper);
1141 }
1142
1143 template <typename search_strategy_type>
1144 void test_box_constrained_optimizers(search_strategy_type search_strategy)

Callers 1

Calls 14

print_spinnerFunction · 0.85
brown_solutionFunction · 0.85
brownFunction · 0.85
absFunction · 0.85
brown_derivativeFunction · 0.85
find_min_box_constrainedFunction · 0.85
get_random_gaussianMethod · 0.80
get_random_doubleMethod · 0.80
swapFunction · 0.70
transFunction · 0.50
maxFunction · 0.50

Tested by

no test coverage detected