Commits

Ronny Pfannschmidt committed 254f0db

actually add the html files

  • Participants
  • Parent commits 56e4b8e

Comments (0)

Files changed (3)

-.*\.html
 .couchdb-compose-external-cache

ausarbeitung.html

+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
+<title>Betrachtung Genetischer Programmierung</title>
+<meta name="author" content="Ronny Pfannschmidt" />
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger@python.org)
+:Id: $Id: html4css1.css 7056 2011-06-17 10:50:48Z milde $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+  border: 0 }
+
+table.borderless td, table.borderless th {
+  /* Override padding for "table.docutils td" with "! important".
+     The right padding separates the table cells. */
+  padding: 0 0.5em 0 0 ! important }
+
+.first {
+  /* Override more specific margin styles with "! important". */
+  margin-top: 0 ! important }
+
+.last, .with-subtitle {
+  margin-bottom: 0 ! important }
+
+.hidden {
+  display: none }
+
+a.toc-backref {
+  text-decoration: none ;
+  color: black }
+
+blockquote.epigraph {
+  margin: 2em 5em ; }
+
+dl.docutils dd {
+  margin-bottom: 0.5em }
+
+object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
+  overflow: hidden;
+}
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+  font-weight: bold }
+*/
+
+div.abstract {
+  margin: 2em 5em }
+
+div.abstract p.topic-title {
+  font-weight: bold ;
+  text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+  margin: 2em ;
+  border: medium outset ;
+  padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title {
+  color: red ;
+  font-weight: bold ;
+  font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+   compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+  margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+  margin-top: 0.5em }
+*/
+
+div.dedication {
+  margin: 2em 5em ;
+  text-align: center ;
+  font-style: italic }
+
+div.dedication p.topic-title {
+  font-weight: bold ;
+  font-style: normal }
+
+div.figure {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+div.footer, div.header {
+  clear: both;
+  font-size: smaller }
+
+div.line-block {
+  display: block ;
+  margin-top: 1em ;
+  margin-bottom: 1em }
+
+div.line-block div.line-block {
+  margin-top: 0 ;
+  margin-bottom: 0 ;
+  margin-left: 1.5em }
+
+div.sidebar {
+  margin: 0 0 0.5em 1em ;
+  border: medium outset ;
+  padding: 1em ;
+  background-color: #ffffee ;
+  width: 40% ;
+  float: right ;
+  clear: right }
+
+div.sidebar p.rubric {
+  font-family: sans-serif ;
+  font-size: medium }
+
+div.system-messages {
+  margin: 5em }
+
+div.system-messages h1 {
+  color: red }
+
+div.system-message {
+  border: medium outset ;
+  padding: 1em }
+
+div.system-message p.system-message-title {
+  color: red ;
+  font-weight: bold }
+
+div.topic {
+  margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+  margin-top: 0.4em }
+
+h1.title {
+  text-align: center }
+
+h2.subtitle {
+  text-align: center }
+
+hr.docutils {
+  width: 75% }
+
+img.align-left, .figure.align-left, object.align-left {
+  clear: left ;
+  float: left ;
+  margin-right: 1em }
+
+img.align-right, .figure.align-right, object.align-right {
+  clear: right ;
+  float: right ;
+  margin-left: 1em }
+
+img.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+  text-align: left }
+
+.align-center {
+  clear: both ;
+  text-align: center }
+
+.align-right {
+  text-align: right }
+
+/* reset inner alignment in figures */
+div.align-right {
+  text-align: inherit }
+
+/* div.align-center * { */
+/*   text-align: left } */
+
+ol.simple, ul.simple {
+  margin-bottom: 1em }
+
+ol.arabic {
+  list-style: decimal }
+
+ol.loweralpha {
+  list-style: lower-alpha }
+
+ol.upperalpha {
+  list-style: upper-alpha }
+
+ol.lowerroman {
+  list-style: lower-roman }
+
+ol.upperroman {
+  list-style: upper-roman }
+
+p.attribution {
+  text-align: right ;
+  margin-left: 50% }
+
+p.caption {
+  font-style: italic }
+
+p.credits {
+  font-style: italic ;
+  font-size: smaller }
+
+p.label {
+  white-space: nowrap }
+
+p.rubric {
+  font-weight: bold ;
+  font-size: larger ;
+  color: maroon ;
+  text-align: center }
+
+p.sidebar-title {
+  font-family: sans-serif ;
+  font-weight: bold ;
+  font-size: larger }
+
+p.sidebar-subtitle {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+p.topic-title {
+  font-weight: bold }
+
+pre.address {
+  margin-bottom: 0 ;
+  margin-top: 0 ;
+  font: inherit }
+
+pre.literal-block, pre.doctest-block, pre.math {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+span.classifier {
+  font-family: sans-serif ;
+  font-style: oblique }
+
+span.classifier-delimiter {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+span.interpreted {
+  font-family: sans-serif }
+
+span.option {
+  white-space: nowrap }
+
+span.pre {
+  white-space: pre }
+
+span.problematic {
+  color: red }
+
+span.section-subtitle {
+  /* font-size relative to parent (h1..h6 element) */
+  font-size: 80% }
+
+table.citation {
+  border-left: solid 1px gray;
+  margin-left: 1px }
+
+table.docinfo {
+  margin: 2em 4em }
+
+table.docutils {
+  margin-top: 0.5em ;
+  margin-bottom: 0.5em }
+
+table.footnote {
+  border-left: solid 1px black;
+  margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+  padding-left: 0.5em ;
+  padding-right: 0.5em ;
+  vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+  font-weight: bold ;
+  text-align: left ;
+  white-space: nowrap ;
+  padding-left: 0 }
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+  font-size: 100% }
+
+ul.auto-toc {
+  list-style-type: none }
+
+</style>
+<style type="text/css">
+
+.highlight .hll { background-color: #ffffcc }
+.highlight  { background: #ffffff; }
+.highlight .c { color: #008800; font-style: italic } /* Comment */
+.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+.highlight .k { color: #000080; font-weight: bold } /* Keyword */
+.highlight .cm { color: #008800; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #008080 } /* Comment.Preproc */
+.highlight .c1 { color: #008800; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #008800; font-weight: bold } /* Comment.Special */
+.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #aa0000 } /* Generic.Error */
+.highlight .gh { color: #999999 } /* Generic.Heading */
+.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #555555 } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
+.highlight .gt { color: #aa0000 } /* Generic.Traceback */
+.highlight .kc { color: #000080; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #000080; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #000080; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #000080; font-weight: bold } /* Keyword.Pseudo */
+.highlight .kr { color: #000080; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #000080; font-weight: bold } /* Keyword.Type */
+.highlight .m { color: #0000FF } /* Literal.Number */
+.highlight .s { color: #0000FF } /* Literal.String */
+.highlight .na { color: #FF0000 } /* Name.Attribute */
+.highlight .nt { color: #000080; font-weight: bold } /* Name.Tag */
+.highlight .ow { font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mf { color: #0000FF } /* Literal.Number.Float */
+.highlight .mh { color: #0000FF } /* Literal.Number.Hex */
+.highlight .mi { color: #0000FF } /* Literal.Number.Integer */
+.highlight .mo { color: #0000FF } /* Literal.Number.Oct */
+.highlight .sb { color: #0000FF } /* Literal.String.Backtick */
+.highlight .sc { color: #800080 } /* Literal.String.Char */
+.highlight .sd { color: #0000FF } /* Literal.String.Doc */
+.highlight .s2 { color: #0000FF } /* Literal.String.Double */
+.highlight .se { color: #0000FF } /* Literal.String.Escape */
+.highlight .sh { color: #0000FF } /* Literal.String.Heredoc */
+.highlight .si { color: #0000FF } /* Literal.String.Interpol */
+.highlight .sx { color: #0000FF } /* Literal.String.Other */
+.highlight .sr { color: #0000FF } /* Literal.String.Regex */
+.highlight .s1 { color: #0000FF } /* Literal.String.Single */
+.highlight .ss { color: #0000FF } /* Literal.String.Symbol */
+.highlight .il { color: #0000FF } /* Literal.Number.Integer.Long */
+</style>
+</head>
+<body>
+<div class="document" id="betrachtung-genetischer-programmierung">
+<h1 class="title">Betrachtung Genetischer Programmierung</h1>
+<table class="docinfo" frame="void" rules="none">
+<col class="docinfo-name" />
+<col class="docinfo-content" />
+<tbody valign="top">
+<tr><th class="docinfo-name">Author:</th>
+<td>Ronny Pfannschmidt</td></tr>
+<tr class="field-odd field"><th class="docinfo-name">Matr Nr:</th><td class="field-body">250154</td>
+</tr>
+</tbody>
+</table>
+<div class="section" id="grundlagen">
+<h1>Grundlagen</h1>
+<div class="section" id="begriffe">
+<h2>Begriffe</h2>
+<dl class="docutils">
+<dt>Genetische Algorithmen</dt>
+<dd>Klasse von Algorithmen,
+welche die Prinzipien der Evolution Anwenden
+um Problemlöser zu Finden</dd>
+<dt>Genetische Programmierung</dt>
+<dd>Klasse von Genetischen Algorithmen,
+welche anstelle von Merkmalsvektoren Programme oder Funktionen
+als Elemente einer Population haben</dd>
+</dl>
+<p>Allen Genetischen Algorithmen liegen liegen die Komponenten der Evolution
+zu grunde.</p>
+<ol class="arabic simple">
+<li>Es gibt eine Population</li>
+<li>Es gibt Replikaton/Fortpflanzung mit Mutation</li>
+<li>Es gibt Selektion (in der Natur - Überlebung bis Fortpflanzung/Replikation)</li>
+</ol>
+</div>
+<div class="section" id="eigenschaften-des-algorithmus">
+<h2>Eigenschaften des Algorithmus</h2>
+<ul class="simple">
+<li>parallele Suche in einer Population von möglichen Lösungen,
+sodass immer mehrere potentielle Lösungen gefunden werden</li>
+<li>benötigen kaum Problemwissen,
+insbesondere keine Gradienteninformation,
+können also z.B. auch bei diskontinuierlichen Problemen
+angewendet werden</li>
+<li>gehören zur Klasse der stochastischen Suchverfahren
+und ermöglichen damit auch die Behandlung von Problemen,
+die mit traditionellen Optimierungsmethoden nicht mehr handhabbar sind.</li>
+<li>Evolutionäre Algorithmen bieten im Allgemeinen keine Garantie,
+das globale Optimum in vernünftiger Zeit zu finden.</li>
+<li>Großer Nachteil der EAs ist der oft sehr große Rechenzeitbedarf</li>
+</ul>
+</div>
+</div>
+<div class="section" id="ein-einfaches-beispiel">
+<h1>Ein einfaches Beispiel</h1>
+<p>Zu Demonstrationszwecken soll mittels eines Genetischen Programms die
+funktion <cite>f(a, b)=sqrt(a*a + b*b)</cite> angenährt werden.</p>
+<p>dazu stehen die folgenden Funktionsbausteine zur verfuegung</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">gp_add</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span> <span class="k">return</span> <span class="n">a</span><span class="o">+</span><span class="n">b</span>
+<span class="k">def</span> <span class="nf">gp_sub</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span> <span class="k">return</span> <span class="n">a</span><span class="o">-</span><span class="n">b</span>
+<span class="k">def</span> <span class="nf">gp_mul</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span> <span class="k">return</span> <span class="n">a</span><span class="o">*</span><span class="n">b</span>
+<span class="k">def</span> <span class="nf">gp_sqrt</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>   <span class="k">return</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="n">a</span><span class="p">))</span>
+
+<span class="n">functions</span> <span class="o">=</span> <span class="p">{</span>
+    <span class="s">&#39;add&#39;</span><span class="p">:</span> <span class="n">gp_add</span><span class="p">,</span>
+    <span class="s">&#39;sub&#39;</span><span class="p">:</span> <span class="n">gp_sub</span><span class="p">,</span>
+    <span class="s">&#39;mul&#39;</span><span class="p">:</span> <span class="n">gp_mul</span><span class="p">,</span>
+    <span class="s">&#39;sqrt&#39;</span><span class="p">:</span> <span class="n">gp_sqrt</span><span class="p">,</span>
+<span class="p">}</span>
+
+
+<span class="n">stack_functions</span> <span class="o">=</span> <span class="p">{</span>
+    <span class="s">&#39;add&#39;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">stack</span><span class="p">,</span> <span class="n">terminals</span><span class="p">:</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span><span class="o">+</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()),</span>
+    <span class="s">&#39;sub&#39;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">stack</span><span class="p">,</span> <span class="n">terminals</span><span class="p">:</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span><span class="o">-</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()),</span>
+    <span class="s">&#39;mul&#39;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">stack</span><span class="p">,</span> <span class="n">terminals</span><span class="p">:</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span><span class="o">*</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()),</span>
+    <span class="s">&#39;sqrt&#39;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">stack</span><span class="p">,</span> <span class="n">terminals</span><span class="p">:</span><span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()))),</span>
+<span class="p">}</span>
+
+<span class="n">stack_terminas</span> <span class="o">=</span> <span class="p">{</span>
+    <span class="s">&#39;a&#39;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">stack</span><span class="p">,</span> <span class="n">terminals</span><span class="p">:</span> <span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">terminals</span><span class="p">[</span><span class="s">&#39;a&#39;</span><span class="p">]),</span>
+    <span class="s">&#39;b&#39;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">stack</span><span class="p">,</span> <span class="n">terminals</span><span class="p">:</span> <span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">terminals</span><span class="p">[</span><span class="s">&#39;b&#39;</span><span class="p">]),</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Den Hauptteil des Programmes stellt dabei</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">main_run</span><span class="p">(</span><span class="n">eval_func</span><span class="p">,</span> <span class="n">options</span><span class="p">):</span>
+    <span class="n">genome</span> <span class="o">=</span> <span class="n">GTree</span><span class="o">.</span><span class="n">GTreeGP</span><span class="p">()</span>
+    <span class="n">genome</span><span class="o">.</span><span class="n">setParams</span><span class="p">(</span><span class="n">max_depth</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s">&quot;ramped&quot;</span><span class="p">)</span>
+    <span class="n">genome</span><span class="o">.</span><span class="n">evaluator</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">eval_func</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
+    <span class="n">genome</span><span class="o">.</span><span class="n">evaluator</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">eval_height</span><span class="p">,</span> <span class="n">options</span><span class="o">.</span><span class="n">height_weight</span><span class="p">)</span>
+
+    <span class="n">ga</span> <span class="o">=</span> <span class="n">GSimpleGA</span><span class="o">.</span><span class="n">GSimpleGA</span><span class="p">(</span><span class="n">genome</span><span class="p">)</span>
+    <span class="n">ga</span><span class="o">.</span><span class="n">setParams</span><span class="p">(</span><span class="n">gp_terminals</span><span class="o">=</span><span class="p">[</span><span class="s">&#39;a&#39;</span><span class="p">,</span> <span class="s">&#39;b&#39;</span><span class="p">],</span>
+                 <span class="n">gp_function_set</span><span class="o">=</span><span class="p">{</span>
+                     <span class="s">&#39;add&#39;</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
+                     <span class="s">&#39;sub&#39;</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
+                     <span class="s">&#39;mul&#39;</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
+                     <span class="s">&#39;sqrt&#39;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
+                 <span class="p">})</span>
+    <span class="n">ga</span><span class="o">.</span><span class="n">setMinimax</span><span class="p">(</span><span class="n">Consts</span><span class="o">.</span><span class="n">minimaxType</span><span class="p">[</span><span class="s">&quot;minimize&quot;</span><span class="p">])</span>
+    <span class="n">ga</span><span class="o">.</span><span class="n">setGenerations</span><span class="p">(</span><span class="n">options</span><span class="o">.</span><span class="n">generations</span><span class="p">)</span>
+    <span class="n">ga</span><span class="o">.</span><span class="n">setMutationRate</span><span class="p">(</span><span class="mf">0.08</span><span class="p">)</span>
+    <span class="n">ga</span><span class="o">.</span><span class="n">setCrossoverRate</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
+    <span class="n">ga</span><span class="o">.</span><span class="n">setPopulationSize</span><span class="p">(</span><span class="n">options</span><span class="o">.</span><span class="n">population</span><span class="p">)</span>
+    <span class="n">ga</span><span class="o">.</span><span class="n">evolve</span><span class="p">(</span><span class="n">freq_stats</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span>
+
+    <span class="k">print</span> <span class="n">ga</span><span class="o">.</span><span class="n">bestIndividual</span><span class="p">()</span><span class="o">.</span><span class="n">getPreOrderExpression</span><span class="p">()</span>
+</pre></div>
+</div>
+<div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
+    <span class="kn">import</span> <span class="nn">argparse</span>
+    <span class="n">parser</span> <span class="o">=</span> <span class="n">argparse</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">()</span>
+
+    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s">&#39;command&#39;</span><span class="p">)</span>
+    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s">&#39;--generations&#39;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="nb">int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">500</span><span class="p">)</span>
+    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s">&#39;--population&#39;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="nb">int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">1500</span><span class="p">)</span>
+    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s">&#39;--height-weight&#39;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="nb">float</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
+
+    <span class="n">options</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+    <span class="n">eval_func</span> <span class="o">=</span> <span class="nb">globals</span><span class="p">()[</span><span class="s">&#39;eval_&#39;</span> <span class="o">+</span> <span class="n">options</span><span class="o">.</span><span class="n">command</span><span class="p">]</span>
+    <span class="n">main_run</span><span class="p">(</span><span class="n">eval_func</span><span class="p">,</span> <span class="n">options</span><span class="p">)</span>
+</pre></div>
+</div>
+<p>Als Betrachtungsgrundlage werden 3 Arten
+der Evaluierung gegenüber gestellt.</p>
+<p><strong>code generator basierte evaluierung</strong></p>
+<blockquote>
+<div><div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">eval_code</span><span class="p">(</span><span class="n">chromosome</span><span class="p">):</span>
+    <span class="n">error_accum</span> <span class="o">=</span> <span class="n">Util</span><span class="o">.</span><span class="n">ErrorAccumulator</span><span class="p">()</span>
+    <span class="n">code_comp</span> <span class="o">=</span> <span class="n">chromosome</span><span class="o">.</span><span class="n">getCompiledCode</span><span class="p">()</span>
+    <span class="n">root</span> <span class="o">=</span> <span class="n">chromosome</span><span class="o">.</span><span class="n">getRoot</span><span class="p">()</span>
+    <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">5</span><span class="p">):</span>
+        <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">5</span><span class="p">):</span>
+            <span class="n">a</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
+            <span class="n">b</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
+            <span class="c"># The eval will execute a pre-compiled syntax tree</span>
+            <span class="c"># as a Python expression, and will automatically use</span>
+            <span class="c"># the &quot;a&quot; and &quot;b&quot; variables (the terminals defined)</span>
+            <span class="n">evaluated</span>     <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">code_comp</span><span class="p">,</span> <span class="p">{</span><span class="s">&#39;a&#39;</span><span class="p">:</span><span class="n">a</span><span class="p">,</span> <span class="s">&#39;b&#39;</span><span class="p">:</span><span class="n">b</span><span class="p">},</span> <span class="n">functions</span><span class="p">)</span>
+            <span class="n">target</span>        <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">((</span><span class="n">a</span><span class="o">*</span><span class="n">a</span><span class="p">)</span><span class="o">+</span><span class="p">(</span><span class="n">b</span><span class="o">*</span><span class="n">b</span><span class="p">))</span>
+            <span class="n">error_accum</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">evaluated</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">error_accum</span><span class="o">.</span><span class="n">getRMSE</span><span class="p">()</span>
+</pre></div>
+</div>
+</div></blockquote>
+<p><strong>visitor basierte evaluierung</strong></p>
+<blockquote>
+<div><div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">visit_node</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">terminals</span><span class="p">,</span> <span class="n">functions</span><span class="p">):</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="o">.</span><span class="n">childs</span><span class="p">:</span>
+        <span class="k">return</span> <span class="n">terminals</span><span class="p">[</span><span class="n">node</span><span class="o">.</span><span class="n">node_data</span><span class="p">]</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">func</span> <span class="o">=</span> <span class="n">functions</span><span class="p">[</span><span class="n">node</span><span class="o">.</span><span class="n">node_data</span><span class="p">]</span>
+        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">childs</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="n">visit_node</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">childs</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">terminals</span><span class="p">,</span> <span class="n">functions</span><span class="p">))</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="n">visit_node</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">childs</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">terminals</span><span class="p">,</span> <span class="n">functions</span><span class="p">),</span>
+                        <span class="n">visit_node</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">childs</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">terminals</span><span class="p">,</span> <span class="n">functions</span><span class="p">))</span>
+</pre></div>
+</div>
+<div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">eval_visit</span><span class="p">(</span><span class="n">chromosome</span><span class="p">):</span>
+    <span class="n">error_accum</span> <span class="o">=</span> <span class="n">Util</span><span class="o">.</span><span class="n">ErrorAccumulator</span><span class="p">()</span>
+    <span class="n">root</span> <span class="o">=</span> <span class="n">chromosome</span><span class="o">.</span><span class="n">getRoot</span><span class="p">()</span>
+    <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">5</span><span class="p">):</span>
+        <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">5</span><span class="p">):</span>
+            <span class="n">a</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
+            <span class="n">b</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
+            <span class="n">evaluated</span>     <span class="o">=</span> <span class="n">visit_node</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="p">{</span><span class="s">&#39;a&#39;</span><span class="p">:</span><span class="n">a</span><span class="p">,</span> <span class="s">&#39;b&#39;</span><span class="p">:</span><span class="n">b</span><span class="p">},</span> <span class="n">functions</span><span class="p">)</span>
+            <span class="n">target</span>        <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">((</span><span class="n">a</span><span class="o">*</span><span class="n">a</span><span class="p">)</span><span class="o">+</span><span class="p">(</span><span class="n">b</span><span class="o">*</span><span class="n">b</span><span class="p">))</span>
+            <span class="n">error_accum</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">evaluated</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">error_accum</span><span class="o">.</span><span class="n">getRMSE</span><span class="p">()</span>
+</pre></div>
+</div>
+</div></blockquote>
+<p><strong>operator list basierte evaluation</strong></p>
+<blockquote>
+<div><div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">nodeops</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">functions</span><span class="p">):</span>
+    <span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
+    <span class="n">_nodeops</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="n">functions</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">res</span>
+</pre></div>
+</div>
+<div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">_nodeops</span><span class="p">(</span><span class="n">ops</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="n">functions</span><span class="p">):</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="o">.</span><span class="n">childs</span><span class="p">:</span>
+        <span class="n">ops</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">stack_terminas</span><span class="p">[</span><span class="n">node</span><span class="o">.</span><span class="n">node_data</span><span class="p">])</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="k">for</span> <span class="n">child</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">childs</span><span class="p">:</span>
+            <span class="n">_nodeops</span><span class="p">(</span><span class="n">ops</span><span class="p">,</span> <span class="n">child</span><span class="p">,</span> <span class="n">functions</span><span class="p">)</span>
+        <span class="n">ops</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">stack_functions</span><span class="p">[</span><span class="n">node</span><span class="o">.</span><span class="n">node_data</span><span class="p">])</span>
+</pre></div>
+</div>
+<div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">eval_stack</span><span class="p">(</span><span class="n">chromosome</span><span class="p">):</span>
+    <span class="n">error_accum</span> <span class="o">=</span> <span class="n">Util</span><span class="o">.</span><span class="n">ErrorAccumulator</span><span class="p">()</span>
+    <span class="n">root</span> <span class="o">=</span> <span class="n">chromosome</span><span class="o">.</span><span class="n">getRoot</span><span class="p">()</span>
+    <span class="n">ops</span> <span class="o">=</span> <span class="n">nodeops</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">functions</span><span class="p">)</span>
+    <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">5</span><span class="p">):</span>
+        <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">5</span><span class="p">):</span>
+            <span class="n">a</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
+            <span class="n">b</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
+            <span class="c"># The eval will execute a pre-compiled syntax tree</span>
+            <span class="c"># as a Python expression, and will automatically use</span>
+            <span class="c"># the &quot;a&quot; and &quot;b&quot; variables (the terminals defined)</span>
+            <span class="n">evaluated</span>     <span class="o">=</span> <span class="n">eval_ops</span><span class="p">(</span><span class="n">ops</span><span class="p">,</span> <span class="p">{</span><span class="s">&#39;a&#39;</span><span class="p">:</span><span class="n">a</span><span class="p">,</span> <span class="s">&#39;b&#39;</span><span class="p">:</span><span class="n">b</span><span class="p">})</span>
+            <span class="n">target</span>        <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">((</span><span class="n">a</span><span class="o">*</span><span class="n">a</span><span class="p">)</span><span class="o">+</span><span class="p">(</span><span class="n">b</span><span class="o">*</span><span class="n">b</span><span class="p">))</span>
+            <span class="n">error_accum</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">evaluated</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">error_accum</span><span class="o">.</span><span class="n">getRMSE</span><span class="p">()</span>
+</pre></div>
+</div>
+</div></blockquote>
+<div class="section" id="resultate-des-geschwindigkeitsvergleiches">
+<h2>Resultate des Geschwindigkeitsvergleiches</h2>
+<div class="highlight-python"><pre>pypy-bin stack
+  real 1m48.747s
+  user 1m47.867s
+  sys 0m0.284s
+pypy-bin visit
+  real 2m44.631s
+  user 2m43.050s
+  sys 0m0.684s
+pypy-bin code
+  real 5m24.300s
+  user 5m21.348s
+  sys 0m1.460s
+python stack
+  real 8m28.568s
+  user 8m25.172s
+  sys 0m1.340s
+python visit
+  real 12m28.534s
+  user 12m22.086s
+  sys 0m1.620s
+python code
+  real 11m37.197s
+  user 11m33.135s
+  sys 0m1.212s
+
+</pre>
+</div>
+</div>
+<div class="section" id="demonstration-der-eigenheiten-des-algorithmus">
+<h2>Demonstration der Eigenheiten des Algorithmus</h2>
+<p>Um diverse Eigenheiten zu demonstrieren,
+werden gewinnene Individuen aus Verschiedenen generationen entnommen</p>
+<ol class="arabic simple">
+<li>Tote Teile des Genoms</li>
+</ol>
+<blockquote>
+<div><div class="highlight-python"><div class="highlight"><pre><span class="n">add</span><span class="p">(</span>
+  <span class="n">mul</span><span class="p">(</span>
+    <span class="n">sub</span><span class="p">(</span>
+      <span class="n">sub</span><span class="p">(</span><span class="n">add</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span> <span class="n">mul</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="p">)),</span>
+      <span class="n">sub</span><span class="p">(</span><span class="n">sqrt</span><span class="p">(</span><span class="n">a</span><span class="p">),</span> <span class="n">sub</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">b</span><span class="p">))),</span>
+    <span class="n">sqrt</span><span class="p">(</span><span class="n">sub</span><span class="p">(</span><span class="n">mul</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span> <span class="n">mul</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)))),</span>
+  <span class="n">sqrt</span><span class="p">(</span><span class="n">add</span><span class="p">(</span>
+    <span class="n">add</span><span class="p">(</span><span class="n">mul</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span> <span class="n">mul</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">b</span><span class="p">)),</span>
+    <span class="n">mul</span><span class="p">(</span><span class="n">sub</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span> <span class="n">a</span><span class="p">))))</span>
+</pre></div>
+</div>
+<p>in diesem beispiel ist die sequenz <cite>sub(b, b)</cite> der &quot;fehler&quot;
+es ist ein typischer Auslöschungsfehler</p>
+</div></blockquote>
+<ol class="arabic simple" start="2">
+<li>fehlerdaten bei zuwenig generationen</li>
+</ol>
+<blockquote>
+<div><p>folgend ist das beste individuum bei einem lauf mit 50 generationen</p>
+<p>es ist unschwer zu erkennen, dass es weit vom optimum ist</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="n">sqrt</span><span class="p">(</span><span class="n">add</span><span class="p">(</span>
+  <span class="n">sqrt</span><span class="p">(</span><span class="n">mul</span><span class="p">(</span><span class="n">sub</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span> <span class="n">mul</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="p">))),</span>
+  <span class="n">add</span><span class="p">(</span>
+    <span class="n">mul</span><span class="p">(</span><span class="n">sub</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">b</span><span class="p">)),</span>
+    <span class="n">add</span><span class="p">(</span><span class="n">mul</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">a</span><span class="p">),</span> <span class="n">mul</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">b</span><span class="p">)))))</span>
+</pre></div>
+</div>
+</div></blockquote>
+<ol class="arabic simple" start="3">
+<li>fehlerdaten bei zu geringer population</li>
+</ol>
+<blockquote>
+<div><p>folgend ist das beste individuum wenn die populationsgroesse stark reduziert ist</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="n">add</span><span class="p">(</span>
+  <span class="n">sqrt</span><span class="p">(</span><span class="n">add</span><span class="p">(</span>
+    <span class="n">mul</span><span class="p">(</span><span class="n">sqrt</span><span class="p">(</span><span class="n">b</span><span class="p">),</span> <span class="n">add</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">b</span><span class="p">)),</span>
+    <span class="n">sub</span><span class="p">(</span><span class="n">sqrt</span><span class="p">(</span><span class="n">b</span><span class="p">),</span> <span class="n">a</span><span class="p">))),</span>
+  <span class="n">sqrt</span><span class="p">(</span><span class="n">sub</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">a</span><span class="p">))))</span>
+</pre></div>
+</div>
+</div></blockquote>
+</div>
+</div>
+<div class="section" id="resultat-eines-erfolreichen-durchlaufes">
+<h1>Resultat eines Erfolreichen Durchlaufes</h1>
+<dl class="docutils">
+<dt>500 generationen</dt>
+<dd><div class="first last highlight-python"><div class="highlight"><pre><span class="n">sqrt</span><span class="p">(</span><span class="n">sub</span><span class="p">(</span>
+  <span class="n">sub</span><span class="p">(</span><span class="n">add</span><span class="p">(</span><span class="n">mul</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">a</span><span class="p">),</span> <span class="n">mul</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">b</span><span class="p">)),</span> <span class="n">a</span><span class="p">),</span> <span class="n">a</span><span class="p">))</span>
+</pre></div>
+</div>
+</dd>
+<dt>1000 generationen</dt>
+<dd>sqrt(add(add(mul(b, b), mul(a, a)), mul(sub(b, b), mul(sub(a, a), sub(b, a)))))</dd>
+<dt>2000 generationen 2000 pop</dt>
+<dd>sqrt(add(add(mul(b, b), mul(a, a)), mul(add(add(b, a), a), mul(mul(a, a), sub(a, a)))))</dd>
+<dt>40 gen, 2000 items, kosten fuer tiefe</dt>
+<dd>sqrt(add(mul(b, b), mul(a, a)))</dd>
+</dl>
+<p>Beispiel schneller erfolgreicher run:w:</p>
+<div class="highlight-python"><pre>$ PYTHONPATH=../pyevolve/ pypy-bin funfind.py stack \
+&gt;           --generations 2000 \
+&gt;           --population 2000 \
+&gt;           --height-weight=0.00000001
+Gen. 0 (0.00%): Max/Min/Avg Fitness(Raw) [1575.10(640067.30)/1312.04(0.72)/1312.58(1312.58)]
+Gen. 20 (1.00%): Max/Min/Avg Fitness(Raw) [5.18(927.35)/4.32(0.70)/4.32(4.32)]
+Gen. 40 (2.00%): Max/Min/Avg Fitness(Raw) [6.80(1388.24)/5.66(0.61)/5.67(5.67)]
+Gen. 60 (3.00%): Max/Min/Avg Fitness(Raw) [6.52(3972.74)/5.43(0.00)/5.43(5.43)]
+^C
+  A break was detected, you have interrupted the evolution !
+
+Gen. 72 (3.60%): Max/Min/Avg Fitness(Raw) [4.99(1178.43)/4.16(0.00)/4.16(4.16)]
+Total time elapsed: 21.301 seconds.
+sqrt(add(mul(b, b), mul(a, a)))</pre>
+</div>
+<ul class="simple">
+<li>titelliste</li>
+<li>basics erklaeren</li>
+<li>perf vergleich python pypy<ul>
+<li>optimierungen erlaeutern/vergleichen</li>
+</ul>
+</li>
+<li>problem des zufalls erlautern</li>
+<li>multicpu
+auf pypy und cpython vergleichen</li>
+<li>network</li>
+<li>transformation von merkmalsvektoren (wie zum geier abbilden):</li>
+</ul>
+</div>
+</div>
+</body>
+</html>
+<h1>tabular</h1><style>
+  .correct {background-color: green;}
+  .incorrect {background-color: red;}
+</style><h2>legend</h2>
+<dl>    
+  <dt>left to right
+  <dd>generations
+  <dt>top to botom
+  <dd>population
+  <dt>red
+  <dd>incorrect result
+  <dt>green
+  <dd> correct result
+</dl><h2>heights weight -2</h2>
+<table>
+  <tr>
+    <th>*
+  <th>20
+  <th>50
+  <th>100
+  <th>300
+  <th>500
+  <th>1000
+  <th>1500
+  <th>2000
+  <th>3000
+  <th>5000
+  <tr><th>20
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>50
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>100
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>300
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1000
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>2000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>3000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>5000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+</table><h2>heights weight -1</h2>
+<table>
+  <tr>
+    <th>*
+  <th>20
+  <th>50
+  <th>100
+  <th>300
+  <th>500
+  <th>1000
+  <th>1500
+  <th>2000
+  <th>3000
+  <th>5000
+  <tr><th>20
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>50
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>100
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>300
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>2000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>3000
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>5000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+</table><h2>heights weight -0.1</h2>
+<table>
+  <tr>
+    <th>*
+  <th>20
+  <th>50
+  <th>100
+  <th>300
+  <th>500
+  <th>1000
+  <th>1500
+  <th>2000
+  <th>3000
+  <th>5000
+  <tr><th>20
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>50
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>100
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>300
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>2000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>3000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>5000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+</table><h2>heights weight -0.01</h2>
+<table>
+  <tr>
+    <th>*
+  <th>20
+  <th>50
+  <th>100
+  <th>300
+  <th>500
+  <th>1000
+  <th>1500
+  <th>2000
+  <th>3000
+  <th>5000
+  <tr><th>20
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>50
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>100
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>300
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>2000
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>3000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>5000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+</table><h2>heights weight -0.001</h2>
+<table>
+  <tr>
+    <th>*
+  <th>20
+  <th>50
+  <th>100
+  <th>300
+  <th>500
+  <th>1000
+  <th>1500
+  <th>2000
+  <th>3000
+  <th>5000
+  <tr><th>20
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>50
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>100
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>300
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>500
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>2000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>3000
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>5000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+</table><h2>heights weight 0</h2>
+<table>
+  <tr>
+    <th>*
+  <th>20
+  <th>50
+  <th>100
+  <th>300
+  <th>500
+  <th>1000
+  <th>1500
+  <th>2000
+  <th>3000
+  <th>5000
+  <tr><th>20
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>50
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>100
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>300
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>2000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>3000
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>5000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+</table><h2>heights weight 0.001</h2>
+<table>
+  <tr>
+    <th>*
+  <th>20
+  <th>50
+  <th>100
+  <th>300
+  <th>500
+  <th>1000
+  <th>1500
+  <th>2000
+  <th>3000
+  <th>5000
+  <tr><th>20
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>50
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>100
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>300
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>1000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>2000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>3000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>5000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+</table><h2>heights weight 0.01</h2>
+<table>
+  <tr>
+    <th>*
+  <th>20
+  <th>50
+  <th>100
+  <th>300
+  <th>500
+  <th>1000
+  <th>1500
+  <th>2000
+  <th>3000
+  <th>5000
+  <tr><th>20
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>50
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>100
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>300
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1500
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>2000
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>3000
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>5000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+</table><h2>heights weight 0.1</h2>
+<table>
+  <tr>
+    <th>*
+  <th>20
+  <th>50
+  <th>100
+  <th>300
+  <th>500
+  <th>1000
+  <th>1500
+  <th>2000
+  <th>3000
+  <th>5000
+  <tr><th>20
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>50
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>100
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>300
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1000
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1500
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>2000
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>3000
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>5000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+</table><h2>heights weight 1</h2>
+<table>
+  <tr>
+    <th>*
+  <th>20
+  <th>50
+  <th>100
+  <th>300
+  <th>500
+  <th>1000
+  <th>1500
+  <th>2000
+  <th>3000
+  <th>5000
+  <tr><th>20
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>50
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>100
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>300
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>2000
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>3000
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>5000
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+</table><h2>heights weight 2</h2>
+<table>
+  <tr>
+    <th>*
+  <th>20
+  <th>50
+  <th>100
+  <th>300
+  <th>500
+  <th>1000
+  <th>1500
+  <th>2000
+  <th>3000
+  <th>5000
+  <tr><th>20
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>50
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>100
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>300
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+  <tr><th>500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>1500
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>2000
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>3000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+  <tr><th>5000
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=incorrect>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+    <td class=correct>&nbsp
+</table>