<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1009065821066594816</id><updated>2026-06-21T16:45:43.285+10:00</updated><category term="interactive entertainment"/><category term="developer journal"/><category term="artificial intelligence"/><category term="Training Journal"/><category term="software development"/><category term="human potential"/><category term="The Secret World"/><category term="how to"/><category term="game queue"/><category term="Rage"/><category term="Reading Plan"/><category term="Deus Ex"/><category term="Interesting People"/><category term="John Carmack"/><category term="Jonathan Blow"/><category term="Robots"/><category term="Videos"/><category term="artificial life"/><category term="augmented reality"/><category term="general"/><category term="latex"/><category term="screenshot"/><title type='text'>Potential</title><subtitle type='html'>On artificial intelligence and more by Binh Nguyen</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/04094393751418378992</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbhGqcLBtcjsVxeUENqowTPDFRAXwb9NcUitNzyAiC546XNHDqvwRRI9MDUxreHwd-bIljUot-TtNac8L6FgDsceWIFuZuyYWN-qZKpVFbQ4A5SnYZ3hvOAGIiAznQfiU/s1600/binh-nguyen.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>584</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-196721661615381867</id><published>2011-11-10T17:57:00.000+11:00</published><updated>2011-11-10T17:57:08.176+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 140</title><content type='html'>It&#39;s come back to bite me. Changing from genome version alpha to genome version bravo. &lt;br /&gt;
&lt;br /&gt;
In version alpha, you retrieve the gene you want using a mathematical formula. There was an order to the sequence of genes. The advantage of this is that retrieving the gene you want is fast. The disadvantage is that adding new genes is hard because you have to modify the mathematical formula.&lt;br /&gt;
&lt;br /&gt;
In version bravo, you retrieve genes by doing a search. There is no order to the sequence of genes. Each gene has a number of tags to uniquely identify it. The advantage of this is that adding new genes is easy. The disadvantage is that retrieving the gene you want is slow. &lt;br /&gt;
&lt;br /&gt;
Starting up the simulation with a new population has become very slow. Not only that, when I ran the simulation last night, all of the robots died. Argh! I don&#39;t know what it is and it&#39;s hard to check because running the simulation takes time.&lt;br /&gt;
&lt;br /&gt;
You have to make your changes small. You have to make sure your changes work. I wish I could have figured out a way to go from version alpha to bravo in smaller steps.&lt;br /&gt;
&lt;br /&gt;
You have to keep an eye on how long things take. You have to time them. &lt;br /&gt;
&lt;br /&gt;
Hopefully the population died because the gender constraint was active.&lt;br /&gt;
&lt;br /&gt;
I added a few timers to look at how long things took to start up. The program takes 36 seconds for 8 robots. 6 seconds is for things like starting up the graphics and physics engine. Each robots takes about 3.75 seconds to start up. That doesn&#39;t sound like much but when you have about 128 robots that&#39;s 480 seconds or 8 minutes!&lt;br /&gt;
&lt;br /&gt;
The majority of the time for creating a robot is creating the neural network and a large part of that is due to the searching for the required gene through the genome again and again.&lt;br /&gt;
&lt;br /&gt;
I can&#39;t fix that now, indeed I&#39;m not even sure of how to fix it other than to go back to version alpha but that has it&#39;s own problems, namely inserting new genes is difficult.&lt;br /&gt;
&lt;br /&gt;
The good thing about this is that I know what&#39;s going, how long things are taking, and that it&#39;s not taking too long. This frees me from having to tinker with the genome for now. That means I can tinker with the neural network code to add neurons and synapses on the fly.&lt;br /&gt;
&lt;br /&gt;
The easiest part of projects is at the start where you&#39;re day dreaming. The hard scary part is when you get to it and actually try to finish it.&lt;br /&gt;
&lt;br /&gt;
Adding a neuron group looks easy. Adding a neuron to an existing group looks hard but it&#39;s not something I have to work on now. I&#39;ll have to work on it when I do things like increase the number of input neurons for vision on the fly.</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/196721661615381867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/11/developer-journal-140.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/196721661615381867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/196721661615381867'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/11/developer-journal-140.html' title='Developer Journal 140'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-6949668999706520694</id><published>2011-11-05T16:45:00.001+11:00</published><updated>2011-11-05T16:45:47.456+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 139</title><content type='html'>Arg! Another day on converting genome data from version alpha to version bravo.</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/6949668999706520694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/11/developer-journal-139.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/6949668999706520694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/6949668999706520694'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/11/developer-journal-139.html' title='Developer Journal 139'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-7938198523177528720</id><published>2011-11-02T11:09:00.000+11:00</published><updated>2011-11-05T12:48:08.807+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 138</title><content type='html'>Today&#39;s task, update genome data when the genome configuration file changes.&lt;br /&gt;
&lt;br /&gt;
My plan is to go through one gene at a time in the configuration file, and see whether it is in the genome data. If it is not, then I&#39;ll make the appropriate changes. For example, if there is are new genes for a new input group in the configuration file, I&#39;ll add the genes to the genome and generate what I&#39;m calling the secondary genes.&lt;br /&gt;
&lt;br /&gt;
Each neuron group has a bias gene and a bias learning rate gene.&lt;br /&gt;
&lt;br /&gt;
In addition each neuron group has potential connections to every other group and vice versa. For each potential connection there is a connection density gene, a learning rate gene, and a topological distortion gene.&lt;br /&gt;
&lt;br /&gt;
Whoa, each robot has about a megabyte of data.&lt;br /&gt;
&lt;br /&gt;
The following error took me a long time to work out because of a serialization.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: cpp&quot;&gt;for( int j = 0; i &amp;lt; numGene; ++j )
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/7938198523177528720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/11/developer-journal-138.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/7938198523177528720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/7938198523177528720'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/11/developer-journal-138.html' title='Developer Journal 138'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-5212148580749631930</id><published>2011-11-01T16:57:00.001+11:00</published><updated>2011-11-02T11:09:34.653+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 137</title><content type='html'>Spent most of my day writing the crossover and mutation code.</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/5212148580749631930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/11/developer-journal-137.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/5212148580749631930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/5212148580749631930'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/11/developer-journal-137.html' title='Developer Journal 137'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-7443678431426059392</id><published>2011-10-31T21:17:00.000+11:00</published><updated>2011-11-01T16:56:15.726+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 136</title><content type='html'>Just spent a day fixing bugs that caused the simulation to crash when converting genome data from version alpha to bravo. Seems to be good for now. Just went over the &lt;a href=&quot;https://docs.google.com/document/d/1ii5-_EU6HG-gHpSW_8wZEG73joJdTVe20q35hd281lY/edit&quot;&gt;completed and next actions list&lt;/a&gt;. There are still so man things left to go.&lt;br /&gt;
&lt;br /&gt;
Next up&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;fix how robots are not getting visual data&lt;/li&gt;
&lt;li&gt;when genome configuration file changes, update genome&lt;/li&gt;
&lt;li&gt;when genome changes, update neural network&lt;/li&gt;
&lt;li&gt;when connection file changes, update connection&lt;/li&gt;
&lt;li&gt;implement gender touch sensor&lt;/li&gt;
&lt;li&gt;run gender simulations&lt;/li&gt;
&lt;li&gt;balance gender over time&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/7443678431426059392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-136.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/7443678431426059392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/7443678431426059392'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-136.html' title='Developer Journal 136'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-8287525371737069177</id><published>2011-10-29T15:12:00.001+11:00</published><updated>2011-10-29T15:12:46.034+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 135</title><content type='html'>Having had a good night&#39;s sleep feels so much better. After the fire alarms stopped yesterday, I had a look at the neural network input and output over time. The output was abnormally small which explained why the robots weren&#39;t moving. The robots also didn&#39;t seem to be receiving visual input. I&#39;ve got one or two hours to work today before a relaxing weekend.&lt;br /&gt;
&lt;br /&gt;
Aah, I printed out the minimum efficacy, maximum efficacy, and decay rate. The maximum efficacy was the same as the minimum efficacy. Yep that was it. A small bug that freaked me out on a rainy, warm, Friday night with blaring fire alarms.&lt;br /&gt;
&lt;br /&gt;
I was worried that I&#39;d made too many big changes, without testing. At the same time I couldn&#39;t really make the changes smaller in this case. More an more I&#39;m appreciating the power of a well designed code interface.</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/8287525371737069177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-135.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/8287525371737069177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/8287525371737069177'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-135.html' title='Developer Journal 135'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-5540677589042781341</id><published>2011-10-28T20:32:00.000+11:00</published><updated>2011-10-28T20:32:53.170+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 134</title><content type='html'>So sleepy. Woke up at 3 with stomach and back pain. Too much sitting and not enough training. Nutrition, getting better. Finally I&#39;ve got a few days to focus on programming and writing, and I&#39;m tempted to goof off. I can feel myself being less motivated and less intelligent.&lt;br /&gt;
&lt;br /&gt;
I&#39;ve got a few things to do today. Make sure that genome version 2 works with brain version 1. Then make sure that I&#39;m converting genome version 1 data to genome version 2.&lt;br /&gt;
&lt;br /&gt;
After a day of slow programming, genome version2 works with brain version 1. It seems to anyway, I&#39;m going to have to let it run for a while to see what happens.&lt;br /&gt;
&lt;br /&gt;
I&#39;ll also have to do some profiling because the constant genome look ups are slowing down the system.&lt;br /&gt;
&lt;br /&gt;
Now to check the differences that between genomes that are the result of the normal creation code and the conversion code. I hate working with the serialization code enabled, it takes a lot more time to compile, link, and load.&lt;br /&gt;
&lt;br /&gt;
27 seconds extra to compile. 56 seconds extra to link. 6 minutes 6 seconds extra to load. That might not sound like much but it is.&lt;br /&gt;
&lt;br /&gt;
When the program loads, class Genome converts the data from pre-pre-alpha to version pre-alpha. Then the data gets converted to version alpha.&lt;br /&gt;
&lt;br /&gt;
Pre-pre alpha is when the data was in class Genome and was a vector of floats. This was how things were originally coded up. Pre-alpha when the data gets converted to a vector of class Gene. This was when I was feeling my way around.&lt;br /&gt;
&lt;br /&gt;
Version alpha is when the data is moved to class GenomeAlpha. I moved it over here so that I could preserve the old code in class GenomeAlpha, use class Genome as a common interface and try new code in class GenomeBravo.&lt;br /&gt;
&lt;br /&gt;
Doh. I think I broke something. When I loaded up a previous save file, the robots no longer moved. I didn&#39;t change anything major, I changed the genome code but that shouldn&#39;t affect the architecture of the neural network. &lt;br /&gt;
&lt;br /&gt;
I think the conversion from class Genome to class GenomeAlpha is not quite right.&lt;br /&gt;
&lt;br /&gt;
Grr. Fire alarms have gone off. I&#39;m sure it&#39;s a drill but they&#39;re so loud and annoying!</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/5540677589042781341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-134.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/5540677589042781341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/5540677589042781341'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-134.html' title='Developer Journal 134'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-5607981167388905621</id><published>2011-10-27T18:13:00.000+11:00</published><updated>2011-10-27T18:13:22.620+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 133</title><content type='html'>Slight change to the gene format.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;lt;gene&amp;gt;
    tag        input
    tag        random
    tag        numExc
    min        1
    max        1
