Skip to content

Commit 9c8b915

Browse files
committed
Add partially working CEC2013
1 parent abc7278 commit 9c8b915

File tree

19 files changed

+475
-35
lines changed

19 files changed

+475
-35
lines changed
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
#pragma once
2+
3+
#include "cecxx/benchmark/types.hpp"
4+
#include "cecxx/functions/multimodal/diff_powers.hpp"
5+
#include "cecxx/functions/multimodal/step_rastrigin.hpp"
6+
#include "cecxx/functions/unimodal/sphere.hpp"
7+
#include <cecxx/benchmark/detail/legacy/functions/multimodal/bi_rastrigin.hpp>
8+
#include <cecxx/benchmark/detail/legacy/functions/multimodal/schaffer.hpp>
9+
#include <cecxx/benchmark/detail/problem_invokers/basic_problem_invoker.hpp>
10+
#include <cecxx/functions/multimodal/ackley.hpp>
11+
#include <cecxx/functions/multimodal/discus.hpp>
12+
#include <cecxx/functions/multimodal/escaffer.hpp>
13+
#include <cecxx/functions/multimodal/grie_rosen.hpp>
14+
#include <cecxx/functions/multimodal/griewank.hpp>
15+
#include <cecxx/functions/multimodal/happycat.hpp>
16+
#include <cecxx/functions/multimodal/hgbat.hpp>
17+
#include <cecxx/functions/multimodal/katsuura.hpp>
18+
#include <cecxx/functions/multimodal/levy.hpp>
19+
#include <cecxx/functions/multimodal/rastrigin.hpp>
20+
#include <cecxx/functions/multimodal/rosenbrock.hpp>
21+
#include <cecxx/functions/multimodal/schwefel.hpp>
22+
#include <cecxx/functions/multimodal/weierstrass.hpp>
23+
#include <cecxx/functions/multimodal/zakharov.hpp>
24+
#include <cecxx/functions/unimodal/bent_cigar.hpp>
25+
#include <cecxx/functions/unimodal/ellips.hpp>
26+
#include <cecxx/functions/unimodal/sum_diff_pow.hpp>
27+
28+
namespace cecxx::benchmark::cec_2013 {
29+
static constexpr auto basic_1 = detail::basic_problem_invoker{
30+
cecxx::functions::unimodal::sphere, 1.0, {.rot = do_affine_trans::yes, .shift = do_affine_trans::yes}};
31+
32+
static constexpr auto basic_2 = detail::basic_problem_invoker{
33+
cecxx::functions::unimodal::ellips,
34+
1.0,
35+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes, .orthosymmetric_trans = do_affine_trans::yes}};
36+
37+
static constexpr auto basic_3 = detail::basic_problem_invoker{
38+
cecxx::functions::unimodal::bent_cigar,
39+
1.0,
40+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes, .asymmetric_trans = do_affine_trans::yes},
41+
0.5};
42+
static constexpr auto basic_4 = detail::basic_problem_invoker{
43+
cecxx::functions::multimodal::discus,
44+
1.0,
45+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes, .orthosymmetric_trans = do_affine_trans::yes}};
46+
static constexpr auto basic_5 = detail::basic_problem_invoker{
47+
cecxx::functions::multimodal::diff_powers, 1.0, {.rot = do_affine_trans::yes, .shift = do_affine_trans::yes}};
48+
static constexpr auto basic_6
49+
= detail::basic_problem_invoker{cecxx::functions::multimodal::rosenbrock,
50+
2.048 / 100.0,
51+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes}};
52+
static constexpr auto basic_7 = detail::basic_problem_invoker{
53+
cecxx::functions::multimodal::legacy::schaffer,
54+
1.0,
55+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes, .asymmetric_trans = do_affine_trans::yes},
56+
0.5};
57+
static constexpr auto basic_8 = detail::basic_problem_invoker{
58+
cecxx::functions::multimodal::ackley,
59+
1.0,
60+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes, .asymmetric_trans = do_affine_trans::yes},
61+
0.5};
62+
static constexpr auto basic_9 = detail::basic_problem_invoker{
63+
cecxx::functions::multimodal::weierstrass,
64+
0.5 / 100.0,
65+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes, .asymmetric_trans = do_affine_trans::yes},
66+
0.5};
67+
static constexpr auto basic_10 = detail::basic_problem_invoker{
68+
cecxx::functions::multimodal::griewank, 6.0, {.rot = do_affine_trans::yes, .shift = do_affine_trans::yes}};
69+
static constexpr auto basic_11 = detail::basic_problem_invoker{cecxx::functions::multimodal::rastrigin,
70+
5.12 / 100.0,
71+
{.rot = do_affine_trans::yes,
72+
.shift = do_affine_trans::no,
73+
.asymmetric_trans = do_affine_trans::yes,
74+
.orthosymmetric_trans = do_affine_trans::yes},
75+
0.2};
76+
static constexpr auto basic_12 = detail::basic_problem_invoker{cecxx::functions::multimodal::rastrigin,
77+
5.12 / 100.0,
78+
{.rot = do_affine_trans::yes,
79+
.shift = do_affine_trans::yes,
80+
.asymmetric_trans = do_affine_trans::yes,
81+
.orthosymmetric_trans = do_affine_trans::yes},
82+
0.2};
83+
static constexpr auto basic_13 = detail::basic_problem_invoker{cecxx::functions::multimodal::step_rastrigin,
84+
5.12 / 100.0,
85+
{.rot = do_affine_trans::yes,
86+
.shift = do_affine_trans::yes,
87+
.asymmetric_trans = do_affine_trans::yes,
88+
.orthosymmetric_trans = do_affine_trans::yes},
89+
0.2};
90+
static constexpr auto basic_14 = detail::basic_problem_invoker{
91+
cecxx::functions::multimodal::schwefel, 10.0, {.rot = do_affine_trans::yes, .shift = do_affine_trans::no}};
92+
static constexpr auto basic_15 = detail::basic_problem_invoker{
93+
cecxx::functions::multimodal::schwefel, 10.0, {.rot = do_affine_trans::yes, .shift = do_affine_trans::yes}};
94+
static constexpr auto basic_16 = detail::basic_problem_invoker{
95+
cecxx::functions::multimodal::katsuura, 5.0 / 100.0, {.rot = do_affine_trans::yes, .shift = do_affine_trans::yes}};
96+
static constexpr auto basic_17
97+
= detail::basic_problem_invoker{cecxx::functions::multimodal::legacy::bi_rastrigin,
98+
1.0,
99+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::no}};
100+
static constexpr auto basic_18
101+
= detail::basic_problem_invoker{cecxx::functions::multimodal::legacy::bi_rastrigin,
102+
1.0,
103+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes}};
104+
static constexpr auto basic_19
105+
= detail::basic_problem_invoker{cecxx::functions::multimodal::grie_rosen,
106+
5.0 / 100.0,
107+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes}};
108+
static constexpr auto basic_20 = detail::basic_problem_invoker{cecxx::functions::multimodal::escaffer,
109+
1.0,
110+
{
111+
.rot = do_affine_trans::yes,
112+
.shift = do_affine_trans::yes,
113+
.asymmetric_trans = do_affine_trans::yes,
114+
},
115+
0.5};
116+
117+
} // namespace cecxx::benchmark::cec_2013
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
#pragma once
2+
3+
#include <cecxx/benchmark/cec_2013/basic_problems.hpp>
4+
#include <cecxx/benchmark/detail/problem_invokers/complex_problem_invoker.hpp>
5+
6+
namespace cecxx::benchmark::cec_2013 {
7+
8+
const auto complex_1 = detail::complex_problem_invoker{std::tuple{basic_6, basic_5, basic_3, basic_4, basic_1},
9+
{.deltas = {10, 20, 30, 40, 50},
10+
.biases = {0, 100, 200, 300, 400},
11+
.masks = {
12+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
13+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
14+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
15+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
16+
{.rot = do_affine_trans::no, .shift = do_affine_trans::yes},
17+
},
18+
.scales = {
19+
{0, 10000.0 / 1e+4},
20+
{1, 10000.0 / 1e+10},
21+
{2, 10000.0 / 1e+30},
22+
{3, 10000.0 / 1e+10},
23+
{4, 10000.0 / 1e+5},
24+
}}};
25+
26+
const auto complex_2 = detail::complex_problem_invoker{std::tuple{basic_15, basic_15, basic_15},
27+
{.deltas = {20, 20, 20},
28+
.biases = {0, 100, 200},
29+
.masks = {
30+
{.rot = do_affine_trans::no, .shift = do_affine_trans::yes},
31+
{.rot = do_affine_trans::no, .shift = do_affine_trans::yes},
32+
{.rot = do_affine_trans::no, .shift = do_affine_trans::yes},
33+
},
34+
.scales = {
35+
{0, 1.0},
36+
{1, 1.0},
37+
{2, 1.0},
38+
}}};
39+
40+
const auto complex_3 = detail::complex_problem_invoker{std::tuple{basic_15, basic_15, basic_15},
41+
{.deltas = {20, 20, 20},
42+
.biases = {0, 100, 200},
43+
.masks = {
44+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
45+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
46+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
47+
},
48+
.scales = {
49+
{0, 1.0},
50+
{1, 1.0},
51+
{2, 1.0},
52+
}}};
53+
54+
const auto complex_4 = detail::complex_problem_invoker{std::tuple{basic_15, basic_12, basic_9},
55+
{.deltas = {20, 20, 20},
56+
.biases = {0, 100, 200},
57+
.masks = {
58+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
59+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
60+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
61+
},
62+
.scales = {
63+
{0, 1000.0 / 4e+3},
64+
{1, 1000.0 / 1e+3},
65+
{2, 1000.0 / 400.0},
66+
}}};
67+
68+
const auto complex_5 = detail::complex_problem_invoker{std::tuple{basic_15, basic_12, basic_9},
69+
{.deltas = {20, 30, 50},
70+
.biases = {0, 100, 200},
71+
.masks = {
72+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
73+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
74+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
75+
},
76+
.scales = {
77+
{0, 1000.0 / 4e+3},
78+
{1, 1000.0 / 1e+3},
79+
{2, 1000.0 / 400.0},
80+
}}};
81+
82+
const auto complex_6 = detail::complex_problem_invoker{std::tuple{basic_15, basic_11, basic_2, basic_9, basic_10},
83+
{.deltas = {10,10,10,10,10},
84+
.biases = {0, 100, 200, 300, 400},
85+
.masks = {
86+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
87+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
88+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
89+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
90+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
91+
},
92+
.scales = {
93+
{0, 1000.0 / 4e+3},
94+
{1, 1000.0 / 1e+3},
95+
{2, 1000.0 / 1e+10},
96+
{3, 1000.0 / 400.0},
97+
{4, 1000.0 / 100.0},
98+
}}};
99+
100+
const auto complex_7 = detail::complex_problem_invoker{std::tuple{basic_10, basic_12, basic_15, basic_9, basic_1},
101+
{.deltas = {10,10,10,20,20},
102+
.biases = {0, 100, 200, 300, 400},
103+
.masks = {
104+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
105+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
106+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
107+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
108+
{.rot = do_affine_trans::no, .shift = do_affine_trans::yes},
109+
},
110+
.scales = {
111+
{0, 10000.0 / 100.0},
112+
{1, 10000.0 / 1e+3},
113+
{2, 10000.0 / 4e+3},
114+
{3, 10000.0 / 400.0},
115+
{4, 10000.0 / 1e+5},
116+
}}};
117+
118+
const auto complex_8 = detail::complex_problem_invoker{std::tuple{basic_19, basic_7, basic_15, basic_20, basic_1},
119+
{.deltas = {10, 20, 30, 40, 50},
120+
.biases = {0, 100, 200, 300, 400},
121+
.masks = {
122+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
123+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
124+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
125+
{.rot = do_affine_trans::yes, .shift = do_affine_trans::yes},
126+
{.rot = do_affine_trans::no, .shift = do_affine_trans::yes},
127+
},
128+
.scales = {
129+
{0, 10000.0 / 4e+3},
130+
{1, 10000.0 / 4e+6},
131+
{2, 10000.0 / 4e+3},
132+
{3, 10000.0 / 2e+7},
133+
{4, 10000.0 / 1e+5},
134+
}}};
135+
136+
} // namespace cecxx::benchmark::cec_2013
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#pragma once
2+
3+
#include <cecxx/benchmark/types.hpp>
4+
#include <set>
5+
#include <unordered_map>
6+
7+
namespace cecxx::benchmark::cec_2013 {
8+
const auto OFFSETS = std::unordered_map<problem_number_t, double>{
9+
{1, 1400.0}, {2, 1300.0}, {3, 1200.0}, {4, 1100.0}, {5, 1000.0}, {6, 900.0}, {7, 800.0},
10+
{8, 700.0}, {9, 600.0}, {10, 500.0}, {11, 400.0}, {12, 300.0}, {13, 200.0}, {14, 100.0},
11+
{15, 100.0}, {16, 200.0}, {17, 300.0}, {18, 400.0}, {19, 500.0}, {20, 600.0}, {21, 700.0},
12+
{22, 800.0}, {23, 900.0}, {24, 1000.0}, {25, 1100.0}, {26, 1200.0}, {27, 1300.0}, {28, 1400.0}};
13+
14+
const auto VALID_DIMENSIONS = std::set<dimension_t>{2, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
15+
16+
} // namespace cecxx::benchmark::cec_2013
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#pragma once
2+
3+
#include <cecxx/benchmark/detail/context.hpp>
4+
#include <cecxx/benchmark/types.hpp>
5+
6+
namespace cecxx::benchmark::cec_2013 {
7+
8+
auto evaluate(detail::problem_context_view_t ctx, const problem_number_t fn, std::span<const double> input) -> double;
9+
10+
} // namespace cecxx::benchmark::cec_2013

include/cecxx/benchmark/cec_2014/basic_problems.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#pragma once
22

3-
#include <cecxx/benchmark/detail/legacy/functions/multimodal/bi_rastrigin.hpp>
43
#include <cecxx/benchmark/detail/legacy/functions/multimodal/schaffer.hpp>
54
#include <cecxx/benchmark/detail/problem_invokers/basic_problem_invoker.hpp>
65
#include <cecxx/functions/multimodal/ackley.hpp>

0 commit comments

Comments
 (0)