@@ -28,38 +28,44 @@ TEST(TreeStructuredParzenEstimatorTest, TPE_is_better_than_random_search_on_sphe
28
28
return value;
29
29
};
30
30
31
- constexpr int64_t kOuterTrialsNum = 10 ;
32
- constexpr int64_t kInnerTrialsNum = 100 ;
31
+ constexpr int64_t kOuterTrialsNum = 20 ;
32
+ constexpr int64_t kInnerTrialsNum = 200 ;
33
33
std::cout << std::fixed;
34
34
std::vector<double > mean_scores;
35
35
const int64_t n_startup_trials = kInnerTrialsNum / 10 ;
36
36
const std::string method = ((n_startup_trials == kInnerTrialsNum ) ? " Random" : " TPE" );
37
37
38
- std::vector<double > scores;
39
- for (int64_t i = 0 ; i < kOuterTrialsNum ; i++) {
40
- double best_score = std::numeric_limits<double >::lowest ();
41
- const std::vector<double > sample_mean (5 , 0.0 );
42
- const std::vector<double > sample_stddev (5 , 2.0 );
43
- TreeStructuredParzenEstimator estimator (
44
- TreeStructuredParzenEstimator::Direction::MAXIMIZE, n_startup_trials, sample_mean,
45
- sample_stddev);
46
- for (int64_t trial = 0 ; trial < kInnerTrialsNum ; trial++) {
47
- const TreeStructuredParzenEstimator::Input input = estimator.get_next_input ();
48
- const double score = -sphere_function (input);
49
- estimator.add_trial ({input, score});
50
- best_score = std::max (best_score, score);
38
+ const std::vector<double > sample_mean (5 , 0.0 );
39
+ const std::vector<double > sample_stddev {1.0 , 1.0 , 0.1 , 0.1 , 0.1 };
40
+
41
+ for (const int64_t n_startup_trials : {kInnerTrialsNum , kInnerTrialsNum / 2 }) {
42
+ const std::string method = ((n_startup_trials == kInnerTrialsNum ) ? " Random" : " TPE" );
43
+
44
+ std::vector<double > scores;
45
+ for (int64_t i = 0 ; i < kOuterTrialsNum ; i++) {
46
+ double best_score = std::numeric_limits<double >::lowest ();
47
+ TreeStructuredParzenEstimator estimator (
48
+ TreeStructuredParzenEstimator::Direction::MAXIMIZE, n_startup_trials, sample_mean,
49
+ sample_stddev);
50
+ for (int64_t trial = 0 ; trial < kInnerTrialsNum ; trial++) {
51
+ const TreeStructuredParzenEstimator::Input input = estimator.get_next_input ();
52
+ const double score = -sphere_function (input);
53
+ estimator.add_trial ({input, score});
54
+ best_score = std::max (best_score, score);
55
+ }
56
+ scores.push_back (best_score);
51
57
}
52
- scores.push_back (best_score);
53
- }
54
58
55
- const double sum = std::accumulate (scores.begin (), scores.end (), 0.0 );
56
- const double mean = sum / scores.size ();
57
- mean_scores.push_back (mean);
58
- double sq_sum = 0.0 ;
59
- for (const double score : scores) {
60
- sq_sum += (score - mean) * (score - mean);
61
- }
62
- const double stddev = std::sqrt (sq_sum / scores.size ());
59
+ const double sum = std::accumulate (scores.begin (), scores.end (), 0.0 );
60
+ const double mean = sum / scores.size ();
61
+ mean_scores.push_back (mean);
62
+ double sq_sum = 0.0 ;
63
+ for (const double score : scores) {
64
+ sq_sum += (score - mean) * (score - mean);
65
+ }
66
+ const double stddev = std::sqrt (sq_sum / scores.size ());
63
67
64
- std::cout << method << " , mean = " << mean << " , stddev = " << stddev << std::endl;
68
+ std::cout << method << " , mean = " << mean << " , stddev = " << stddev << std::endl;
69
+ }
70
+ ASSERT_LT (mean_scores[0 ], mean_scores[1 ]);
65
71
}
0 commit comments