&amp;lt;/gene&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
I removed &quot;value&quot; and &quot;isVariable&quot;. I figured that I can let &quot;value&quot; be whatever and I could set a gene to not be variable by making the min and the max the same. I&#39;m still worried that this is going to come back to bite me but the format looks and feels good.&lt;br /&gt;
&lt;br /&gt;
I should look up a good XML parser but I don&#39;t want to involve new code. I&#39;m going write a little code to read the settings in.&lt;br /&gt;
&lt;br /&gt;
Years ago when I started working on developing AI, I did not think I&#39;d be spending time writing up an XML like file to initialise a genome structure.&lt;br /&gt;
&lt;br /&gt;
Finished writing the code to create genome version 2 from a configuration file. Reading in the primary genes was easy. Creating the secondary genes that depend on the primary genes took a fair bit longer to do.&lt;br /&gt;
&lt;br /&gt;
Still a fair bit of testing to do. I have to make sure genome version 2 works with brain version 1, then write brain version 2. &lt;br /&gt;
&lt;br /&gt;
The main difference with brain version 2 is that it can grow new neurons and synapses when the genome changes. For example, I&#39;m going to need to add a new input and output group to the genome and then I need the brain to grow the new input and output groups. Yee haw!&lt;br /&gt;
&lt;br /&gt;
Hopefully I can get the version 2 gender experiments done soon and have some time to work on the robot arms and legs a bit more. The new feature of being able to add input and output groups on the fly is going to help a lot. Each joint in the robot body is going to need a brain output groups. In addition, I&#39;m thinking of pumping limb data into the brain, so I&#39;ll need brain input groups.</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/5607981167388905621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-133.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/5607981167388905621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/5607981167388905621'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-133.html' title='Developer Journal 133'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-2814383112731842891</id><published>2011-10-26T17:56:00.000+11:00</published><updated>2011-10-26T17:56:58.001+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 132</title><content type='html'>Oh XML, XML. Another technology I ignored during my undergraduate studies that&#39;s coming back to haunt me.&lt;br /&gt;
&lt;br /&gt;
The settings file for the genome class has lots of different types of data and so much data. I&#39;ve come up with a format that I hope will be extensible and won&#39;t come back to bite me later.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;lt;gene&amp;gt;
    tag        input
    tag        random
    tag        numExc
    min        0
    max        1
    value      1
    isVariable 0
