<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://www.heatonresearch.com"  xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>Heaton Research</title>
 <link>http://www.heatonresearch.com</link>
 <description></description>
 <language>en</language>
<item>
 <title>Preferred language for AI and Data Science?</title>
 <link>http://www.heatonresearch.com/node/4756</link>
 <description>&lt;form action=&quot;/rss.xml&quot; method=&quot;post&quot; id=&quot;poll-view-voting&quot; accept-charset=&quot;UTF-8&quot;&gt;&lt;div&gt;&lt;div class=&quot;poll&quot;&gt;
  &lt;div class=&quot;vote-form&quot;&gt;
    &lt;div class=&quot;choices&quot;&gt;
            &lt;div class=&quot;form-item form-type-radios form-item-choice&quot;&gt;
  &lt;label class=&quot;element-invisible&quot; for=&quot;edit-choice&quot;&gt;Choices &lt;/label&gt;
 &lt;div id=&quot;edit-choice&quot; class=&quot;form-radios&quot;&gt;&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-351&quot; name=&quot;choice&quot; value=&quot;351&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-351&quot;&gt;Python 2.7.x &lt;/label&gt;

&lt;/div&gt;
&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-352&quot; name=&quot;choice&quot; value=&quot;352&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-352&quot;&gt;Python 3.x &lt;/label&gt;

&lt;/div&gt;
&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-353&quot; name=&quot;choice&quot; value=&quot;353&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-353&quot;&gt;R &lt;/label&gt;

&lt;/div&gt;
&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-354&quot; name=&quot;choice&quot; value=&quot;354&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-354&quot;&gt;Java &lt;/label&gt;

&lt;/div&gt;
&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-355&quot; name=&quot;choice&quot; value=&quot;355&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-355&quot;&gt;C# &lt;/label&gt;

&lt;/div&gt;
&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-356&quot; name=&quot;choice&quot; value=&quot;356&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-356&quot;&gt;C++ &lt;/label&gt;

&lt;/div&gt;
&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-357&quot; name=&quot;choice&quot; value=&quot;357&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-357&quot;&gt;Other &lt;/label&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
    &lt;/div&gt;
    &lt;input type=&quot;submit&quot; id=&quot;edit-vote&quot; name=&quot;op&quot; value=&quot;Vote&quot; class=&quot;form-submit&quot; /&gt;  &lt;/div&gt;
    &lt;input type=&quot;hidden&quot; name=&quot;form_build_id&quot; value=&quot;form-2cEgjN5PJL-fmh7RwbgBWEZtF9jIbn8clhymcEKhYjI&quot; /&gt;
&lt;input type=&quot;hidden&quot; name=&quot;form_id&quot; value=&quot;poll_view_voting&quot; /&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/form&gt;</description>
 <pubDate>Tue, 02 Sep 2014 17:32:08 +0000</pubDate>
 <dc:creator>jeffheaton</dc:creator>
 <guid isPermaLink="false">4756 at http://www.heatonresearch.com</guid>
 <comments>http://www.heatonresearch.com/node/4756#comments</comments>
</item>
<item>
 <title>Java build tool of choice.</title>
 <link>http://www.heatonresearch.com/node/3469</link>
 <description>&lt;form action=&quot;/rss.xml&quot; method=&quot;post&quot; id=&quot;poll-view-voting--2&quot; accept-charset=&quot;UTF-8&quot;&gt;&lt;div&gt;&lt;div class=&quot;poll&quot;&gt;
  &lt;div class=&quot;vote-form&quot;&gt;
    &lt;div class=&quot;choices&quot;&gt;
            &lt;div class=&quot;form-item form-type-radios form-item-choice&quot;&gt;
  &lt;label class=&quot;element-invisible&quot; for=&quot;edit-choice--2&quot;&gt;Choices &lt;/label&gt;
 &lt;div id=&quot;edit-choice--2&quot; class=&quot;form-radios&quot;&gt;&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-346&quot; name=&quot;choice&quot; value=&quot;346&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-346&quot;&gt;Ant &lt;/label&gt;

&lt;/div&gt;
&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-347&quot; name=&quot;choice&quot; value=&quot;347&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-347&quot;&gt;Maven &lt;/label&gt;

