Fitness function

A fitness function is a particular type of objective function that is used to summarise, as a single figure of merit, how close a given design solution is to achieving the set aims. Fitness functions are used in software architecture and evolutionary algorithms (EA), such as genetic programming and genetic algorithms to guide simulations towards optimal design solutions.[1]

Software programmers know that they shouldn’t release a bad code, but that priority competes with many other priorities for busy developers. That's why they should use fitness functions to keep their software in check.[2]

In the field of EAs, each design solution is commonly represented as a string of numbers (referred to as a chromosome). After each round of testing, or simulation, the idea is to delete the n worst design solutions, and to breed n new ones from the best design solutions. Each design solution, therefore, needs to be awarded a figure of merit, to indicate how close it came to meeting the overall specification, and this is generated by applying the fitness function to the test, or simulation, results obtained from that solution.[3]

Two main classes of fitness functions exist: one where the fitness function does not change, as in optimizing a fixed function or testing with a fixed set of test cases; and one where the fitness function is mutable, as in niche differentiation or co-evolving the set of test cases.[4][5] Another way of looking at fitness functions is in terms of a fitness landscape, which shows the fitness for each possible chromosome. In the following, it is assumed that the fitness is determined based on an evaluation that remains unchanged during an optimization run.

A fitness function does not necessarily have to be able to calculate an absolute value, as it is sometimes sufficient to compare candidates in order to select the better one. A relative indication of fitness (candidate a is better than b) is sufficient in some cases,[6] such as tournament selection or Pareto optimization.

  1. ^ Eiben, A.E.; Smith, J.E. (2015). "Evaluation Function (Fitness Function)". Introduction to Evolutionary Computing. Natural Computing Series (2nd ed.). Berlin, Heidelberg: Springer. p. 30. doi:10.1007/978-3-662-44874-8. ISBN 978-3-662-44873-1. S2CID 20912932.
  2. ^ Fundamentals of Software Architecture: An Engineering Approach. O'Reilly Media. 2020. ISBN 978-1492043454.
  3. ^ Eiben, A.E.; Smith, J.E. (2015). "What Is an Evolutionary Algorithm?". Introduction to Evolutionary Computing. Natural Computing Series. Berlin, Heidelberg: Springer. pp. 25–48. doi:10.1007/978-3-662-44874-8. ISBN 978-3-662-44873-1. S2CID 20912932.
  4. ^ Popovici, Elena; Bucci, Anthony; Wiegand, R. Paul; De Jong, Edwin D. (2012), Rozenberg, Grzegorz; Bäck, Thomas; Kok, Joost N. (eds.), "Coevolutionary Principles", Handbook of Natural Computing, Berlin, Heidelberg: Springer Berlin Heidelberg, pp. 987–1033, doi:10.1007/978-3-540-92910-9_31, ISBN 978-3-540-92909-3, retrieved 2023-01-08
  5. ^ Eiben, A.E.; Smith, J.E. (2015). "Coevolutionary Systems". Introduction to Evolutionary Computing. Natural Computing Series. Berlin, Heidelberg: Springer Berlin Heidelberg. pp. 223–230. doi:10.1007/978-3-662-44874-8. ISBN 978-3-662-44873-1. S2CID 20912932.
  6. ^ Bäck, Thomas; Fogel, David; Michalewicz, Zbigniew, eds. (2000-11-20). Evolutionary Computation 2: Advanced Algorithms and Operators. Taylor & Francis. doi:10.1201/9781420034349. ISBN 978-0-7503-0665-2.

Developed by StudentB