&amp;lt;/gene&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
My long term goal is to move as much as I can to the genome so that evolutionary processes can determine the values.</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/2814383112731842891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-132.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/2814383112731842891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/2814383112731842891'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-132.html' title='Developer Journal 132'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-2978894675868386932</id><published>2011-10-25T20:40:00.000+11:00</published><updated>2011-10-25T20:40:51.776+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 131</title><content type='html'>I won&#39;t be able to do too much development today, I&#39;ve got a fair amount of marking and tutoring to do. &lt;br /&gt;
&lt;br /&gt;
I&#39;m still working on the code to transition from genome version alpha to bravo. I&#39;ve been thinking about whether to put the conversion code in class GenomeAlpha, class GenomeBravo, or somewhere else. I&#39;ve placed the conversion code in class GenomeBravo for now. The conversion function receives a pointer to class GenomeAlpha and converts the data into class GenomeBravo.&lt;br /&gt;
&lt;br /&gt;
I thought I&#39;d be able to get the new genome, neural network, embodiment code done, and run a number of simulations by Wednesday, starting from last Wednesday. The idea was to give the robots a new sensor that would allow them to detect whether nearby robots were male or female. I wanted to avoid hard coding, and to preserve older code so I could step back if I needed to, so the coding is taking longer than I thought it would.&lt;br /&gt;
&lt;br /&gt;
I&#39;m finding more and more that topics I&#39;ve avoided in the past are coming back to bite me, maths, physics, databases, and networking. Working with simulated robots requires maths and physics. Working with population data over time requires databases. Scaling the simulation requires networking to to a client server architecture.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/2978894675868386932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-131.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/2978894675868386932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/2978894675868386932'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-131.html' title='Developer Journal 131'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-4891586866662945221</id><published>2011-10-24T18:00:00.000+11:00</published><updated>2011-10-25T11:47:53.776+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 130</title><content type='html'>Converting genome data from version alpha to version bravo.&lt;br /&gt;
&lt;br /&gt;
Grr. Genes have a value between 0 and 1. This value then gets interpreted into a range with a specified minimum and maximum. I was using the accessors in alpha to get the gene values and those accessors return the interpreted values and not the pre-interpreted values.&lt;br /&gt;
&lt;br /&gt;
I&#39;m suspecting more and more that a database would be useful to do serialization and to migrate the data from version to version.&lt;br /&gt;
&lt;br /&gt;
I&#39;m trying hard to not make GenomeBravo have to know about how GenomeAlpha works.&lt;br /&gt;
&lt;br /&gt;
I&#39;m suspecting more and more the code I&#39;m writing to migrate the data from genome version alpha to genome version bravo will be soon obsolete and that I would have been better off using database techniques to store and transform the data but I don&#39;t have those database skills yet.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/4891586866662945221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-130.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/4891586866662945221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/4891586866662945221'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-130.html' title='Developer Journal 130'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-4026532374603687311</id><published>2011-10-21T13:44:00.000+11:00</published><updated>2011-10-22T13:45:39.719+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 129</title><content type='html'>Some rough notes, I&#39;ll write this up in a readable form soon.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
I&#39;ve been working on adding new capabilities to the robots. My goal is to convert the hard coded values to things I can change from text files and then have the robot sub-systems change dynamically.&lt;br /&gt;
&lt;br /&gt;
If you increase the number of input / output groups, you have to change the indices. I&#39;ll also have to save the indices in order to do the updating.&lt;br /&gt;
&lt;br /&gt;
Create a gene class.&lt;br /&gt;
&lt;br /&gt;
When the brain updates, it pulls from the sensors.&lt;br /&gt;
When the robot updates, it pulls from the brain.&lt;br /&gt;
&lt;br /&gt;
How to convert to a new structure?&lt;br /&gt;
Modify text file.&lt;br /&gt;
Modify genome.&lt;br /&gt;
Modify neural network&lt;br /&gt;
&lt;br /&gt;
When a user creates a robot, they have to create the following files.&lt;br /&gt;
robotAlpha.cfg&lt;br /&gt;
+ bodyAlpha.cfg&lt;br /&gt;
+ brainAlpha.cfg&lt;br /&gt;
+ genomeAlpha.cfg&lt;br /&gt;
+ connectAlpha.cfg&lt;br /&gt;
&lt;br /&gt;
You can change body, brain, genome, connect files by modifying robot. You can change which robot file to use through a setting the robot file.&lt;br /&gt;
&lt;br /&gt;
1 shared CritParam, or 1 CritParam each&lt;br /&gt;
&lt;br /&gt;
Focus on doing the minimum first&lt;br /&gt;
&lt;br /&gt;
numInGroup 6&lt;br /&gt;
&lt;br /&gt;
inGroup1 random&lt;br /&gt;
inGroup2 energy&lt;br /&gt;
inGroup3 red&lt;br /&gt;
inGroup4 green&lt;br /&gt;
inGroup5 blue&lt;br /&gt;
inGroup6 listen&lt;br /&gt;
&lt;br /&gt;
inGroupRandom 1&lt;br /&gt;
inGroupEnergy 1&lt;br /&gt;
inGroupRed 3&lt;br /&gt;
inGroupGreen 3&lt;br /&gt;
inGroupBlue 3&lt;br /&gt;
inGroupListen 16&lt;br /&gt;
&lt;br /&gt;
numOutGroup 8&lt;br /&gt;
&lt;br /&gt;
outGroup1 eat&lt;br /&gt;
outGroup2 mate&lt;br /&gt;
outGroup3 fight&lt;br /&gt;
outGroup4 speed&lt;br /&gt;
outGroup5 yaw&lt;br /&gt;
outGroup6 light&lt;br /&gt;
outGroup7 focus&lt;br /&gt;
outGroup8 speak&lt;br /&gt;
&lt;br /&gt;
outGroupEat 1&lt;br /&gt;
outGroupMate 1&lt;br /&gt;
outGroupFight 1&lt;br /&gt;
outGroupSpeed 1&lt;br /&gt;
outGroupYaw 1&lt;br /&gt;
outGroupLight 1&lt;br /&gt;
outGroupFocus 1&lt;br /&gt;
outGroupSpeak 16&lt;br /&gt;
&lt;br /&gt;
Each genome in the text file should have a name, a variability flag, and a value&lt;br /&gt;
&lt;br /&gt;
Each brain input / output has a name.&lt;br /&gt;
Each robot input / output has a name&lt;br /&gt;
&lt;br /&gt;
// robot direction brain&lt;br /&gt;
visionOut &amp;gt; visionIn&lt;br /&gt;
&lt;br /&gt;
// robot direction brain&lt;br /&gt;
forwardIn &amp;lt; forwardOut&lt;br /&gt;
leftIn &amp;lt; leftOut&lt;br /&gt;
&lt;br /&gt;
I also want to be able to modify the neural network without modifying the genome.&lt;br /&gt;
&lt;br /&gt;
When I serialize and after I load, I can check whether the settings file has changed.&lt;br /&gt;
&lt;br /&gt;
The settings file can have a version number or I can check whether the parameters have changed. The problem with checking the parameters is that the process could take too long if each robot has their own genome param.&lt;br /&gt;
&lt;br /&gt;
The reason I considered checking parameters is that I didn&#39;t want errors to come from manually incrementing the version numbers.&lt;br /&gt;
&lt;br /&gt;
The genome checks the settings file.&lt;br /&gt;
The brain checks the genome.&lt;br /&gt;
The body checks the genome.&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/4026532374603687311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-129.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/4026532374603687311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/4026532374603687311'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-129.html' title='Developer Journal 129'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-4807111628405280569</id><published>2011-10-20T10:09:00.000+11:00</published><updated>2011-10-22T13:44:07.225+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 128</title><content type='html'>I&#39;m excited. I finally get to work on a system to allow me to introduce different robot types. I&#39;m determined to avoid hard coding and to preserve previous robot designs as I go.&lt;br /&gt;
&lt;br /&gt;
I&#39;ve also being thinking about the nature of work and what I would do if I didn&#39;t have to work.&lt;br /&gt;
&lt;br /&gt;
I wish I knew a better way to do the genome crossover process. I&#39;ll have to look around for better ways of encoding data in genomes and doing the crossover and mutation processes.&lt;br /&gt;
&lt;br /&gt;
The hard part is converting from one type of robot to another.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/4807111628405280569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-128.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/4807111628405280569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/4807111628405280569'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-128.html' title='Developer Journal 128'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-3601677676015894409</id><published>2011-10-19T17:58:00.000+11:00</published><updated>2011-10-19T17:58:47.916+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 127</title><content type='html'>&lt;b&gt;Gender&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Introducing gender to the population didn&#39;t quite produce the results I wanted. Introducing gender should have produced different results depending on how quickly I did it. Ideally introducing gender suddenly should have resulted in the population dying and introducing gender slowly should have resulted in the population surviving. That way, I could be sure that gender had a big enough impact to cause the population to have to change their behaviour.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the population survived in both cases. Now I have to look for other indicators of behaviour change. I&#39;ll be going back to check whether the rate of same gender mating attempts changed over time. In addition, I&#39;ll have to introduce different colours to the genders to help the robots identify genders. I&#39;ll have to be careful choosing colours, pink for females seems obvious but wrong.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Pheromones&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This brings up new problems, what happens if robots aren&#39;t facing each other? The suggestion I was given was to imagine the robots identified gender based on scent. So when robots are near each other they can tell whether another robot is male or female if they are close enough to each other. This kind of goes against a few ideas I&#39;ve had. Firstly, you shouldn&#39;t have to interpret things for the robots and this feels like some kind of interpretation is going on. Secondly, I can&#39;t fit this neatly into my idea of basing on how humans evolved. At the same time I&#39;m going to give it a go, it won&#39;t take long to program (famous last words) and it&#39;ll provide more information about what&#39;s happening in the background.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Intention&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The other thing I&#39;ve been thinking about and it relates to the problem of robots facing each other is encouraging intentional behaviour. At the moment, if two robots are next to each other and happen to think about mating at the same time for a split second, they reproduce. It&#39;s like if you&#39;re sitting next to someone and if you both happen to think about sex you end up with a baby. My idea is that they have to do something that takes a prolonged effort. For example, they have to face each other for 5 seconds and in that time, both agree to reproduce. The same with food. That way, if they choose to reproduce they have to face another robot for a period of time and activate their pseudo mating mechanisms for a sufficient period of time and intensity.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Arms, Legs, and Maturation&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
At the same time I want to introduce the maturation condition, which makes younger robots depend on the help of older robots to survive. At the same, same time I want to introduce the arms and legs that I&#39;ve been going on about for months now. Yeah, I should get to work, but writing this helps clarifies my thoughts.&lt;br /&gt;
&lt;br /&gt;
The thing that would be useful to work on is the ability to introduce new neural network inputs and outputs on the fly. That&#39;s something that&#39;s useful for all three of my programming tasks. Once I have that feature, the task of implementing arms and legs becomes a lot smaller since I&#39;ve done most of the physics programming.&lt;br /&gt;
&lt;br /&gt;
This time, I&#39;ve learned my lesson. Instead of modifying the neural network code, I&#39;ll make version two. It&#39;s weird, it&#39;s been so long since I&#39;ve touched the neural network code that I don&#39;t know how the network gets set up. I suspect I&#39;ll find the physics code for arms and legs unfamiliar as well. Oh yeah, I want to do my game programming as well.</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/3601677676015894409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-127.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/3601677676015894409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/3601677676015894409'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-127.html' title='Developer Journal 127'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-2673890510510196478</id><published>2011-10-16T20:28:00.000+11:00</published><updated>2011-10-16T20:28:10.573+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 126</title><content type='html'>Grr. I realised while in the shower this morning that I had set up the simulation with a 100 by 100 world instead of a 200 by 200 world.&lt;br /&gt;
&lt;br /&gt;
Then when I was at uni I realised I was setting up the gender condition incorrectly. Borrowing an idea from RPG games, same gender robots have to roll below a percentage in order to reproduce. For example if the limit is 50, robots have to roll in the range 1 to 100 and get below 50.&lt;br /&gt;
&lt;br /&gt;
The problem was I was rolling in the range 1 to the limit. Yep. Moving on.&lt;br /&gt;
&lt;br /&gt;
To be extra geeky, I&#39;m changing it around. Robots have to roll above the threshold. For example if the percentage is 75, robots have to roll above 75 to succeed in reproducing if they are the same gender.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So much dumbness. First, the threshold was already at my limit because of serialization so even though I wanted it to start at 1 and then increase it wouldn&#39;t. Second, I was using the wrong timer to periodically increase the limit. If you program while you&#39;re tired or distracted, you&#39;re a bl#$$y idiot.</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/2673890510510196478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-126.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/2673890510510196478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/2673890510510196478'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-126.html' title='Developer Journal 126'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-6641322091380801512</id><published>2011-10-14T18:00:00.000+11:00</published><updated>2011-10-16T13:26:16.487+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 125</title><content type='html'>Grr. My approximately 10 minute load time grew to way to long because of my memory tracking code.&amp;nbsp; &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;3 hours, 33 minutes, 6 seconds, primary computer&lt;/li&gt;
&lt;li&gt;3 hours, 24 minutes, 55 seconds, secondary computer&lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp;I&#39;ll have to disable the memory tracking code for normal use and only enable it for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
Some things I&#39;m learning.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Don&#39;t code your own serialization system&lt;/li&gt;
&lt;li&gt;Have a serialization strategy&lt;/li&gt;
&lt;li&gt;Have a few global variables to makes things easier&lt;/li&gt;
&lt;li&gt;Don&#39;t code your own memory tracking system&lt;/li&gt;
&lt;li&gt;If you&#39;re starting to consider writing your own template code, you&#39;re probably on the wrong track&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/6641322091380801512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-125.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/6641322091380801512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/6641322091380801512'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-125.html' title='Developer Journal 125'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-2152283007836366323</id><published>2011-10-13T18:56:00.000+11:00</published><updated>2011-10-14T09:31:53.160+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 124</title><content type='html'>Yah! I finished the introducing the gender condition. It took me a lot longer than I expected. I have to get a whole bunch of assignment marking done. I&#39;ve got a lot of experiments I can run while I mark. At the same time I&#39;d like to get the maturation condition done as well.&lt;br /&gt;
&lt;br /&gt;
I&#39;d also like to figure out how to make the code easier to work with. Things are all over the place.&lt;br /&gt;
&lt;br /&gt;
Grr. I had to do a bunch of extra work to get my memory tracking code to work with Boost Serialization. When Boost Serialization loads, I have to manually register the object because I don&#39;t know how to get Boost Serialization to use my New() function that wraps around the &quot;new&quot; operator.&lt;br /&gt;
&lt;br /&gt;
Time to test whether my changes are compatible with my ongoing save files.&lt;br /&gt;
&lt;br /&gt;
Running one experiment where I suddenly introduce gender to an ongoing population. On another computer I&#39;m gradually introducing gender.&lt;br /&gt;
&lt;br /&gt;
Sigh. I think my memory tracking code is making the load process take too long. Loading a file with 128 to 256 robots takes about 10 minutes normally.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/2152283007836366323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-124.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/2152283007836366323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/2152283007836366323'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-124.html' title='Developer Journal 124'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-8486811373032949709</id><published>2011-10-12T14:56:00.003+11:00</published><updated>2011-10-14T09:31:37.121+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 123</title><content type='html'>Grr. Lot&#39;s of assignment marking today. I&#39;m going to finish the gender constraint so that I can run the simulations in the background.&lt;br /&gt;
&lt;br /&gt;
I got the following error message that took me a while to fix.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: plain&quot;&gt;-*- mode: compilation; default-directory: &quot;~/polyworld/&quot; -*-
Compilation started at Wed Oct 12 14:53:54

