## 2 Hybrid Method Description
For the Genetic Algorithm player, the genetic operators of selection, crossover and mutation are performed inside the _Generate_ process, which yields a new population, known as the offspring. After the population is computed, the _MigrationEpoch_ process is called, and after that the conjugate gradient runs an iteration of its algorithm starting with the migrated individual, and the process repeats until the stop criteria is met. The _MigrationEpoch_ process is responsible for managing the exchange of information between the different players. The definition of this process is what defines most of the hybrid algorithm. For example, it defines the criteria of which individuals migrate between players, how often they migrate, etc. The internal algorithm of the _MigrationEpoch_ process that describes the Hybrid Method presented and tested in this article is detailed in Algorithm 2. ```
After computing a full iteration of a player the MigrationEpoch(this-player) function does: if\(\mathrm{iter}=0\)then foreach player do  player-Immigrate(this-player-Bestfits); else ifthis-player-Bestfits \(<\) players[0]-Bestfits then foreach player do  player-Immigrate(this-player-Bestfits); else GetMinBestfits; this-player-Immigrate(Bestfit);
```  
**Algorithm 2**Hybrid Method With Gradient Game  
The tested Hybrid Method combines two players (i.e., optimization algorithms). One player is intended to perform the exploration of the full search space. The second player is responsible for the exploitation of the promising regions found by the first one. The Hybrid Method shares information between the two players, in a bidirectional way, to overcome the main drawbacks of the optimization algorithms that is formed of. It tries to achieve a fast rate of convergence and to avoid getting stuck at local minimums. The Hybrid Method initially runs the Genetic Algorithm player. After the first iteration, the best individual found by the Genetic Algorithm is transferred to the conjugate gradient player (first _if_ of the Algorithm 2). The _player-Bestfits_ is the individual with the best objective function found so far, and it is stored for each player. It is updated every time a better individual is found. The conjugate gradient player will use this individual as the starting point of its internal algorithm for its own iteration. The iteration of the conjugate gradient consists of computing the gradient at the location of the starting point and performing a line search in the direction of the gradient. After the iteration of the conjugate gradient, another migration epoch occurs. If the best individual found by the conjugate gradient outperforms the best individual found by the Genetic Algorithm, then the best individual of the conjugate gradient is sent to the Genetic Algorithm. If the first conditional is not met, a second _if_ condition is evaluated, taking into account the values of the objectives functions achieved so far. The inner _if_ condition compares the objective function of the last evaluated player (_this-player_) against the objective function of the first player, which in this case is a Genetic Algorithm. The condition _this-player-Bestfits \(<\) players[0]-Bestfits_ is clear in a single-objective optimization case, as it is a direct comparison between values of the objective function. If the objective function of _this-player_ is better (lower) than the first player, this individual is migrated to the other player. If the objective function of _this-individual_ is not better, the inner _else_ part of the algorithm is conducted. In the function _GetMinBestfits_, a search for the best individual (_Bestfit_) among all players is performed, and the individual is migrated to _this-player_, the last player that was executed. For the full comprehension of the hybrid algorithm, it is important to specify the _Immigrate_ process. This process is defined for each player, and its implementation depends on the type of optimization algorithm, and it affects the general hybrid algorithm.