Grey Wolf Optimizer (gwo)

class pagmo::gwo
Grey Wolf Optimizer Algorithm.
Grey Wolf Optimizer is an optimization algorithm based on the leadership hierarchy and hunting mechanism of greywolves, proposed by Seyedali Mirjalilia, Seyed Mohammad Mirjalilib, Andrew Lewis in 2014.
This algorithm is a classic example of a highly criticizable line of search that led in the first decades of our millenia to the development of an entire zoo of metaphors inspiring optimzation heuristics. In our opinion they, as is the case for the grey wolf optimizer, are often but small variations of already existing heuristics rebranded with unnecessray and convoluted biological metaphors. In the case of GWO this is particularly evident as the position update rule is shokingly trivial and can also be easily seen as a product of an evolutionary metaphor or a particle swarm one. Such an update rule is also not particulary effective and results in a rather poor performance most of times. Reading the original peerreviewed paper, where the poor algoritmic perfromance is hidden by the methodological flaws of the benchmark presented, one is left with a bitter opinion of the whole peerreview system.
The implementation provided for PaGMO is based on the pseudocode provided in the original Seyedali and Andrew (2014) paper. pagmo::gwo is suitable for boxconstrained singleobjective continuous optimization.
See also
https://www.sciencedirect.com/science/article/pii/S0965997813001853 for the paper that introduces Grey Wolf Optimizer and the pseudocode
Public Types

typedef std::tuple<unsigned, double, double, double> log_line_type
Single entry of the log (gen, alpha, beta, delta)

typedef std::vector<log_line_type> log_type
The log.
Public Functions

gwo(unsigned gen = 1u, unsigned seed = pagmo::random_device::next())
Constructor.
Constructs a Grey Wolf Optimizer
 Parameters
gen – number of generations.
seed – seed used by the internal random number generator (default is random)

population evolve(population) const
Algorithm evolve method.
Evolves the population for a maximum number of generations, until maximum number of generations is reached.
 Parameters
pop – population to be evolved
 Throws
std::invalid_argument – if the problem is multiobjective or constrained or stochastic
std::invalid_argument – if the population size is not at least 3
 Returns
alpha agent’s position

void set_seed(unsigned)
Sets the seed.
 Parameters
seed – the seed controlling the algorithm stochastic behaviour

inline unsigned get_seed() const
Gets the seed.
 Returns
the seed controlling the algorithm stochastic behaviour

inline void set_verbosity(unsigned level)
Sets the algorithm verbosity.
Sets the verbosity level of the screen output and of the log returned by get_log().
level
can be:0: no verbosity
>0: will print and log one line each
level
generations.
Example (verbosity 1):
Gen, is the generation number, Alpha is the fitness score for alpha, Beta is the fitness score for beta, delta is the fitness score for deltaGen: Alpha: Beta: Delta: 1 5.7861 12.7206 19.6594 2 0.404838 4.60328 9.51591 3 0.0609075 3.83717 4.30162 4 0.0609075 0.830047 1.77049 5 0.040997 0.12541 0.196164
 Parameters
level – verbosity level

inline unsigned get_verbosity() const
Gets the verbosity level.
 Returns
the verbosity level

inline unsigned get_gen() const
Gets the generations.
 Returns
the number of generations to evolve for

inline std::string get_name() const
Algorithm name.
One of the optional methods of any userdefined algorithm (UDA).
 Returns
a string containing the algorithm name

std::string get_extra_info() const
Extra info.
One of the optional methods of any userdefined algorithm (UDA).
 Returns
a string containing extra info on the algorithm

inline const log_type &get_log() const
Get log.
A log containing relevant quantities monitoring the last call to evolve. Each element of the returned
std::vector
is a gwo::log_line_type containing: gen, alpha, beta, delta as described in gwo::set_verbosity Returns
an
std::vector
of gwo::log_line_type containing the logged values gen, alpha, beta, delta

typedef std::tuple<unsigned, double, double, double> log_line_type