mingw32-make 
Scanning dependencies of target OgreApp
[  2%] Building CXX object CMakeFiles/OgreApp.dir/app/Serializer.cpp.obj
In file included from D:\agi\dep\boost_1_44_0/boost/serialization/static_warning.hpp:73:0,
                 from D:\agi\dep\boost_1_44_0/boost/serialization/export.hpp:38,
                 from D:\agi\polyworld\app\Serializer.cpp:10:
D:\agi\dep\boost_1_44_0/boost/mpl/print.hpp: In instantiation of &#39;boost::mpl::print&amp;lt; boost::serialization::boost_serialization_static_warning_line&amp;lt; 137&amp;gt; &amp;gt;&#39;:
D:\agi\dep\boost_1_44_0/boost/serialization/static_warning.hpp:92:13:   instantiated from &#39;boost::serialization::static_warning_test&amp;lt; false, 137=&quot;&quot;&amp;gt;&#39;
D:\agi\dep\boost_1_44_0/boost/serialization/export.hpp:137:1:   instantiated from &#39;const boost::archive::detail::&amp;lt; unnamed&amp;gt;::guid_initializer&amp;lt; t&amp;gt;&amp;amp; boost::archive::detail::&amp;lt; unnamed&amp;gt;::guid_initializer&amp;lt; t&amp;gt;::export_guid() const [with T = World, boost::archive::detail::&amp;lt; unnamed&amp;gt;::guid_initializer&amp;lt; t&amp;gt; = boost::archive::detail::&amp;lt; unnamed&amp;gt;::guid_initializer&amp;lt; world&amp;gt;]&#39;
D:\agi\polyworld\app\Serializer.cpp:60:1:   instantiated from here
D:\agi\dep\boost_1_44_0/boost/mpl/print.hpp:55:5: warning: comparison between signed and unsigned integer expressions