&lt;/div&gt;
&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-348&quot; name=&quot;choice&quot; value=&quot;348&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-348&quot;&gt;Gradle &lt;/label&gt;

&lt;/div&gt;
&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-349&quot; name=&quot;choice&quot; value=&quot;349&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-349&quot;&gt;Gant &lt;/label&gt;

&lt;/div&gt;
&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-350&quot; name=&quot;choice&quot; value=&quot;350&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-350&quot;&gt;Other (list in comments) &lt;/label&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
    &lt;/div&gt;
    &lt;input type=&quot;submit&quot; id=&quot;edit-vote--2&quot; name=&quot;op&quot; value=&quot;Vote&quot; class=&quot;form-submit&quot; /&gt;  &lt;/div&gt;
    &lt;input type=&quot;hidden&quot; name=&quot;form_build_id&quot; value=&quot;form-vXTYqajE_aglwL4mzszo1cINzRn6Nym_3MZ19wMJPjc&quot; /&gt;
&lt;input type=&quot;hidden&quot; name=&quot;form_id&quot; value=&quot;poll_view_voting&quot; /&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/form&gt;</description>
 <pubDate>Sun, 12 Jan 2014 00:48:35 +0000</pubDate>
 <dc:creator>jeffheaton</dc:creator>
 <guid isPermaLink="false">3469 at http://www.heatonresearch.com</guid>
 <comments>http://www.heatonresearch.com/node/3469#comments</comments>
</item>
<item>
 <title>Have you ever backed a Kickstarter project?</title>
 <link>http://www.heatonresearch.com/node/3088</link>
 <description>&lt;form action=&quot;/rss.xml&quot; method=&quot;post&quot; id=&quot;poll-view-voting--3&quot; accept-charset=&quot;UTF-8&quot;&gt;&lt;div&gt;&lt;div class=&quot;poll&quot;&gt;
  &lt;div class=&quot;vote-form&quot;&gt;
    &lt;div class=&quot;choices&quot;&gt;
            &lt;div class=&quot;form-item form-type-radios form-item-choice&quot;&gt;
  &lt;label class=&quot;element-invisible&quot; for=&quot;edit-choice--3&quot;&gt;Choices &lt;/label&gt;
 &lt;div id=&quot;edit-choice--3&quot; class=&quot;form-radios&quot;&gt;&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-343&quot; name=&quot;choice&quot; value=&quot;343&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-343&quot;&gt;What is Kickstarter? &lt;/label&gt;

&lt;/div&gt;
&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-344&quot; name=&quot;choice&quot; value=&quot;344&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-344&quot;&gt;No, and not interested in Kickstarter &lt;/label&gt;

&lt;/div&gt;
&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-345&quot; name=&quot;choice&quot; value=&quot;345&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-345&quot;&gt;Yes I have &lt;/label&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
    &lt;/div&gt;
    &lt;input type=&quot;submit&quot; id=&quot;edit-vote--3&quot; name=&quot;op&quot; value=&quot;Vote&quot; class=&quot;form-submit&quot; /&gt;  &lt;/div&gt;
    &lt;input type=&quot;hidden&quot; name=&quot;form_build_id&quot; value=&quot;form-ft42-znsL9jmFH6ziltFuqnImOZp2Gpvhd7eVUoZvZ8&quot; /&gt;
&lt;input type=&quot;hidden&quot; name=&quot;form_id&quot; value=&quot;poll_view_voting&quot; /&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/form&gt;</description>
 <pubDate>Mon, 20 May 2013 13:26:56 +0000</pubDate>
 <dc:creator>jeffheaton</dc:creator>
 <guid isPermaLink="false">3088 at http://www.heatonresearch.com</guid>
 <comments>http://www.heatonresearch.com/node/3088#comments</comments>
</item>
<item>
 <title>Encog 3.2 Machine Learning Framework released to beta</title>
 <link>http://www.heatonresearch.com/node/3083</link>
 <description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot;&gt;&lt;p&gt;Both the .Net and Java versions of the &lt;a href=&quot;http://www.heatonresearch.com/encog&quot;&gt;Encog Machine Learning Framework&lt;/a&gt; have been released to beta.  The 3.2 version adds many features in the area of evolutionary algorithms.  Specifically enhanced support for NEAT Neural Networks, HyperNEAT Neural Networks, Genetic Programming and Genetic Algorithms.&lt;/p&gt;
