[mlpack-svn] r17383 - mlpack/trunk/src/mlpack/tests
fastlab-svn at coffeetalk-1.cc.gatech.edu
fastlab-svn at coffeetalk-1.cc.gatech.edu
Tue Nov 18 18:20:31 EST 2014
Author: rcurtin
Date: Tue Nov 18 18:20:31 2014
New Revision: 17383
Log:
Refactor GeneralizedRosenbrockTest to deal with intermittent failures better.
Also use 4 trials for RastigrinFunctionTest.
Modified:
mlpack/trunk/src/mlpack/tests/sa_test.cpp
Modified: mlpack/trunk/src/mlpack/tests/sa_test.cpp
==============================================================================
--- mlpack/trunk/src/mlpack/tests/sa_test.cpp (original)
+++ mlpack/trunk/src/mlpack/tests/sa_test.cpp Tue Nov 18 18:20:31 2014
@@ -27,18 +27,29 @@
BOOST_AUTO_TEST_CASE(GeneralizedRosenbrockTest)
{
+ math::RandomSeed(std::time(NULL));
size_t dim = 50;
GeneralizedRosenbrockFunction f(dim);
- ExponentialSchedule schedule(1e-5);
- SA<GeneralizedRosenbrockFunction, ExponentialSchedule>
- sa(f, schedule, 10000000, 1000., 1000, 100, 1e-9, 3, 20, 0.3, 0.3);
- arma::mat coordinates = f.GetInitialPoint();
- const double result = sa.Optimize(coordinates);
+ double iteration = 0;
+ double result = DBL_MAX;
+ arma::mat coordinates;
+ while (result > 1e-6)
+ {
+ ExponentialSchedule schedule(1e-5);
+ SA<GeneralizedRosenbrockFunction, ExponentialSchedule>
+ sa(f, schedule, 10000000, 1000., 1000, 100, 1e-10, 3, 20, 0.3, 0.3);
+ coordinates = f.GetInitialPoint();
+ result = sa.Optimize(coordinates);
+ ++iteration;
+
+ BOOST_REQUIRE_LT(iteration, 3); // No more than three tries.
+ }
+ // 0.1% tolerance for each coordinate.
BOOST_REQUIRE_SMALL(result, 1e-6);
for (size_t j = 0; j < dim; ++j)
- BOOST_REQUIRE_CLOSE(coordinates[j], (double) 1.0, 1e-2);
+ BOOST_REQUIRE_CLOSE(coordinates[j], (double) 1.0, 0.1);
}
// The Rosenbrock function is a simple function to optimize.
@@ -91,11 +102,11 @@
BOOST_AUTO_TEST_CASE(RastrigrinFunctionTest)
{
// Simulated annealing isn't guaranteed to converge (except in very specific
- // situations). If this works 1 of 3 times, I'm fine with that. All I want
+ // situations). If this works 1 of 4 times, I'm fine with that. All I want
// to know is that this implementation will escape from local minima.
size_t successes = 0;
- for (size_t trial = 0; trial < 3; ++trial)
+ for (size_t trial = 0; trial < 4; ++trial)
{
RastrigrinFunction f;
ExponentialSchedule schedule(3e-6);
More information about the mlpack-svn
mailing list