&amp;lt; /world&amp;gt;&amp;lt; /unnamed&amp;gt;&amp;lt; /t&amp;gt;&amp;lt; /unnamed&amp;gt;&amp;lt; /t&amp;gt;&amp;lt; /unnamed&amp;gt;&amp;lt; /t&amp;gt;&amp;lt; /unnamed&amp;gt;&amp;lt; /false,&amp;gt;&amp;lt; /boost::serialization::boost_serialization_static_warning_line&amp;lt; 137&amp;gt;&amp;lt; &lt;/pre&gt;
&lt;br /&gt;
The clue was T = World. I forgot to make the destructor virtual. Oh Boost Serialization, oh how I love and hate thee.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/8486811373032949709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/grr.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/8486811373032949709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/8486811373032949709'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/grr.html' title='Developer Journal 123'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-8893459650421092114</id><published>2011-10-11T21:37:00.002+11:00</published><updated>2011-10-11T21:39:21.555+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 122</title><content type='html'>I&#39;ve almost finished the code for making the world bigger over time. I can&#39;t believe it took so long. Hopefully introducing gender and pseudo ageing won&#39;t take so long.&lt;br /&gt;
&lt;br /&gt;
Damn, damn, damn. I took almost 3 hours to solve a problem.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: cpp&quot;&gt;	

	// create a motion state
	obj-&amp;gt;motionState.reset( new btDefaultMotionState( transform ) );

	// create a collision shape
	const btVector3 halfExtents( 0.5f, 0.5f, 0.5f );
	obj-&amp;gt;collisionShape.reset( new btBoxShape( halfExtents ) );    

	// create a rigid body
	const float mass = obj-&amp;gt;mass;
	btVector3 localInertia( 0.0f, 0.0f, 0.0f );
	// rigidbody is dynamic if is non zero    	
	if( mass != 0.0f ) {
	    obj-&amp;gt;collisionShape-&amp;gt;calculateLocalInertia( mass, localInertia );
	}
	btRigidBody::btRigidBodyConstructionInfo rbInfo( 
	    mass, obj-&amp;gt;motionState.get(), obj-&amp;gt;collisionShape.get(), localInertia );
	shared_ptr&amp;lt; agiRigidBody &amp;gt; rigidBody( new agiRigidBody( rbInfo ) );
	rigidBody-&amp;gt;Init( obj );
	
	// add to dynamics world
	imp-&amp;gt;dynamicsWorld-&amp;gt;addRigidBody( rigidBody.get() );

	// set pointer in data object
	obj-&amp;gt;rigidBody = rigidBody;

	// scale
	btVector3 bulletScale;
	bulletScale.setX( obj-&amp;gt;scale.x() );
	bulletScale.setY( obj-&amp;gt;scale.y() );
	bulletScale.setZ( obj-&amp;gt;scale.z() );
	rigidBody-&amp;gt;getCollisionShape()-&amp;gt;setLocalScaling( bulletScale );