&lt;p&gt;There was a previous Java beta release, however for simplicity I am labeling both of these as beta-2.  &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://code.google.com/p/encog-java/downloads/list&quot;&gt;https://code.google.com/p/encog-java/downloads/list&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://code.google.com/p/encog-cs/downloads/list&quot;&gt;https://code.google.com/p/encog-cs/downloads/list&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
 <pubDate>Fri, 17 May 2013 13:28:55 +0000</pubDate>
 <dc:creator>jeffheaton</dc:creator>
 <guid isPermaLink="false">3083 at http://www.heatonresearch.com</guid>
 <comments>http://www.heatonresearch.com/node/3083#comments</comments>
</item>
<item>
 <title>Encog 3.2 Beta-1 for Java Released</title>
 <link>http://www.heatonresearch.com/node/3035</link>
 <description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot;&gt;&lt;p&gt;Encog 3.2 beta-1 is released.  Now I am on to Encog C#.  Also want to create a few more examples to address some FAQ&#039;s.  You can download Encog 3.2 from the following URL.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://code.google.com/p/encog-java/downloads/list&quot;&gt;https://code.google.com/p/encog-java/downloads/list&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Some of the major new features in Encog 3.2 include:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Much improved NEAT, with multi-threading
&lt;/li&gt;&lt;li&gt;HyperNEAT
&lt;/li&gt;&lt;li&gt;Genetic Programming
&lt;/li&gt;&lt;li&gt;Code generation for NinjaTrader
&lt;/li&gt;&lt;li&gt;Code generation for MT4
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;There will be more articles coming on the above features.  There are examples for each already.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
 <pubDate>Thu, 18 Apr 2013 01:50:56 +0000</pubDate>
 <dc:creator>jeffheaton</dc:creator>
 <guid isPermaLink="false">3035 at http://www.heatonresearch.com</guid>
 <comments>http://www.heatonresearch.com/node/3035#comments</comments>
</item>
<item>
 <title>With regards to Artificial Intelligence are you solution, implementation or curiosity focused.</title>
 <link>http://www.heatonresearch.com/node/2999</link>
 <description>&lt;form action=&quot;/rss.xml&quot; method=&quot;post&quot; id=&quot;poll-view-voting--4&quot; accept-charset=&quot;UTF-8&quot;&gt;&lt;div&gt;&lt;div class=&quot;poll&quot;&gt;
  &lt;div class=&quot;vote-form&quot;&gt;
    &lt;div class=&quot;choices&quot;&gt;
            &lt;div class=&quot;form-item form-type-radios form-item-choice&quot;&gt;
  &lt;label class=&quot;element-invisible&quot; for=&quot;edit-choice--4&quot;&gt;Choices &lt;/label&gt;
 &lt;div id=&quot;edit-choice--4&quot; class=&quot;form-radios&quot;&gt;&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-339&quot; name=&quot;choice&quot; value=&quot;339&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-339&quot;&gt;Solution - I know what I want done, and I don&amp;#039;t care so much what part of AI I use to do it. &lt;/label&gt;

&lt;/div&gt;
&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-340&quot; name=&quot;choice&quot; value=&quot;340&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-340&quot;&gt;Implementation - I am interested in something specific, like Neural Nets, Support Vector Machines, NEAT, Bayes, etc. &lt;/label&gt;

&lt;/div&gt;
&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-341&quot; name=&quot;choice&quot; value=&quot;341&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-341&quot;&gt;Curiosity - I am interested in AI in general.  I do not have a specific solution or implementation in mind. &lt;/label&gt;

&lt;/div&gt;
&lt;div class=&quot;form-item form-type-radio form-item-choice&quot;&gt;
 &lt;input type=&quot;radio&quot; id=&quot;edit-choice-342&quot; name=&quot;choice&quot; value=&quot;342&quot; class=&quot;form-radio&quot; /&gt;  &lt;label class=&quot;option&quot; for=&quot;edit-choice-342&quot;&gt;Not interested in AI - I landed on this site for one of the general development articles, or another reason. &lt;/label&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
    &lt;/div&gt;
    &lt;input type=&quot;submit&quot; id=&quot;edit-vote--4&quot; name=&quot;op&quot; value=&quot;Vote&quot; class=&quot;form-submit&quot; /&gt;  &lt;/div&gt;
    &lt;input type=&quot;hidden&quot; name=&quot;form_build_id&quot; value=&quot;form-NAbZIUa8g8ZLJykbLVI7CEPyFWoXWwzfBK_sbxV_ghA&quot; /&gt;
