# Genetic Algorithms to Maximize the Relevant Mutual Information in Communication Receivers +
## 2 Preliminaries
### Genetic Algorithms  
Genetic algorithms are very powerful and generic optimization algorithms that have various applications in many fields of engineering [19; 20; 21; 22]. They aim to mimic the natural evolution of the species to solve multi-parameter optimization problems. Consider the problem of finding parameters \(\boldsymbol{\theta}=[\theta_{0},\theta_{1},\ldots,\theta_{M-1}]\) that maximize a function \(g:\mathbb{R}^{M}\longrightarrow\mathbb{R}_{0}^{+}\). In order to find optimum parameters \(\boldsymbol{\theta}\), a genetic algorithm works on a population \(\mathcal{P}=\left\{\boldsymbol{\theta}^{(0)},\boldsymbol{\theta}^{(1)}, \ldots,\boldsymbol{\theta}^{(n_{\text{pop}}-1)}\right\}\) of \(n_{\text{pop}}\) candidate solutions. Initially, this population is often drawn randomly. The real world parameter description \(\boldsymbol{\theta}^{(l)}\) is typically termed the phenotype of an individual in the population. Each member \(\boldsymbol{\theta}^{(l)}\), \(l\in\{0,1,\ldots,n_{\text{pop}}-1\}\) of the population implies a certain value of the target function \(g\Big{(}\boldsymbol{\theta}^{(l)}\Big{)}\) which is readily termed the fitness of this individual. In addition to the phenotype description of every individual, a genotype description can be introduced. The idea is to encode the numerical values of the parameters \(\theta_{nt}^{(l)}\) using so-called alleles into a long genetic string. In the simplest form, the alleles are just binary zeros or ones and the genotype of an individual is a long sequence of these numbers,accordingly. For a given phenotype, one can determine the genotype by considering uniform discretization of the search spaces \([\theta_{m}^{\text{min}},\theta_{m}^{\text{max}}]\) for the parameters \(\theta_{m}\) into \(2^{\tau_{m}}\) regions, respectively. Like this the values of the parameters \(\theta_{m}^{(l)}\) can be interpreted as bit sequences of length \(r_{m}\) which encode the corresponding index of the region in binary form. A simple method to obtain the respective bit sequences is determining the region indices \(z_{m}^{(l)}\) for all the appearing \(\theta_{m}^{(l)}\) in \(\mathbf{\theta}^{(l)}\) as  
\[z_{m}^{(l)}=\left\lfloor\frac{\theta_{m}^{(l)}-\theta_{m}^{\text{min}}}{\theta _{m}^{\text{max}}-\theta_{m}^{\text{min}}}(2^{\tau_{m}}-1)\right\rfloor. \tag{1}\]  
The \(z_{m}^{(l)}\) are integers and can be converted into their binary representations easily. Then, one just concatenates all the obtained binary numbers to a long binary string to obtain the genotype. As an example, consider \(\mathbf{\theta}^{(l)}=\left[\theta_{0}^{(l)},\theta_{1}^{(l)}\right]=[1.326,-0.839]\), \(\theta_{0},\theta_{1}\in[-2,2],r_{0}=r_{1}=8\). One obtains \(z_{0}^{(l)}=212\), \(z_{1}^{(l)}=74\) and the corresponding genotype \([11010100\,01001010]\). Of course, the reverse genotype to phenotype conversion can be done similarly. An instance of the population \(\mathcal{P}\) exists in a generation of the genetic algorithm. In every generation, parent solutions are randomly selected from \(\mathcal{P}\) and their genetic information is combined using simple genetic crossover operators on the genotypes to create children which form the population of the following generation. Such a crossover operation with \(n_{\text{cross}}=2\) crossover positions is illustrated in Figure 1.  
It is key that in the described processing, the individuals with higher fitness are more likely to become parents of the next generation than the weaker individuals with lower fitness. This is realized using simple inversion sampling to draw the parents. Moreover, the concept of elitism promotes the fittest individuals and guarantees them propagating their genetic material into the next generation. Finally, mutations of alleles in the genotypes of the children are performed with a certain mutation probability \(p_{\text{mut}}\) to assure some diversity. Fascinatingly, when the processing is executed for several generations, genetic algorithms can find very good solutions to enormously complicated optimization tasks [19].