Currently the 'figure' of a genetic algorithm is created with some kind of 'ascii art'. The patch makes it a real figure.

Kind regards

Jürgen Purtz





diff --git a/doc/src/sgml/geqo.sgml b/doc/src/sgml/geqo.sgml
index 5120dfbb42..5a52fb46db 100644
--- a/doc/src/sgml/geqo.sgml
+++ b/doc/src/sgml/geqo.sgml
@@ -84,7 +84,8 @@
     Through simulation of the evolutionary operations <firstterm>recombination</firstterm>,
     <firstterm>mutation</firstterm>, and
     <firstterm>selection</firstterm> 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. <xref linkend="geqo-figure"/>
+    illustrates in which order and how long the three steps are processed.
    </para>
 
    <para>
@@ -94,48 +95,13 @@
     non-random (better than random).
    </para>
 
-   <figure id="geqo-diagram">
-    <title>Structured Diagram of a Genetic Algorithm</title>
-
-    <informaltable frame="none">
-     <tgroup cols="2">
-      <tbody>
-       <row>
-        <entry>P(t)</entry>
-        <entry>generation of ancestors at a time t</entry>
-       </row>
-
-       <row>
-        <entry>P''(t)</entry>
-        <entry>generation of descendants at a time t</entry>
-       </row>
-      </tbody>
-     </tgroup>
-    </informaltable>
-
-<literallayout class="monospaced">
-+=========================================+
-|&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;  Algorithm GA  &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;|
-+=========================================+
-| 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                          |
-+===+=====================================+
-</literallayout>
+   <figure id="geqo-figure">
+    <title>Structure of a Genetic Algorithm</title>
+    <mediaobject>
+     <imageobject>
+      <imagedata fileref="images/genetic-algorithm.svg" format="SVG" width="100%"/>
+     </imageobject>
+    </mediaobject>
    </figure>
   </sect1>
 
