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
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 |
-+===+=====================================+
-
-
# see README in this directory about image handling
ALL_IMAGES = \
+ genetic-algorithm.svg \
gin.svg \
pagelayout.svg
--- /dev/null
+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"];
+
+}
--- /dev/null
+
+
+
+
+
+
%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
+
+
+