&lt;input type=&quot;hidden&quot; name=&quot;form_id&quot; value=&quot;poll_view_voting&quot; /&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/form&gt;</description>
 <pubDate>Thu, 28 Mar 2013 13:06:50 +0000</pubDate>
 <dc:creator>jeffheaton</dc:creator>
 <guid isPermaLink="false">2999 at http://www.heatonresearch.com</guid>
 <comments>http://www.heatonresearch.com/node/2999#comments</comments>
</item>
<item>
 <title>Iterations and Epochs are Evil</title>
 <link>http://www.heatonresearch.com/node/2955</link>
 <description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot;&gt;&lt;p&gt;Many machine learning training algorithms have the concept of an iteration or an epoch.  Both terms mean the same thing.  An iteration is simply on pass through the training algorithm.  At the end of each iteration the accuracy of the machine learning algorithm is evaluated.  This process is continued until the accuracy is sufficient.&lt;/p&gt;
&lt;p&gt;The training iteration is something of a black box.  What happens during a training iteration is largely dependant on what type of machine learning algorithm you are training.  However, there are typically several steps and the machine-learning algorithm is not actually taught anything until the final step of the iteration.  &lt;/p&gt;
&lt;p&gt;The problem with this approach is that it often does not work terribly well with multi-core architecture.  Additionally, it works even worse with a multi-computer grid.  The reason for this is the threads must bottleneck at the end of an iteration.  To use &lt;a href=&quot;http://www.khronos.org/opencl/&quot;&gt;OpenCL&lt;/a&gt; terminology, the end of an iteration is a &lt;a href=&quot;http://en.wikipedia.org/wiki/Fence_instruction&quot;&gt;fence&lt;/a&gt;.  Meaning all threads must reach that point before we continue.  Then once we do continue, all of the threads must start up again.  It would be as if we had to clear the entire global airspace once a day to complete the daily iteration.  This is very wasteful, in terms of getting all of the aircraft down and them back up into the air again.  &lt;/p&gt;
&lt;p&gt;Not every aircraft can land instantly.  Some are probably fairly far from an airport.  Some are probably in the middle of a large ocean.  So have to wait for every aircraft (thread) to finish its current task (a flight).  Then we update something, and let the entire aircraft take off again.  If you can pardon the pun, this approach &quot;would not fly!&quot;  &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.heatonresearch.com/images/article/blog/evil-iterations-1.png&quot; alt=&quot;cpu performance with iterations&quot; /&gt;&lt;br /&gt;
Yet for a multi-threaded iteration based training algorithm this is exactly what you see.  Look at my CPU usage history below.  This is from a hyper-threaded i7 quad core.  See the &quot;icicles&quot;?  Can you guess where my program hit an iteration?  Correct!  At each icicle. In this image it is not that bad.  There is quite a bit of training data.  The longer an iteration takes, the more efficient this approach is.  However notice on a small training set. The icicles are much larger!&lt;br /&gt;&lt;img src=&quot;http://www.heatonresearch.com/images/article/blog/evil-iterations-2.png&quot; alt=&quot;bad cpu performance with iterations&quot; /&gt;&lt;br /&gt;
Performance has frozen over!&lt;/p&gt;
&lt;p&gt;A much better approach is to have a never-ending supply of small work-units.  This can be challenging.  And it often means changing the underlying algorithm to some degree.  As an example of this we will look at &lt;a href=&quot;http://www.heatonresearch.com/encog&quot;&gt;Encog&lt;/a&gt;&#039;s Genetic Programming algorithm.&lt;/p&gt;
&lt;p&gt;Genetic Programming works by creating a population of &quot;programs&quot; or &quot;equations&quot;, referred to as genomes.  Each of these genomes is evaluated and the top genomes mate and mutate to produce the next generation.  In genetic programming iterations are often called generations.   The typical approach for a non-species based genetic algorithm is as follows.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Create a random population of genomes
&lt;/li&gt;&lt;li&gt;Evaluate every genome in the population
&lt;/li&gt;&lt;li&gt;Add some percentage of the top genomes directly into the next generation (elitism)
&lt;/li&gt;&lt;li&gt;Randomly choose to mutate or crossover
&lt;/li&gt;&lt;li&gt;For mutation choose one parent from the population via tournament, then mutate it and add the child to the next generation
&lt;/li&gt;&lt;li&gt;For crossover choose two parents from the population via tournament, then breed a new offspring that is added to the next generation
&lt;/li&gt;&lt;li&gt;Does the next population have the desired population level?  If not, go to step 3
&lt;/li&gt;&lt;li&gt;Replace current population with new population
&lt;/li&gt;&lt;li&gt;Continue back to step 2 until the evaluation has a good enough score
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The iteration ends in step 8.  This is an iteration.  Steps 4 through 7 can be done in parallel. But then the whole process must synchronize at step 9.  An icicle!&lt;/p&gt;
&lt;p&gt;Humans like iterations!  There are many children in the USA right now in Fifth Grade (assuming you are not reading this in the summer).  They will all enter Sixth grade at approximately the same time.  Typically sometime in August or September.  That is not terribly natural.  &lt;/p&gt;
&lt;p&gt;An example more from nature is generations.  This might be a Western concept, but I identify myself as &quot;Generation X&quot;.  My parents are baby boomers.  Children in school now are either Generation Y or Millennials.  When did Generation X stop?  Who was the very last baby that was born into generation X? No one knows exactly.  This is an attempt to place human conceived labels onto a natural process that cannot so easily be labeled.&lt;/p&gt;
&lt;p&gt;We need a similar process for Genetic Programming.  Encog GP makes use of the following process that is constantly running inside of a pool of threads equal to the core count of the machine.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Randomly choose to mutate or crossover
&lt;/li&gt;&lt;li&gt;For mutation choose one parent from the population via tournament, then mutate it producing a child
&lt;/li&gt;&lt;li&gt;For crossover choose two parents from the population via tournament, then breed a new child
&lt;/li&gt;&lt;li&gt;For each child, choose an existing population member via anti-tournament to kill. The child replaces this &quot;unlucky&quot; genome.
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Some thread synchronization is very necessary for this to happen.  Particularly where genomes are entering and exiting the population.  However, there are no icicles with this approach.  The CPU is pegged solid!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.heatonresearch.com/images/article/blog/evil-iterations-3.png&quot; alt=&quot;cpu performance with iterations&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You might be asking, &quot;What happened to elitism&quot;.  Elitism is where the top genomes are passed directly onto the next generation.  This is actually not a natural process.  The fact that genomes are killed by anti-tournament accomplishes much of the same thing.  &lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
 <pubDate>Wed, 20 Feb 2013 10:41:47 +0000</pubDate>
 <dc:creator>jeffheaton</dc:creator>
 <guid isPermaLink="false">2955 at http://www.heatonresearch.com</guid>
 <comments>http://www.heatonresearch.com/node/2955#comments</comments>