diff --git a/doc/src/sgml/images/Makefile b/doc/src/sgml/images/Makefile
index 1e7993020b..f9e356348b 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
index e69de29bb2..170cc9ee28 100644
--- a/doc/src/sgml/images/genetic-algorithm.gv
+++ b/doc/src/sgml/images/genetic-algorithm.gv
@@ -0,0 +1,44 @@
+digraph {
+        layout=dot;
+        splines=ortho;
+        nodesep=0.3;
+        ranksep=0.3;
+        node [shape=box; width=2.2; fontsize=8];
+        pad="1.0, 0.5";
+        bgcolor=grey95;
+
+        // title
+        // label="Structure of a Genetic Algorithm" fontsize=26;
+
+
+        // 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]; // forces 'true'-edge to right side of figure
+
+        // explain the notation
+        expl [shape=plaintext; fontsize=10; width=3.2;
+              label="P(t) generation of ancestors at a time t\nP''(t) generation of descendants at a time t"];
+
+}
diff --git a/doc/src/sgml/images/genetic-algorithm.svg b/doc/src/sgml/images/genetic-algorithm.svg
index e69de29bb2..2db8bef230 100644
--- a/doc/src/sgml/images/genetic-algorithm.svg
+++ b/doc/src/sgml/images/genetic-algorithm.svg
@@ -0,0 +1,139 @@
+<?xml version="1.0"?>
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg xmlns="http://www.w3.org/2000/svg"; xmlns:xlink="http://www.w3.org/1999/xlink"; width="619pt" height="580pt" viewBox="0.00 0.00 619.00 580.00">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(72 544)">
+<title>%3</title>
+<polygon fill="#f2f2f2" stroke="none" points="-72,36 -72,-544 547,-544 547,36 -72,36"/>
+<!-- a1 -->
+<g id="node1" class="node">
+<title>a1</title>
+<polygon fill="none" stroke="#000000" points="223,-508 65,-508 65,-472 223,-472 223,-508"/>
+<text text-anchor="middle" x="144" y="-487.6" font-family="Times,serif" font-size="8.00" fill="#000000">INITIALIZE t := 0</text>
+</g>
+<!-- a2 -->
+<g id="node2" class="node">
+<title>a2</title>
+<polygon fill="none" stroke="#000000" points="223,-450 65,-450 65,-414 223,-414 223,-450"/>
+<text text-anchor="middle" x="144" y="-429.6" font-family="Times,serif" font-size="8.00" fill="#000000">INITIALIZE P(t)</text>
+</g>
+<!-- a1&#45;&gt;a2 -->
+<g id="edge1" class="edge">
+<title>a1-&gt;a2</title>
+<path fill="none" stroke="#000000" d="M144,-471.9664C144,-471.9664 144,-460.2222 144,-460.2222"/>
+<polygon fill="#000000" stroke="#000000" points="147.5001,-460.2222 144,-450.2222 140.5001,-460.2223 147.5001,-460.2222"/>
+</g>
+<!-- a3 -->
+<g id="node3" class="node">
+<title>a3</title>
+<polygon fill="none" stroke="#000000" points="223,-392 65,-392 65,-356 223,-356 223,-392"/>
+<text text-anchor="middle" x="144" y="-371.6" font-family="Times,serif" font-size="8.00" fill="#000000">evaluate FITNESS of P(t)</text>
+</g>
+<!-- a2&#45;&gt;a3 -->
+<g id="edge2" class="edge">
+<title>a2-&gt;a3</title>
+<path fill="none" stroke="#000000" d="M144,-413.9664C144,-413.9664 144,-402.2222 144,-402.2222"/>
+<polygon fill="#000000" stroke="#000000" points="147.5001,-402.2222 144,-392.2222 140.5001,-402.2223 147.5001,-402.2222"/>
+</g>
+<!-- a4 -->
+<g id="node4" class="node">
+<title>a4</title>
+<polygon fill="none" stroke="#000000" points="144,-334 0,-316 144,-298 288,-316 144,-334"/>
+<text text-anchor="middle" x="144" y="-313.6" font-family="Times,serif" font-size="8.00" fill="#000000">STOPPING CRITERION</text>
+</g>
+<!-- a3&#45;&gt;a4 -->
+<g id="edge3" class="edge">
+<title>a3-&gt;a4</title>
+<path fill="none" stroke="#000000" d="M144,-355.9664C144,-355.9664 144,-344.2222 144,-344.2222"/>
+<polygon fill="#000000" stroke="#000000" points="147.5001,-344.2222 144,-334.2222 140.5001,-344.2223 147.5001,-344.2222"/>
+</g>
+<!-- a9 -->
+<g id="node5" class="node">
+<title>a9</title>
+<polygon fill="none" stroke="#000000" points="162,-40 4,-40 4,-4 162,-4 162,-40"/>
+<text text-anchor="middle" x="83" y="-19.6" font-family="Times,serif" font-size="8.00" fill="#000000">t := t + 1</text>
+</g>
+<!-- a4&#45;&gt;a9 -->
+<g id="edge10" class="edge">
+<title>a4-&gt;a9</title>
+<path fill="none" stroke="#000000" d="M34.5,-301.382C34.5,-301.382 34.5,-40.2869 34.5,-40.2869"/>
+<polygon fill="#000000" stroke="#000000" points="31.0001,-301.3819 34.5,-311.382 38.0001,-301.382 31.0001,-301.3819"/>
+</g>
+<!-- end -->
+<g id="node6" class="node">
+<title>end</title>
+<ellipse fill="none" stroke="#000000" cx="257" cy="-22" rx="18" ry="18"/>
+<ellipse fill="none" stroke="#000000" cx="257" cy="-22" rx="22" ry="22"/>
+<text text-anchor="middle" x="257" y="-19.6" font-family="Times,serif" font-size="8.00" fill="#000000">end</text>
+</g>
+<!-- a4&#45;&gt;end -->
+<g id="edge5" class="edge">
+<title>a4-&gt;end</title>
+<path fill="none" stroke="#000000" d="M257,-311.8439C257,-311.8439 257,-54.3202 257,-54.3202"/>
+<polygon fill="#000000" stroke="#000000" points="260.5001,-54.3202 257,-44.3202 253.5001,-54.3202 260.5001,-54.3202"/>
+<text text-anchor="middle" x="246.7265" y="-186.0821" font-family="Times,serif" font-size="10.00" fill="#000000">true  </text>
+</g>
+<!-- a5 -->
+<g id="node7" class="node">
+<title>a5</title>
+<polygon fill="none" stroke="#000000" points="223,-276 65,-276 65,-240 223,-240 223,-276"/>
+<text text-anchor="middle" x="144" y="-255.6" font-family="Times,serif" font-size="8.00" fill="#000000">P'(t) := RECOMBINATION{P(t)}</text>
+</g>
+<!-- a4&#45;&gt;a5 -->
+<g id="edge4" class="edge">
+<title>a4-&gt;a5</title>
+<path fill="none" stroke="#000000" d="M144,-297.9664C144,-297.9664 144,-286.2222 144,-286.2222"/>
+<polygon fill="#000000" stroke="#000000" points="147.5001,-286.2222 144,-276.2222 140.5001,-286.2223 147.5001,-286.2222"/>
+<text text-anchor="middle" x="130.8125" y="-283.0943" font-family="Times,serif" font-size="10.00" fill="#000000">false   </text>
+</g>
+<!-- a6 -->
+<g id="node8" class="node">
+<title>a6</title>
+<polygon fill="none" stroke="#000000" points="223,-218 65,-218 65,-182 223,-182 223,-218"/>
+<text text-anchor="middle" x="144" y="-197.6" font-family="Times,serif" font-size="8.00" fill="#000000">P''(t) := MUTATION{P'(t)}</text>
+</g>
+<!-- a5&#45;&gt;a6 -->
+<g id="edge6" class="edge">
+<title>a5-&gt;a6</title>
+<path fill="none" stroke="#000000" d="M144,-239.9664C144,-239.9664 144,-228.2222 144,-228.2222"/>
+<polygon fill="#000000" stroke="#000000" points="147.5001,-228.2222 144,-218.2222 140.5001,-228.2223 147.5001,-228.2222"/>
+</g>
+<!-- a7 -->
+<g id="node9" class="node">
+<title>a7</title>
+<polygon fill="none" stroke="#000000" points="223,-160 65,-160 65,-124 223,-124 223,-160"/>
+<text text-anchor="middle" x="144" y="-139.6" font-family="Times,serif" font-size="8.00" fill="#000000">P(t+1) := SELECTION{P''(t) + P(t)}</text>
+</g>
+<!-- a6&#45;&gt;a7 -->
+<g id="edge7" class="edge">
+<title>a6-&gt;a7</title>
+<path fill="none" stroke="#000000" d="M144,-181.9664C144,-181.9664 144,-170.2222 144,-170.2222"/>
+<polygon fill="#000000" stroke="#000000" points="147.5001,-170.2222 144,-160.2222 140.5001,-170.2223 147.5001,-170.2222"/>
+</g>
+<!-- a8 -->
+<g id="node10" class="node">
+<title>a8</title>
+<polygon fill="none" stroke="#000000" points="223,-102 65,-102 65,-66 223,-66 223,-102"/>
+<text text-anchor="middle" x="144" y="-81.6" font-family="Times,serif" font-size="8.00" fill="#000000">evaluate FITNESS of P''(t)</text>
+</g>
+<!-- a7&#45;&gt;a8 -->
+<g id="edge8" class="edge">
+<title>a7-&gt;a8</title>
+<path fill="none" stroke="#000000" d="M144,-123.9664C144,-123.9664 144,-112.2222 144,-112.2222"/>
+<polygon fill="#000000" stroke="#000000" points="147.5001,-112.2222 144,-102.2222 140.5001,-112.2223 147.5001,-112.2222"/>
+</g>
+<!-- a8&#45;&gt;a9 -->
+<g id="edge9" class="edge">
+<title>a8-&gt;a9</title>
+<path fill="none" stroke="#000000" d="M113.5,-65.7333C113.5,-65.7333 113.5,-50.3504 113.5,-50.3504"/>
+<polygon fill="#000000" stroke="#000000" points="117.0001,-50.3504 113.5,-40.3504 110.0001,-50.3504 117.0001,-50.3504"/>
+</g>
+<!-- expl -->
+<g id="node11" class="node">
+<title>expl</title>
+<text text-anchor="middle" x="360" y="-493" font-family="Times,serif" font-size="10.00" fill="#000000">P(t) generation of ancestors at a time t</text>
+<text text-anchor="middle" x="360" y="-481" font-family="Times,serif" font-size="10.00" fill="#000000">P''(t) generation of descendants at a time t</text>
+</g>
+</g>
+</svg>

Reply via email to