Performance
Competitions
fcmaes can give you a real advantage in optimization competitions such as ESA’s optimization challenges, especially if you use its parallelization features well. Here is a list of the ranks achieved by fcmaes:
For most challenges, the fcmaes result is either the best or within 1 % of the best. All competition code was written in Python, although fcmaes and or-tools wrap C++ code for speed. All 15 challenges are still open. You can submit solutions, and your result will appear on the leaderboard.
Engineering Design Optimization
Engineering design problems often combine multiple competing objectives with many constraints. Here we use the Mazda real-world car structure design benchmark. The task is to optimize three car models at the same time, reduce their weight, increase the number of shared thicknesses of structural parts, and satisfy 54 constraints. In 2017 there was a competition related to this problem, documented in the Report of Evolutionary Computation Competition 2017. Even so, many of the ideas developed there have still not found their way into open source optimization libraries.
We applied modecpp.py for
about one hour on one AMD 5950x CPU under Linux, using the de/rand/1 strategy (nsga_update=False, pareto_update=False, ints=[True]*dim)
with population size 256. We chose the best result from two runs executed in parallel, each using 16 threads (workers=16).
Together, both runs performed about 8200 function evaluations per second.
The resulting Pareto front has hypervolume 0.4074:
The "reference" NSGA-II solution provided with the benchmark has hypervolume 0.1456:
The reference solution was computed with a limited budget. Still, NSGA-II scales much worse than fcmaes-MoDe when using enhanced multiple constraint ranking. This example shows that fcmaes also works well on constrained multi-objective engineering problems, not only on single-objective benchmarks.
Space Flight Trajectory Planning
Remark: This section was initially created in 2022 and updated in 2024. What changed:
-
New hardware: CPU AMD 9950x replaced an AMD 5950x
-
Hardware performance: The 9950x is about factor 1.75 faster than the 5950x for these benchmarks.
-
Random generator: fcmaes switched from Mersenne Twister to PCG64 DXSM both for Python and C++.
fcmaes provides fast parallel example solvers for the real-world space flight design problems from GTOP and for the F-8_aircraft problem based on differential equations. At GTOPX you can find implementations of the corresponding objective functions in several programming languages. The solution times in the tables below were measured on Linux with an AMD 9950x CPU using 32 parallel processes.
| problem | runs | absolute best | stopVal | success rate | mean time | sdev time |
|---|---|---|---|---|---|---|
Cassini1 |
100 |
4.9307 |
4.95535 |
100% |
0.69s |
1.1s |
Cassini2 |
100 |
8.383 |
8.42491 |
100% |
12.05s |
5.73s |
Gtoc1 |
100 |
-1581950 |
-1574080 |
100% |
11.11s |
8.49s |
Messenger |
100 |
8.6299 |
8.673 |
100% |
13.33s |
8.16s |
Rosetta |
100 |
1.3433 |
1.35 |
100% |
17.49s |
6.21s |
Tandem |
100 |
-1500.46 |
-1493 |
81% |
166.92s |
147.87s |
Sagas |
100 |
18.188 |
18.279 |
100% |
1.7s |
0.99s |
Messenger Full |
100 |
1.9579 |
1.96769 |
43% |
1757.94s |
1240.32s |
Messenger Full |
100 |
1.9579 |
2.0 |
79% |
693.02s |
515.71s |
Here, stopVal is the threshold value that determines success, and
mean time includes failed runs.
Execute benchmark_gtop.py
to reproduce these results. The same optimization algorithm
was used for all problems, with the same parameters for both the optimizer and the coordinated retry / boundary management.
| problem | runs | absolute best | stopVal | success rate | mean time | sdev time |
|---|---|---|---|---|---|---|
Cassini1 |
100 |
4.9307 |
4.931 |
100% |
2.24s |
1.87s |
Cassini2 |
100 |
8.383 |
8.384 |
98% |
37.12s |
20.15s |
Gtoc1 |
100 |
-1581950 |
-1581949 |
100% |
23.13s |
16.23s |
Messenger |
100 |
8.6299 |
8.631 |
100% |
27.28s |
12.48s |
Rosetta |
100 |
1.3433 |
1.344 |
91% |
33.0s |
18.16s |
Tandem |
100 |
-1500.46 |
-1500 |
81% |
175.11s |
148.41s |
Sagas |
100 |
18.188 |
18.189 |
100% |
2.05s |
1.06s |
ESAs Messenger-Full Space Trajectory Design Problem
Because of its well-known complexity, ESA’s 26-dimensional Messenger full problem is often used as a reference in the literature. See, for instance, the MXHCP paper.
fcmaes solves this problem in less than half an hour using an AMD 9950x.
The problem models a multi-gravity-assist interplanetary mission from Earth to Mercury. In 2009, the first good solution (6.9 km/s) was submitted. It took more than five years to reach 1.959 km/s, and three more years until 2017 to find the optimum 1.958 km/s. The picture below shows the progress of the broader research community since 2009:
The next picture shows 100 coordinated retry runs:
In 79 of these 100 runs, the result was better than 2 km/s:
About 2.1*10^6 function evaluations per second were performed. This shows how well the algorithm scales when using all 16 cores / 32 threads. For a larger setup, fcmaesray shows how fcmaes coordinated retry performs on a 5-node cluster with 96 CPU cores.