</item>
<item>
 <title>AI Debugging</title>
 <link>http://www.heatonresearch.com/node/2924</link>
 <description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot;&gt;&lt;p&gt;The fact that Encog corrects for many of my dumb mistakes can make debugging interesting. Most machine learning algorithms contain multiple sub-algorithms to ultimately converge. Consider NEAT, or any GA for that matter. You have mutation and crossover working. Both going at the same goal (convergence) just by different means. Even if I destroy the crossover operation to the point of being counterproductive (like I just did by mistake), it still converges. Mutation just steps up to the plate and works harder. Of course overall convergence time suffers, but it still fundamentally &quot;works&quot;. There are other examples of this. LMA is another great example, mess up either the Newton or Gradient Descent and the other side steps up. This is why when I make changes a real &quot;warning sign&quot; that I have to look out for is if all of a sudden more iterations are needed for something, even if it actually &quot;works&quot;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
 <pubDate>Sun, 27 Jan 2013 13:49:01 +0000</pubDate>
 <dc:creator>jeffheaton</dc:creator>
 <guid isPermaLink="false">2924 at http://www.heatonresearch.com</guid>
 <comments>http://www.heatonresearch.com/node/2924#comments</comments>
</item>
<item>
 <title>Updates on Encog NEAT and HyperNEAT Progress</title>
 <link>http://www.heatonresearch.com/node/2916</link>
 <description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot;&gt;&lt;p&gt;Over the last few weeks NEAT and HyperNEAT have been the focus of my Encog efforts.  Support for NEAT has existed in Encog for some time.  However, it has never worked terribly well.  There were many bugs that were fixed during Encog 3.2.  Additionally, there have been many performance improvements to NEAT.  &lt;/p&gt;
