I find evolutionary algoritms fascinating because they are heavily based on nondeterminism. Just as natural evolution advances forms of life by the filtering of genetic chaos through survival of individuals, an EA finds solutions and optimizes systems by taming numeric chaos with specially designed, problem-specific selection.
Developing an EA to solve a problem involves the implementation of every major component of the evolutionary process: a representation of the solution space must be designed such that genetic operations are possible, mutation and recombination methods applied must allow free exploration of the solution space while preserving valuable information, and population dynamics including survival and mating selection must be designed to efficiently and effectively guide the population towards useful solutions. Creating an effective EA requires intuition regarding the problem domain and fine-tuning of parameters affecting the process through pure experimentation and statistical analysis. It is a combination of creativity and logic that I find appealing.
The icing on the cake is that the end results of running an EA are almost impossible to predict. It’s fun to be surprised and baffled by the output of an algorithm which is implemented with as much precision and intent as any other.