Standardizing Nature-inspired Algorithms: a unified framework UNIOA for seven swarm-based algorithms
For solving the problem that most of the modern swarm-based optimization algorithms are frequently repeating similar core ideas, we proposed a unified framework UNIOA in which seven different swarm-based optimization algorithms can be represented in same terminologies with same tuples. Meanwhile, the positions of these tuples are also same when building up these seven algorithms.
We did three groups of experiments. Check here for all experimental data used in this thesis project.
Group 1 is for avoiding side effects. In our many experiments, we found the way of evaluating the fitness and the way of calculating the global best individual might impact the performance of algorithms. The experimental results show that the way of evaluating the fitness will not impact the performance of algorithm, but the way of calculating the global best individual will.
Therefore, when we reproduced the original implementation, we kept the way of evaluating fitness as its original way, but modified the way of calculating the global best individual as the way in our unified framework.
Group 2 is for verifying whether our unified framework can work correctly as their original framework. The experimental results show that the performance of algorithms in our unified framework is same as the performance of algorithms in their original framework.
Therefore, we conclude that our unified framework can safely replace the original framework of algorithms.
Group 3 is for observing the performance of these seven selected algorithms in our unified framework.
Our experiments are built up in the IOHprofiler for implementing algorithms in IOHexperimenter and analysing their performances in IOHanalyzer.
see ./pseudo_code_in_UNIOA
The general application of our unified framework is to design an auto-designer for swarm-based algorithms. A demo of such an application is UNIOA.
- avoid side effects of
=
, must usecopy.copy()
somewhere. For example, when you need to create a new variable that is equal to the old variable, but not throw away the old one. Specifically, if you will use the right-variable in the following steps, please usecopy.copy(single_number)/[list/array].copy()
. Moreover,def
cannot avoid this kind of errors, and must use copy - mithril.liacs.nl
- octiron.liacs.nl
- duranium.liacs.nl