&lt;p&gt;HyperNEAT is the current area of work.  HyperNEAT builds directly on top of NEAT.  In a nutshell, HyperNEAT works by evolving neural networks to create neural networks.  The final output from HyperNEAT is a neural network called a CPPN.  The CPPN is used to create a regular NEAT neural network capable of solving the problem you are training for.  This two-phased approach can allow HyperNEAT to train for very high-dimensional problems.  These same high-dimensional problems would take an eternity to train in regular NEAT.&lt;/p&gt;
&lt;p&gt;At this point I have both NEAT and HyperNEAT working relatively well in Encog for Java.  There are more improvements to be made before I consider it done.  However, it is getting close.  The performance is not nearly where I would like it to be.  Currently Encog NEAT is single threaded.  I will add multi-threaded last.  My goals at this point are as follows.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Finish last remaining HyperNEAT issues
&lt;/li&gt;&lt;li&gt;Work on some core performance issues in NEAT/HyperNEAT
&lt;/li&gt;&lt;li&gt;Port from Java to C#
&lt;/li&gt;&lt;li&gt;Multi-Thread Java
&lt;/li&gt;&lt;li&gt;Multi-Thread C#
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I really want to have Encog 3.2 finalized before porting to C#.  This limits the amount of “reporting” that I need to do as Encog 3.2 evolves.  However, the multi-threading is very different on C# and Java.  I do not want to shoehorn a Java threading model into C#.  C# has the very cool Parallel class that I am trying to use through Encog for multithreading.  Java works more using a thread pool.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
 <pubDate>Mon, 21 Jan 2013 01:55:34 +0000</pubDate>
 <dc:creator>jeffheaton</dc:creator>
 <guid isPermaLink="false">2916 at http://www.heatonresearch.com</guid>
 <comments>http://www.heatonresearch.com/node/2916#comments</comments>
</item>
<item>
 <title>JLatexMath Tutorial for Rendering LaTex Formulas in Java</title>
 <link>http://www.heatonresearch.com/node/2868</link>
 <description>&lt;div class=&quot;field field-name-body field-type-text-with-summary field-label-hidden&quot;&gt;&lt;div class=&quot;field-items&quot;&gt;&lt;div class=&quot;field-item even&quot;&gt;&lt;p&gt;&lt;a href=&quot;http://www.latex-project.org/&quot;&gt;LaTex&lt;/a&gt; is a complete typesetting system that can be used on a variety of computing platforms.  I make use of LaTex to produce the PDF versions of my ebooks.  I also produce the “master” PDF that the printed copies of my books are created from. However, Latex also has another very common use. Latex is a very common means of encoding mathematical formulas for eventual typesetting.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mediawiki.org/wiki/MediaWiki&quot;&gt;MediaWiki&lt;/a&gt; makes use of LaTex to enter mathematical formulas.  This is the Wiki software used by Wikipedia.  I also make use of MediaWiki to run the &lt;a href=&quot;http://www.heatonresearch.com/wiki/Main_Page&quot;&gt;Encog&lt;/a&gt; wiki.  As a result, I find my self frequently making use of &lt;a href=&quot;http://en.wikipedia.org/wiki/Help:Displaying_a_formula&quot;&gt;LaTex formulas&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.heatonresearch.com/encog&quot;&gt;Encog&lt;/a&gt; is now adding &lt;a href=&quot;http://en.wikipedia.org/wiki/Genetic_programming&quot;&gt;Genetic Programming&lt;/a&gt; (GP).  GP allows you to evolve programs to provide solutions to an &lt;a href=&quot;http://en.wikipedia.org/wiki/Mathematical_optimization&quot;&gt;objective function&lt;/a&gt;.  These programs can range from mathematical formulas to a Turing Complete mini-language, complete with storage and branching.  I decided that LaTex would be a great option for visualizing the formulas produced by Encog GP in the &lt;a href=&quot;http://www.heatonresearch.com/wiki/Encog_Workbench&quot;&gt;Encog Workbench&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To do this I need the ability to render LaTex in Java.  I do not require the ability to render the entire of LaTex in Java.  I don’t need to typeset entire documents.  I just need to be able to render a LaTex mathematical formula.  After several Google searches I landed on JLatexMath.  This package is open source, and used by a number of other open source projects.  It is also available in a Maven Repository.  You can find JLatexMath here.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://forge.scilab.org/index.php/p/jlatexmath/&quot;&gt;http://forge.scilab.org/index.php/p/jlatexmath/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately, documentation and examples are very scarce for JLatexMath.  TO get started, I first created a simple example. Because examples seem to be in short supply for JLatexMath, I will present this example/tutorial in this article.  You can find my current example in GitHub here.  You can download a .ZIP at this location that contains everything you need.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jeffheaton/jlatexmath-example&quot;&gt;https://github.com/jeffheaton/jlatexmath-example&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The most important part is to make sure you include the JAR that contains JLatexMath.  JLatexMath is completely contained in this JAR file.  At the point I wrote this article, the JAR was named jlatexmath-0.9.6.jar.&lt;/p&gt;
