From 28b6ec1df64775db6d6eb47655141cda1240d901 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Mon, 19 Aug 2019 12:05:38 -0400 Subject: [PATCH] Replace genetic algorithm ASCII-art with a real figure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Author: Jürgen Purtz Discussion: https://postgr.es/m/c6027f7a-78ea-8453-0837-09903ba5fd9b@purtz.de --- doc/src/sgml/geqo.sgml | 55 ++------- doc/src/sgml/images/Makefile | 1 + doc/src/sgml/images/genetic-algorithm.gv | 48 ++++++++ doc/src/sgml/images/genetic-algorithm.svg | 140 ++++++++++++++++++++++ 4 files changed, 200 insertions(+), 44 deletions(-) create mode 100644 doc/src/sgml/images/genetic-algorithm.gv create mode 100644 doc/src/sgml/images/genetic-algorithm.svg diff --git a/doc/src/sgml/geqo.sgml b/doc/src/sgml/geqo.sgml index 5120dfbb424..39d2163d160 100644 --- a/doc/src/sgml/geqo.sgml +++ b/doc/src/sgml/geqo.sgml @@ -84,9 +84,19 @@ Through simulation of the evolutionary operations recombination, mutation, and selection new generations of search points are found - that show a higher average fitness than their ancestors. + that show a higher average fitness than their ancestors. + illustrates these steps. +
+ Structure of a Genetic Algorithm + + + + + +
+ According to the comp.ai.genetic FAQ it cannot be stressed too strongly that a GA is not a pure random search for a solution to a @@ -94,49 +104,6 @@ non-random (better than random). -
- Structured Diagram of a Genetic Algorithm - - - - - - P(t) - generation of ancestors at a time t - - - - P''(t) - generation of descendants at a time t - - - - - - -+=========================================+ -|>>>>>>>>>>> Algorithm GA <<<<<<<<<<<<<<| -+=========================================+ -| INITIALIZE t := 0 | -+=========================================+ -| INITIALIZE P(t) | -+=========================================+ -| evaluate FITNESS of P(t) | -+=========================================+ -| while not STOPPING CRITERION do | -| +-------------------------------------+ -| | P'(t) := RECOMBINATION{P(t)} | -| +-------------------------------------+ -| | P''(t) := MUTATION{P'(t)} | -| +-------------------------------------+ -| | P(t+1) := SELECTION{P''(t) + P(t)} | -| +-------------------------------------+ -| | evaluate FITNESS of P''(t) | -| +-------------------------------------+ -| | t := t + 1 | -+===+=====================================+ - -
diff --git a/doc/src/sgml/images/Makefile b/doc/src/sgml/images/Makefile index 1e7993020b5..f9e356348b2 100644 --- a/doc/src/sgml/images/Makefile +++ b/doc/src/sgml/images/Makefile @@ -3,6 +3,7 @@ # see README in this directory about image handling ALL_IMAGES = \ + genetic-algorithm.svg \ gin.svg \ pagelayout.svg diff --git a/doc/src/sgml/images/genetic-algorithm.gv b/doc/src/sgml/images/genetic-algorithm.gv new file mode 100644 index 00000000000..80c354c2c8b --- /dev/null +++ b/doc/src/sgml/images/genetic-algorithm.gv @@ -0,0 +1,48 @@ +digraph { + layout=dot; + + // default values + node [shape=box, label="", fontname="sans-serif", style=filled, fillcolor=white, fontsize=8]; + graph [fontname="sans-serif"]; // must be specified separately + edge [fontname="sans-serif"]; // must be specified separately + + // an unobtrusive background color + pad="1.0, 0.5"; + bgcolor=whitesmoke; + + // layout of edges and nodes + splines=ortho; + nodesep=0.3; + ranksep=0.3; + + // nodes + a1[label="INITIALIZE t := 0"]; + a2[label="INITIALIZE P(t)"]; + a3[label="evaluate FITNESS of P(t)"]; + a4[shape="diamond", label="STOPPING CRITERION"; width=4]; + + // connect 'end' node with 'a9' node (bottom of figure) + { + rank=same; + a9[label="t := t + 1"]; + // end-symbol similar to UML notation + end[shape=doublecircle, label="end", width=0.5]; + } + + a5[label="P'(t) := RECOMBINATION{P(t)}"]; + a6[label="P''(t) := MUTATION{P'(t)}"]; + a7[label="P(t+1) := SELECTION{P''(t) + P(t)}"]; + a8[label="evaluate FITNESS of P''(t)"]; + + // edges + a1 -> a2 -> a3 -> a4; + a4 -> a5[xlabel="false ", fontsize=10]; + a4 -> end[xlabel="true ", fontsize=10]; + a5 -> a6 -> a7 -> a8 -> a9; + a4 -> a9 [dir=back]; + + // explain the notation + expl [shape=plaintext, fontsize=10, width=3.2, fillcolor=whitesmoke, + label="P(t): generation of ancestors at a time t\lP''(t): generation of descendants at a time t\l"]; + +} diff --git a/doc/src/sgml/images/genetic-algorithm.svg b/doc/src/sgml/images/genetic-algorithm.svg new file mode 100644 index 00000000000..fb9fdd1ba78 --- /dev/null +++ b/doc/src/sgml/images/genetic-algorithm.svg @@ -0,0 +1,140 @@ + + + + + +%3 + + + +a1 + +INITIALIZE t := 0 + + + +a2 + +INITIALIZE P(t) + + + +a1->a2 + + + + + +a3 + +evaluate FITNESS of P(t) + + + +a2->a3 + + + + + +a4 + +STOPPING CRITERION + + + +a3->a4 + + + + + +a9 + +t := t + 1 + + + +a4->a9 + + + + + +end + + +end + + + +a4->end + + +true   + + + +a5 + +P'(t) := RECOMBINATION{P(t)} + + + +a4->a5 + + +false    + + + +a6 + +P''(t) := MUTATION{P'(t)} + + + +a5->a6 + + + + + +a7 + +P(t+1) := SELECTION{P''(t) + P(t)} + + + +a6->a7 + + + + + +a8 + +evaluate FITNESS of P''(t) + + + +a7->a8 + + + + + +a8->a9 + + + + + +expl + +P(t): generation of ancestors at a time t +P''(t): generation of descendants at a time t + + +