&lt;/pre&gt;&lt;br /&gt;
I didn&#39;t know I had to initialise localInertia. Most vectors I work with default to 0.0. &lt;br /&gt;
&lt;br /&gt;
I was relying on similar code elsewhere and then when I changed over to this code I had to track that error down. Grr. For three hours I had things falling through my ground for no good reason. Yeah, I need to learn more about physics and the physics library I&#39;m using.</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/8893459650421092114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-122.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/8893459650421092114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/8893459650421092114'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-122.html' title='Developer Journal 122'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-9090017290383850444</id><published>2011-10-10T18:00:00.000+11:00</published><updated>2011-10-11T18:33:37.459+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 121</title><content type='html'>I&#39;m currently writing some code to make the world bigger over time. In particular, I&#39;m thinking about how to save the state of the world over time. I&#39;m wary of using more of Boost Serialization. The world is pretty simple with four walls and a floor. I can serialize the world object or the wall and ground objects.&lt;br /&gt;
&lt;br /&gt;
I remember reading that I should avoid file reading in constructors. I&#39;ll need to do some file reading to get parameters to control how the world changes over time. I need to do this in the constructor if I serialize the world object or else I will need to call an initialisation function after each time I load the world object.&lt;br /&gt;
&lt;br /&gt;
I don&#39;t know whether to serialize the world object or just the ground and wall objects. When in doubt and analysis paralysis, my strategy is usually to do the obvious, easy, albeit dumb thing. Save the 4 walls, the ground, and the last update time. Do everything manually for now.&lt;br /&gt;
&lt;br /&gt;
I&#39;m finding I&#39;m spending more time trying to do things the smart way than is worthwhile.&lt;br /&gt;
&lt;br /&gt;
Even simpler, save the current world size and the last world update time.&lt;br /&gt;
&lt;br /&gt;
Hmm, that means the currentWorldSize and the lastWorldUpdate is inside class SimData and outside class World. When I load class World, it should be good to go. Albeit, I have to manually do stuff for physics and graphics. I&#39;ll have to copy over currentWorldSize and lastWorldUpdate from class SimData to class World. Then I&#39;ll have variables doing the same thing in different places. Grr, I&#39;ll serialize the world.&lt;br /&gt;
&lt;br /&gt;
Dang! I just realized my fancy memory registry class is limited by the serialization process. My idea was to wrap new in a function that creates a note in the memory registry. When an object goes out of scope it notifies the memory registry. When the memory registry goes out of scope it should have no notes. If it has notes then it means some objects were not released and there is a memory leak. &lt;br /&gt;
&lt;br /&gt;
I originally stumbled because I couldn&#39;t figure out how to get it to work with classes that were not my own. Then I realized that I didn&#39;t need to. The point of the memory register was to make sure that I avoided cyclic dependencies in my code. All good, then I realized that I didn&#39;t know how to make Boost Serialization use my New() function. I have to register objects created by Boost Serialization with the memory register manually. Not ideal, but it&#39;ll work for now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/9090017290383850444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-121.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/9090017290383850444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/9090017290383850444'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/10/developer-journal-121.html' title='Developer Journal 121'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-3160800034845371360</id><published>2011-09-19T22:16:00.001+10:00</published><updated>2011-09-19T22:16:46.945+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 120</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDHaMFTTNNnxem-2AKRpPVQWqE7L0WVbwL9inuyzy642V6ZRKQp0Mj7kBj88plYI7ek1glkwHA87eTXWe7B6U7Ob7_VImexePCejMg2QxbFXBHNVHSLuQmoALfiiZQcZ4ilEHwfj316Di-/s1600/artificial-intelligence.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDHaMFTTNNnxem-2AKRpPVQWqE7L0WVbwL9inuyzy642V6ZRKQp0Mj7kBj88plYI7ek1glkwHA87eTXWe7B6U7Ob7_VImexePCejMg2QxbFXBHNVHSLuQmoALfiiZQcZ4ilEHwfj316Di-/s400/artificial-intelligence.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
The last post was 48 days ago on Tuesday 2nd August 2011, &lt;a href=&quot;http://tb-nguyen.blogspot.com/2011/08/developer-journal-119.html&quot;&gt;Developer Journal 119&lt;/a&gt;. The past few weeks have been about getting my act together and getting over being sick. Coding and experimenting came to an almost standstill. Now, some basic experiments have to be done before work can continue on connecting the neural network and the robot arms and legs.&lt;br /&gt;
&lt;br /&gt;
A few ideas came to me while at the 2011 Australian Singularity Summit, about how to more easily modify the neural network to allow additional inputs and outputs on the fly. Part of me is eager to implement those ideas and another part of me is hesitant to face the complexity.&lt;br /&gt;
&lt;br /&gt;
The way child neural networks combine from parent neural networks still doesn&#39;t seem right to me but I don&#39;t know what to do about it.&lt;br /&gt;
&lt;br /&gt;
Grr, loading up a file with 247 robots takes 8 minutes, 17 seconds. A new computer would be great about now with a faster processor, more memory, and a solid state drive. &lt;br /&gt;
&lt;br /&gt;
It&#39;s also been about 48 days since I&#39;ve run any experiments. I ran a experiment with the population that&#39;s been ongoing for a while yesterday. I expected that the population should survive but it died and I&#39;m worried because I&#39;m not sure what&#39;s changed.&lt;br /&gt;
&lt;br /&gt;
The save file I continued from had 56 robots so I went back to an earlier save file with 247 robots, culled the population to 128 robots, and continued the simulation.&lt;br /&gt;
&lt;br /&gt;
I ran a few experiments over the past few days where I had changed a few things and the populations died out so I want to make sure that the original conditions still resulted in a population that can persist.&lt;br /&gt;
&lt;br /&gt;
Grr. A few robots are getting stuck on top of the walls! They can&#39;t move off the walls because I disabled their ability to move when they&#39;re above the ground by a little bit. This was to prevent robots from flying off the ground when they face away from the ground. I increased the wall height to 10 metres and changed the code to reset robot positions if robots get higher than 10 metres which they shouldn&#39;t be able to.&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
RELATED
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.google.com/document/d/1ii5-_EU6HG-gHpSW_8wZEG73joJdTVe20q35hd281lY/edit?hl=en_US&quot;&gt;Completed and Next Actions List (View on Google Docs)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.google.com/document/pub?id=1ii5-_EU6HG-gHpSW_8wZEG73joJdTVe20q35hd281lY&quot;&gt;Completed and Next Actions List (View as a web page)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tb-nguyen.blogspot.com/2011/01/actions.html&quot;&gt; Completed and Next Actions Blog Post&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/3160800034845371360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/09/developer-journal-120.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/3160800034845371360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/3160800034845371360'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/09/developer-journal-120.html' title='Developer Journal 120'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/18392475471994620631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDHaMFTTNNnxem-2AKRpPVQWqE7L0WVbwL9inuyzy642V6ZRKQp0Mj7kBj88plYI7ek1glkwHA87eTXWe7B6U7Ob7_VImexePCejMg2QxbFXBHNVHSLuQmoALfiiZQcZ4ilEHwfj316Di-/s72-c/artificial-intelligence.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-2439531467127745061</id><published>2011-08-09T17:43:00.000+10:00</published><updated>2011-08-09T17:43:20.206+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Training Journal"/><title type='text'>Training Journal</title><content type='html'>My prospects of training tonight aren&#39;t good. I&#39;ve got too much PhD and tutoring work to do. On top of that I&#39;m a little sick.</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/2439531467127745061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/08/training-journal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/2439531467127745061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/2439531467127745061'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/08/training-journal.html' title='Training Journal'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/04094393751418378992</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbhGqcLBtcjsVxeUENqowTPDFRAXwb9NcUitNzyAiC546XNHDqvwRRI9MDUxreHwd-bIljUot-TtNac8L6FgDsceWIFuZuyYWN-qZKpVFbQ4A5SnYZ3hvOAGIiAznQfiU/s1600/binh-nguyen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-4262362959917013392</id><published>2011-08-03T13:33:00.003+10:00</published><updated>2011-08-04T09:39:15.578+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="how to"/><title type='text'>How to do a backtrace, trace, step, and more in CLISP</title><content type='html'>To do a backtrace&lt;br /&gt;
&lt;br /&gt;
&gt; :bt&lt;br /&gt;
&lt;br /&gt;
To enable a trace&lt;br /&gt;
&lt;br /&gt;
&gt; (trace factorial)&lt;br /&gt;
&gt; (factorial 3)&lt;br /&gt;
&lt;br /&gt;
To disable a trace&lt;br /&gt;
&lt;br /&gt;
&gt; (untrace factorial)&lt;br /&gt;
&gt; (factorial 3)&lt;br /&gt;
&lt;br /&gt;
To enable trace indentation&lt;br /&gt;
&lt;br /&gt;
&gt; (setq *trace-indent* t)&lt;br /&gt;
&lt;br /&gt;
To disable trace indentation&lt;br /&gt;
&lt;br /&gt;
&gt; (setq *trace-indent* nil)&lt;br /&gt;
&lt;br /&gt;
To do stepping&lt;br /&gt;
&lt;br /&gt;
&gt; (step (factorial 3))&lt;br /&gt;
&gt; :s&lt;br /&gt;
&lt;br /&gt;
To display the current directory&lt;br /&gt;
&lt;br /&gt;
&gt; (cd)&lt;br /&gt;
&lt;br /&gt;
To display the contents of the current directory&lt;br /&gt;
&lt;br /&gt;
&gt; (dir)&lt;br /&gt;
&lt;br /&gt;
To display the load paths&lt;br /&gt;
&lt;br /&gt;
&gt; *load-paths*&lt;br /&gt;
&lt;br /&gt;
To quit&lt;br /&gt;
&lt;br /&gt;
&gt; (quit)&lt;br /&gt;
&lt;br /&gt;
To get out of debug&lt;br /&gt;
&lt;br /&gt;
&gt; :a&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
&lt;br /&gt;
* CLISP version 2.49&lt;br /&gt;
&lt;br /&gt;
* Backtracing is not that useful&lt;br /&gt;
&lt;br /&gt;
* Stepping can be tedious but it helps to illustrate what&#39;s going on in the background&lt;br /&gt;
&lt;br /&gt;
* Trace is the best all rounder, especially when you enable indentation</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/4262362959917013392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/08/how-to-do-backtrace-trace-and-step-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/4262362959917013392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/4262362959917013392'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/08/how-to-do-backtrace-trace-and-step-in.html' title='How to do a backtrace, trace, step, and more in CLISP'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/04094393751418378992</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbhGqcLBtcjsVxeUENqowTPDFRAXwb9NcUitNzyAiC546XNHDqvwRRI9MDUxreHwd-bIljUot-TtNac8L6FgDsceWIFuZuyYWN-qZKpVFbQ4A5SnYZ3hvOAGIiAznQfiU/s1600/binh-nguyen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-2721305057624967974</id><published>2011-08-02T18:29:00.001+10:00</published><updated>2011-08-02T18:30:35.714+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="developer journal"/><title type='text'>Developer Journal 119</title><content type='html'>After 11 hours 51 minutes and 10 seconds real time or 2 hours 59 minutes and 5 seconds simulation time, the population that I started from scratch a few days ago has reached the upper limit of 256 robots. I&#39;ve saved those robots in save file 110802-1146 (87 MB). &lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;I randomly reduced the population to 56 robots and saved those robots in save file &lt;br /&gt;
110802-1152 (18 MB). &lt;br /&gt;
&lt;br /&gt;
Next I&#39;ll do the same thing again with a population of robots where I&#39;ve disabled the Hebbian learning. Ideally, the population of robots should not persist which demonstrates that Hebbian learning is an important component.&lt;br /&gt;
&lt;br /&gt;
I&#39;ve started another population from scratch with learning disabled. I can&#39;t see any particular differences in behaviour.&lt;br /&gt;
&lt;br /&gt;
I was just thinking that other interesting pieces of input to the neural network are linear velocity and angular velocity. Perhaps too linear force and angular force. Other things could be friction and contact points.&lt;br /&gt;
&lt;br /&gt;
It could be that evolutionary learning is enough to compensate for the lack of personal learning. It could be that the random initialisation of the neural network is enough to survive coupled with the relatively easy living conditions in the simulation. I dunno.&lt;br /&gt;
&lt;br /&gt;
I feel evil hoping that they&#39;ll die.&lt;br /&gt;
&lt;br /&gt;
Each block of food represents a lot of energy and the robots are gulping them down. I&#39;m thinking of reducing how much energy a block of food contains and regulating the rate of adding food to the world. I can also regulate how the rate at which a robot can absorb energy.&lt;br /&gt;
&lt;br /&gt;
One of the things that concerned me with introducing gender is that it could lead to a gender imbalance. It just occurred to me that I could determine the gender of the child robot to be what I need to keep the population balanced.&lt;br /&gt;
&lt;br /&gt;
Sigh, the population from scratch without learning is still going strong. It&#39;s been 1 hour 50 minutes and 59 seconds simulation time and 4 hours 55 minutes and 1 second real time. I&#39;m going to have to adjust things so that conditions in the simulation are tough enough to require Hebbian learning.&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;br /&gt;
RELATED &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://docs.google.com/document/d/1ii5%0A%0A-_EU6HG-%0A%0AgHpSW_8wZEG73joJdTVe20q35hd281lY/edit?%0A%0Ahl=en_US&quot;&gt;Completed and Next Actions List (View on Google Docs)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.google.com/document/pub?%0A%0Aid=1ii5-_EU6HG-%0A%0AgHpSW_8wZEG73joJdTVe20q35hd281lY&quot;&gt;Completed and Next Actions List (View as a web page)&lt;br /&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tb-%0a%0anguyen.blogspot.com/2011/01/actions.html&quot;&gt; Completed and Next Actions Blog Post&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/2721305057624967974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/08/developer-journal-119.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/2721305057624967974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/2721305057624967974'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/08/developer-journal-119.html' title='Developer Journal 119'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/04094393751418378992</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbhGqcLBtcjsVxeUENqowTPDFRAXwb9NcUitNzyAiC546XNHDqvwRRI9MDUxreHwd-bIljUot-TtNac8L6FgDsceWIFuZuyYWN-qZKpVFbQ4A5SnYZ3hvOAGIiAznQfiU/s1600/binh-nguyen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1009065821066594816.post-6536160043237366061</id><published>2011-08-02T10:34:00.003+10:00</published><updated>2011-08-02T10:59:19.107+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="how to"/><title type='text'>How to fix  SVN &quot;could not connect to server&quot; and &quot;authorization failed: Could not authenticate to server: rejected Basic challenge&quot;</title><content type='html'>ERROR MESSAGE 1&lt;br /&gt;
&lt;br /&gt;
svn: OPTIONS of &#39;http://crossroadscorp.unfuddle.com/svn/crossroadscorp_agi&#39;: could not connect to server (http://crossroadscorp.unfuddle.com)&lt;br /&gt;
&lt;br /&gt;
I got this message because my wired internet access at a university has a firewall. &lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;You can solve this problem by connecting through the wireless or by using SSL. Using SSL means switching from http to https.&lt;br /&gt;
&lt;br /&gt;
ERROR MESSAGE 2&lt;br /&gt;
&lt;br /&gt;
svn OPTIONS of &#39;https://crossroadscorp.unfuddle.com/svn/crossroadscorp_agi&#39;: authorization failed: Could not authenticate to server: rejected Basic challenge (https://crossroadscorp.unfuddle.com)&lt;br /&gt;
&lt;br /&gt;
I&#39;ve been using a free SVN service from Unfuddle. The problem is I thought they provided SSL but they don&#39;t.&lt;br /&gt;
&lt;br /&gt;
Choose a service that provides free SSL such as Project Locker.&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;br /&gt;
NOTES&lt;br /&gt;
&lt;br /&gt;
+ This demonstrates that I&#39;m bad at reading. I was going to say that I&#39;m bad at reading the fine print but that&#39;s not fair to Unfuddle who has made the information clear if one looks.&lt;br /&gt;
&lt;br /&gt;
+ This took me ages to figure out. I gave up early on and purchased a wireless USB for my desktop. It is because I&#39;m tutoring a subject where I&#39;ve encouraged the students to use SVN that I&#39;ve investigated further.&lt;br /&gt;
&lt;br /&gt;
+ I don&#39;t really know what SSL is beyond that it stands for Secure Sockets Layer. Yep. There&#39;s also something called SSH and I also don&#39;t know what that is either.&lt;br /&gt;
&lt;br /&gt;
+ Your SVN username at Project Locker is your email address! This took me ages to figure out as well.&lt;br /&gt;
&lt;br /&gt;
+ I googled for quite a while but there wasn&#39;t any useful information, just the opposite actually.</content><link rel='replies' type='application/atom+xml' href='http://tb-nguyen.blogspot.com/feeds/6536160043237366061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tb-nguyen.blogspot.com/2011/08/how-to-fix-svn-could-not-connect-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/6536160043237366061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1009065821066594816/posts/default/6536160043237366061'/><link rel='alternate' type='text/html' href='http://tb-nguyen.blogspot.com/2011/08/how-to-fix-svn-could-not-connect-to.html' title='How to fix  SVN &quot;could not connect to server&quot; and &quot;authorization failed: Could not authenticate to server: rejected Basic challenge&quot;'/><author><name>Binh Nguyen</name><uri>http://www.blogger.com/profile/04094393751418378992</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbhGqcLBtcjsVxeUENqowTPDFRAXwb9NcUitNzyAiC546XNHDqvwRRI9MDUxreHwd-bIljUot-TtNac8L6FgDsceWIFuZuyYWN-qZKpVFbQ4A5SnYZ3hvOAGIiAznQfiU/s1600/binh-nguyen.jpg'/></author><thr:total>0</thr:total></entry></feed>