&lt;p&gt;You can see a screenshot of my example program here.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.heatonresearch.com/images/article/blog/jlatexmath.png&quot; alt=&quot;a jlatexmath example&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;package com.jeffheaton.latex;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

import org.scilab.forge.jlatexmath.TeXConstants;
import org.scilab.forge.jlatexmath.TeXFormula;
import org.scilab.forge.jlatexmath.TeXIcon;

public class LatexExample extends JFrame implements ActionListener {
	
	private JTextArea latexSource;
	private JButton btnRender;
	private JPanel drawingArea;

	public LatexExample() {
		this.setTitle(&quot;JLatexMath Example&quot;);
		this.setSize(500, 500);
		Container content = this.getContentPane();
		content.setLayout(new GridLayout(2, 1));
		this.latexSource = new JTextArea();
		
		JPanel editorArea = new JPanel();
		editorArea.setLayout(new BorderLayout());
		editorArea.add(new JScrollPane(this.latexSource),BorderLayout.CENTER);
		editorArea.add(btnRender = new JButton(&quot;Render&quot;),BorderLayout.SOUTH);		
		
		content.add(editorArea);
		content.add(this.drawingArea = new JPanel());		
		this.btnRender.addActionListener(this);
		
		this.latexSource.setText(&quot;x=\\frac{-b \\pm \\sqrt {b^2-4ac}}{2a}&quot;);
	}

