## Formulation of the Problem
### Genetic Algorithms  
Genetic algorithms [32; 33] are representative of the group of _evolutionary algorithms_, whose operating principle is based on the observed evolution of living organisms. The algorithm works on a set of possible solutions (the set is called the _population_, and the possible solutions are called _chromosomes_) that are coded as, for example, binary strings (e.g., the number 12 is coded as chromosome 110 in binary format) or real values (12.568 is recalled and processed as 12.568, and there is no transformation into binary strings). For each chromosome, the value of the function being minimized (called the _objective function_) is calculated. The chromosomes with the smallest corresponding objective function values are then selected as parents of the chromosomes in the next iteration step (called a _generation_), while the selection strategy may, for example, depend directly on a value of the objective function calculated for each chromosome (the smaller the value, the greater the probability of being selected, i.e., _roulette selection_) or on a position in a ranking of best solutions (the higher the location in a ranking of all solutions, the greater the probability of being selected, i.e., _ranking selection_). The selected chromosomes (parents) are then randomly combined to form pairs and exchange some parts of the information they carry. In binary chromosome coding, a single-point _crossover_ of two chromosome parents generates chromosome children: for instance, crossover of 111 and 000 produces chromosome children 100 and 011 (crossover before the second gene) or 110 and 001 (crossover before the third gene). For real-value chromosome coding, the _crossover_ of chromosomes' parents carrying, for example, two real values each, such as \(\{12.569;\,2.584\}\) and \(\{1.954;\,3.521\}\), results in children \(\{\beta 12.569+(1-\beta)1.954;\,(1-\beta)2.584+\beta 3.521\}\) and \(\{(1-\beta)12.569+\beta 1.954;\,\beta 2.584+(1-\beta)3.521\}\) (crossover before the second gene), where \(\beta\) is a random number. The objective function is then calculated for each chromosome from the second generation, and the best solutions are selected according to selection rules, e.g., roulette selection rules, and are combined to form pairs to produce third-generation chromosomes through crossover. In addition to crossover, some other operators may be introduced to produce children chromosomes, the most popular being mutation, which changes a gene at a random location inside a chromosome to the opposite value; e.g., in chromosome 111, the third gene may be changed through mutation, so the child chromosome becomes 110 (or, for real-value coding, the randomly selected gene \(g^{0}\) changes into \(g=g^{0}+\sigma N(0,1)\), where \(\sigma\) is a random number, and \(N(0,1)\) is a normal distribution with a mean of 0 and variance of 1). While the crossover operator is present in every generation, the probability of mutation should be very low (as it is for living organisms).  
The iteration procedure finishes when a stop criterion is fulfilled (e.g., the assumed number of generations is reached or the change in the best objective function value calculated for each chromosome is less than an arbitrarily selected value \(\varepsilon\)).  
Genetic algorithms have numerous advantages: (1) they are capable of solving minimization problems described by objective functions that have a considerable number of local minima, (2) they do not need any objective function derivatives to be calculated, and (3) they are easy to implement.  
All GA optimization processes presented in the paper were performed in the Matlab (R2018b, The MathWorks Inc., Natick, MA, USA) environment [34].