	public void render() {
		try {
			// get the text
			String latex = this.latexSource.getText();
			
			// create a formula
			TeXFormula formula = new TeXFormula(latex);
			
			// render the formla to an icon of the same size as the formula.
			TeXIcon icon = formula
					.createTeXIcon(TeXConstants.STYLE_DISPLAY, 20);
			
			// insert a border 
			icon.setInsets(new Insets(5, 5, 5, 5));

			// now create an actual image of the rendered equation
			BufferedImage image = new BufferedImage(icon.getIconWidth(),
					icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
			Graphics2D g2 = image.createGraphics();
			g2.setColor(Color.white);
			g2.fillRect(0, 0, icon.getIconWidth(), icon.getIconHeight());
			JLabel jl = new JLabel();
			jl.setForeground(new Color(0, 0, 0));
			icon.paintIcon(jl, g2, 0, 0);
			// at this point the image is created, you could also save it with ImageIO
			
			// now draw it to the screen			
			Graphics g = this.drawingArea.getGraphics();
			g.drawImage(image,0,0,null);
		} catch (Exception ex) {
			ex.printStackTrace();
			JOptionPane.showMessageDialog(null, ex.getMessage(), &quot;Error&quot;,
					JOptionPane.INFORMATION_MESSAGE);		
		}

	}

	public static void main(String[] args) {
		LatexExample frame = new LatexExample();		
		frame.setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if( e.getSource()==this.btnRender ) {
			render();
		}
		
	}
}&lt;/pre&gt;&lt;p&gt;
Most of the work is being done in the render method.  There, I obtain the LaTex formula &quot;source code&quot; and render it to an image.  This image is then displayed to the JFrame that makes up the application&#039;s main window.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
 <pubDate>Thu, 03 Jan 2013 10:43:25 +0000</pubDate>
 <dc:creator>jeffheaton</dc:creator>
 <guid isPermaLink="false">2868 at http://www.heatonresearch.com</guid>
 <comments>http://www.heatonresearch.com/node/2868#comments</comments>
</item>
</channel>
</rss>
<h1>Additional uncaught exception thrown while handling exception.</h1><h2>Original</h2><p>PDOException: SQLSTATE[HY000]: General error: 145 Table &amp;#039;./heatonresearch/accesslog&amp;#039; is marked as crashed and should be repaired: INSERT INTO {accesslog} (title, path, url, hostname, uid, sid, timer, timestamp) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7); Array
(
    [:db_insert_placeholder_0] =&amp;gt; RSS feed
    [:db_insert_placeholder_1] =&amp;gt; rss.xml
    [:db_insert_placeholder_2] =&amp;gt; 
    [:db_insert_placeholder_3] =&amp;gt; 173.194.94.177
    [:db_insert_placeholder_4] =&amp;gt; 0
    [:db_insert_placeholder_5] =&amp;gt; ekdTE-1YlTOl0tGJDjiimTVL8KsLkBd4FJIW4GD-v0k
    [:db_insert_placeholder_6] =&amp;gt; 462
    [:db_insert_placeholder_7] =&amp;gt; 1443198532
)
 in statistics_exit() (line 93 of /var/www/html/modules/statistics/statistics.module).</p><h2>Additional</h2><p>PDOException: SQLSTATE[HY000]: General error: 29 File &amp;#039;./heatonresearch/watchdog.MYD&amp;#039; not found (Errcode: 2): INSERT INTO {watchdog} (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8, :db_insert_placeholder_9); Array
(
    [:db_insert_placeholder_0] =&amp;gt; 0
    [:db_insert_placeholder_1] =&amp;gt; php
    [:db_insert_placeholder_2] =&amp;gt; %type: !message in %function (line %line of %file).
    [:db_insert_placeholder_3] =&amp;gt; a:6:{s:5:&amp;quot;%type&amp;quot;;s:12:&amp;quot;PDOException&amp;quot;;s:8:&amp;quot;!message&amp;quot;;s:824:&amp;quot;SQLSTATE[HY000]: General error: 145 Table &amp;amp;#039;./heatonresearch/accesslog&amp;amp;#039; is marked as crashed and should be repaired: INSERT INTO {accesslog} (title, path, url, hostname, uid, sid, timer, timestamp) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7); Array
(
    [:db_insert_placeholder_0] =&amp;amp;gt; RSS feed
    [:db_insert_placeholder_1] =&amp;amp;gt; rss.xml
    [:db_insert_placeholder_2] =&amp;amp;gt; 
    [:db_insert_placeholder_3] =&amp;amp;gt; 173.194.94.177
    [:db_insert_placeholder_4] =&amp;amp;gt; 0
    [:db_insert_placeholder_5] =&amp;amp;gt; ekdTE-1YlTOl0tGJDjiimTVL8KsLkBd4FJIW4GD-v0k
    [:db_insert_placeholder_6] =&amp;amp;gt; 462
    [:db_insert_placeholder_7] =&amp;amp;gt; 1443198532
)
&amp;quot;;s:9:&amp;quot;%function&amp;quot;;s:17:&amp;quot;statistics_exit()&amp;quot;;s:5:&amp;quot;%file&amp;quot;;s:50:&amp;quot;/var/www/html/modules/statistics/statistics.module&amp;quot;;s:5:&amp;quot;%line&amp;quot;;i:93;s:14:&amp;quot;severity_level&amp;quot;;i:3;}
    [:db_insert_placeholder_4] =&amp;gt; 3
    [:db_insert_placeholder_5] =&amp;gt; 
    [:db_insert_placeholder_6] =&amp;gt; http://www.heatonresearch.com/rss.xml
    [:db_insert_placeholder_7] =&amp;gt; 
    [:db_insert_placeholder_8] =&amp;gt; 173.194.94.177
    [:db_insert_placeholder_9] =&amp;gt; 1443198533
)
 in dblog_watchdog() (line 160 of /var/www/html/modules/dblog/dblog.module).</p><hr />