<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>branecloud Wiki Rss Feed</title><link>http://branecloud.codeplex.com/</link><description>branecloud Wiki Rss Description</description><item><title>Updated Wiki: Home</title><link>http://branecloud.codeplex.com/wikipage?version=92</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Project Description&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Industrial-Strength Evolutionary Computation for .NET 4.0&lt;/h3&gt;
&lt;h5&gt;This is an independent port of &lt;strong&gt;&lt;a href="http://www.cs.gmu.edu/~eclab/projects/ecj/"&gt;Sean Luke's venerable ECJ project (GMU EC Lab) Version 20&lt;/a&gt;&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;&lt;br&gt;
&lt;strong&gt;NOTE: This conversion to C# cannot and will not in any way be supported by Sean or any other member of his team at GMU. Please do not even ask! It is incredible that software of this caliber is made available in open-source form, and that is more than
 enough support! &lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
It is hard to imagine how many hours Sean and his team have put into this over the course of
&lt;strong&gt;13 years&lt;/strong&gt;. But suffice it to say: &lt;br&gt;
&lt;strong&gt;ECJ is an 800 lb Gorilla in the realm of Evolutionary Computation and Stochastic Optimization&lt;/strong&gt;.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;MILD WARNING: ECJ&lt;/strong&gt; is used for some very serious business (and this C# version has, or will shortly have, all of the same capabilities).
&lt;em&gt;But you don't need to get scared off by that&lt;/em&gt;. A comprehensive collection of samples is provided with
&lt;strong&gt;ECJ&lt;/strong&gt;, and the documentation that you can browse on &lt;strong&gt;Sean's&lt;/strong&gt; site covers all of the basics and well beyond. I highly recommend that newbies work with
&lt;strong&gt;ECJ&lt;/strong&gt; in &lt;strong&gt;JAVA&lt;/strong&gt; before you decide if this converted fork makes sense for you. The need for tight native .NET platform integration is potentially uncalled for, and you must ask yourself,
&lt;strong&gt;&amp;quot;Do I really Need This?&amp;quot;. Chances are, you don't.&lt;/strong&gt; But I personally really
&lt;em&gt;DO&lt;/em&gt; need this, and I&amp;rsquo;m happy to spare others with similar requirements all of the heavy lifting required to get it this far.
&lt;em&gt;Trust me, it is a DAUNTING challenge to preserve delicate algorithms when there are so many moving parts.&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
I have made all of the samples bundled in the original Java version equally accessible to those of you who need orientation in C#. Each sample is set up as a bare-bones console app that you can &amp;quot;fiddle&amp;quot; with to your heart's content. But also, and this is something
 that is &lt;em&gt;NOT&lt;/em&gt; provided in the original software, there are &lt;strong&gt;&lt;span style="color:#ff0000"&gt;over 500 unit tests&lt;/span&gt;&lt;/strong&gt; that I wrote during the conversion process. This turns out to be quite a useful side-effect of going through the whole
 torturous exercise in the first place! These tests, although perhaps still a little incoherent in places (because they focus on specific conversion issues), make it even easier to dig deep without stumbling around in total bewilderment (well, you may still
 stumble around, but they do provide a bit of a handrail to lean on when you start feeling sick to your stomach). \'-)
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Side Note: &lt;em&gt;There are likely to wind up being several &lt;span style="color:#ff0000"&gt;
thousands of tests&lt;/span&gt; associated with this software. I only covered what was causing difficulty during the conversion process, and that is but a small fraction of the full coverage this software deserves. (&amp;quot;sheesh&amp;quot;, as Sean is wont to say, I must be freaking
 crazy!)&lt;/em&gt;&lt;/strong&gt; &lt;br&gt;
&lt;br&gt;
If you are not familiar with the purpose of this software, you can purchase Sean's excellent book entitled
&lt;strong&gt;&lt;a href="http://www.lulu.com/product/paperback/essentials-of-metaheuristics/15028803"&gt;The Essentials of Metaheuristics&lt;/a&gt;&lt;/strong&gt; (or download the electronic version for free). You can also find numerous articles and academic papers on the website
 listed above, covering a variety of related topics. If you plan on doing really serious work in this field, you might also consider starting out with the early works of
&lt;strong&gt;&lt;a href="http://www.genetic-programming.com/johnkoza.html"&gt;John Koza (Genetic Programming I, II, et al)&lt;/a&gt;&lt;/strong&gt; and then move on through the ever-expanding body of research that grew from there. Or if you
&lt;em&gt;really&lt;/em&gt; get serious about this stuff, you will probably want to start all the way back with
&lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/John_Henry_Holland"&gt;John Holland&lt;/a&gt;&lt;/strong&gt;, who as many of you may already know, is generally considered the &amp;quot;father&amp;quot; of research into the field of
&lt;strong&gt;Genetic Algorithms&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
&lt;strong&gt;ECJ&lt;/strong&gt; targets &lt;strong&gt;Java&lt;/strong&gt;, because large scale evolutionary processes often need to interoperate seamlessly between workstations, which may or may not be hosting Windows, and back-end &amp;quot;heavy metal&amp;quot; hosting one of the
&lt;strong&gt;UNIX/LINUX&lt;/strong&gt; variants. Such environments are typical in many large enterprise and academic research settings, as you all well know (or know all too well!). If that kind of heterogeneous environment describes where
&lt;em&gt;YOU&lt;/em&gt; develop complex systems to solve difficult problems, then you will definitely want to trot on over to Sean's lab and familiarize yourself with the
&lt;strong&gt;Java&lt;/strong&gt; &amp;quot;source&amp;quot; code. &lt;br&gt;
&lt;br&gt;
On the other hand..., if you develop your software for homogenous environments with
&lt;strong&gt;Windows7 and Server 2003/2008/2008R2&lt;/strong&gt;, then you may want to consider downloading the converted
&lt;strong&gt;Open Source&lt;/strong&gt; &lt;strong&gt;C#&lt;/strong&gt; code hosted here to take full advantage of tight integration with the latest features provided by
&lt;strong&gt;.NET 4.0&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
Obviously I won't be able to deliver anywhere near the same level of support that a dedicated team can provide (almost none at all in fact). But if you are willing to work hard at it, or if you just want to experiment with the basics, everything you need to
 go the full distance is (or will shortly be) available in the download. I didn't leave anything out. But I should repeat the warning given above: some things have
&lt;em&gt;NOT YET&lt;/em&gt; been covered in the unit tests. I haven't had the time, for example, to test whether the Master / Slave communications are working (it uses simple sockets, so I'm not too worried about that, because I'll be migrating it to WCF4). Same goes
 for Island Exchange for speciation, coevolution, and maybe another thing or two. The
&lt;strong&gt;ECJ&lt;/strong&gt; team was actively revamping some of the code for a robotics exercise while I was still in the middle of the conversion. Those gaps in coverage will be closed in due course.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;I'll also revisit the ECJ SVN repository in coming weeks to pick up any new bits that show up and integrate any bug fixes and significant changes.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
The goal for this project is to try and deliver a conversion of the latest bits as they accrue in
&lt;strong&gt;ECJ&lt;/strong&gt;, while maintaining a robust and flexible platform on which to develop in
&lt;strong&gt;C#, F#, IronPython, IronRuby, VB.NET&lt;/strong&gt; and so on. I will also be keeping my eye out for other juicy plums that will integrate nicely with this software. In fact,
&lt;strong&gt;ECJ&lt;/strong&gt; has a sibling project for &lt;strong&gt;&amp;quot;Multi-Agent Simulation of Neighborhoods, or Networks (or something)&amp;quot; (aka MASON)&lt;/strong&gt; that fits the bill perfectly&amp;nbsp;(&amp;quot;sheesh&amp;quot;, I must be out of my freaking mind!). And integration with
&lt;strong&gt;&lt;a href="http://research.microsoft.com/en-us/collaboration/tools/trident.aspx"&gt;Microsoft's Project Trident&lt;/a&gt;&lt;/strong&gt; collaborative scientific research platform seems like a
&lt;strong&gt;yes&lt;em&gt;-braner&lt;/em&gt;&lt;/strong&gt;. But there are also many other interesting possibilities.
&lt;strong&gt;Stay tuned!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE: This software is a central feature in a much larger development picture that is partially laid out in the
&lt;a href="http://branecloud.codeplex.com/wikipage?title=Vision&amp;version=8"&gt;Vision&lt;/a&gt; statement. Additional information will be made available in the
&lt;a href="http://branecloud.codeplex.com/documentation"&gt;Documentation&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;BTW: BraneCloud&lt;/strong&gt; is linked to a registered domain (net|com) for future things like
&lt;strong&gt;name/schema&lt;/strong&gt; resolution in the &lt;strong&gt;cloud&lt;/strong&gt;. So the only thing I ask if you want to derive your own fork from this one is that you
&lt;strong&gt;please use a different root namespace&lt;/strong&gt; to avoid collisions. Other that that, you are free to do with this what you will, so long as it abides by the stated licensing terms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ECJ License (AFL 3.0)&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;BraneCloud.Evolution.EC (Apache 2.0)&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;(Sean informs me that he may eventually be switching to the Apache license when he gets around to it.)&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Thu, 26 Jul 2012 03:05:07 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120726030507A</guid></item><item><title>Updated Wiki: Home</title><link>http://branecloud.codeplex.com/wikipage?version=91</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Project Description&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Industrial-Strength Evolutionary Computation for .NET 4.0&lt;/h3&gt;
&lt;h5&gt;This is an independent port of &lt;strong&gt;&lt;a href="http://www.cs.gmu.edu/~eclab/projects/ecj/"&gt;Sean Luke's venerable ECJ project (GMU EC Lab) Version 20&lt;/a&gt;&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;&lt;br&gt;
&lt;strong&gt;NOTE: This conversion to C# cannot and will not in any way be supported by Sean or any other member of his team at GMU. Please do not even ask! It is incredible that software of this caliber is made available in open-source form, and that is more than
 enough support! &lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
It is hard to imagine how many hours Sean and his team have put into this over the course of
&lt;strong&gt;13 years&lt;/strong&gt;. But suffice it to say: &lt;br&gt;
&lt;strong&gt;ECJ is an 800 lb Gorilla in the realm of Evolutionary Computation and Stochastic Optimization&lt;/strong&gt;.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;MILD WARNING: ECJ&lt;/strong&gt; is used for some very serious business (and this C# version has, or will shortly have, all of the same capabilities).
&lt;em&gt;But you don't need to get scared off by that&lt;/em&gt;. A comprehensive collection of samples is provided with
&lt;strong&gt;ECJ&lt;/strong&gt;, and the documentation that you can browse on &lt;strong&gt;Sean's&lt;/strong&gt; site covers all of the basics and well beyond. I highly recommend that newbies work with
&lt;strong&gt;ECJ&lt;/strong&gt; in &lt;strong&gt;JAVA&lt;/strong&gt; before you decide if this converted fork makes sense for you. The need for tight native .NET platform integration is potentially uncalled for, and you must ask yourself,
&lt;strong&gt;&amp;quot;Do I really Need This?&amp;quot;. Chances are, you don't.&lt;/strong&gt; But I personally really
&lt;em&gt;DO&lt;/em&gt; need this, and I&amp;rsquo;m happy to spare others with similar requirements all of the heavy lifting required to get it this far.
&lt;em&gt;Trust me, it is a DAUNTING challenge to preserve delicate algorithms when there are so many moving parts.&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
I have made all of the samples bundled in the original Java version equally accessible to those of you who need orientation in C#. Each sample is set up as a bare-bones console app that you can &amp;quot;fiddle&amp;quot; with to your heart's content. But also, and this is something
 that is &lt;em&gt;NOT&lt;/em&gt; provided in the original software, there are &lt;strong&gt;&lt;span style="color:#ff0000"&gt;over 500 unit tests&lt;/span&gt;&lt;/strong&gt; that I wrote during the conversion process. This turns out to be quite a useful side-effect of going through the whole
 torturous exercise in the first place! These tests, although perhaps still a little incoherent in places (because they focus on specific conversion issues), make it even easier to dig deep without stumbling around in total bewilderment (well, you may still
 stumble around, but they do provide a bit of a handrail to lean on when you start feeling sick to your stomach). \'-)
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Side Note: &lt;em&gt;There are likely to wind up being several &lt;span style="color:#ff0000"&gt;
thousands of tests&lt;/span&gt; associated with this software. I only covered what was causing difficulty during the conversion process, and that is but a small fraction of the full coverage this software deserves. (&amp;quot;sheesh&amp;quot;, as Sean is wont to say, I must be freaking
 crazy!)&lt;/em&gt;&lt;/strong&gt; &lt;br&gt;
&lt;br&gt;
If you are not familiar with the purpose of this software, you can purchase Sean's excellent book entitled
&lt;strong&gt;&lt;a href="http://www.lulu.com/product/paperback/essentials-of-metaheuristics/15028803"&gt;The Essentials of Metaheuristics&lt;/a&gt;&lt;/strong&gt; (or download the electronic version for free). You can also find numerous articles and academic papers on the website
 listed above, covering a variety of related topics. If you plan on doing really serious work in this field, you might also consider starting out with the early works of
&lt;strong&gt;&lt;a href="http://www.genetic-programming.com/johnkoza.html"&gt;John Koza (Genetic Programming I, II, et al)&lt;/a&gt;&lt;/strong&gt; and then move on through the ever-expanding body of research that grew from there. Or if you
&lt;em&gt;really&lt;/em&gt; get serious about this stuff, you will probably want to start all the way back with
&lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/John_Henry_Holland"&gt;John Holland&lt;/a&gt;&lt;/strong&gt;, who as many of you may already know, is generally considered the &amp;quot;father&amp;quot; of research into the field of
&lt;strong&gt;Genetic Algorithms&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
&lt;strong&gt;ECJ&lt;/strong&gt; targets &lt;strong&gt;Java&lt;/strong&gt;, because large scale evolutionary processes often need to interoperate seamlessly between workstations, which may or may not be hosting Windows, and back-end &amp;quot;heavy metal&amp;quot; hosting one of the
&lt;strong&gt;UNIX/LINUX&lt;/strong&gt; variants. Such environments are typical in many large enterprise and academic research settings, as you all well know (or know all too well!). If that kind of heterogeneous environment describes where
&lt;em&gt;YOU&lt;/em&gt; develop complex systems to solve difficult problems, then you will definitely want to trot on over to Sean's lab and familiarize yourself with the
&lt;strong&gt;Java&lt;/strong&gt; &amp;quot;source&amp;quot; code. &lt;br&gt;
&lt;br&gt;
On the other hand..., if you develop your software for homogenous environments with
&lt;strong&gt;Windows7 and Server 2003/2008/2008R2&lt;/strong&gt;, then you may want to consider downloading the converted
&lt;strong&gt;Open Source&lt;/strong&gt; &lt;strong&gt;C#&lt;/strong&gt; code hosted here to take full advantage of tight integration with the latest features provided by
&lt;strong&gt;.NET 4.0&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
Obviously I won't be able to deliver anywhere near the same level of support that a dedicated team can provide (almost none at all in fact). But if you are willing to work hard at it, or if you just want to experiment with the basics, everything you need to
 go the full distance is (or will shortly be) available in the download. I didn't leave anything out. But I should repeat the warning given above: some things have
&lt;em&gt;NOT YET&lt;/em&gt; been covered in the unit tests. I haven't had the time, for example, to test whether the Master / Slave communications are working (it uses simple sockets, so I'm not too worried about that, because I'll be migrating it to WCF4). Same goes
 for Island Exchange for speciation, coevolution, and maybe another thing or two. The
&lt;strong&gt;ECJ&lt;/strong&gt; team was actively revamping some of the code for a robotics exercise while I was still in the middle of the conversion. Those gaps in coverage will be closed in due course.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;I'll also revisit the ECJ SVN repository in coming weeks to pick up any new bits that show up and integrate any bug fixes and significant changes.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
The goal for this project is to try and deliver a conversion of the latest bits as they accrue in
&lt;strong&gt;ECJ&lt;/strong&gt;, while maintaining a robust and flexible platform on which to develop in
&lt;strong&gt;C#, F#, IronPython, IronRuby, VB.NET&lt;/strong&gt; and so on. I will also be keeping my eye out for other juicy plums that will integrate nicely with this software. In fact,
&lt;strong&gt;ECJ&lt;/strong&gt; has a sibling project for &lt;strong&gt;&amp;quot;Multi-Agent Simulation of Neighborhoods, or Networks (or something)&amp;quot; (aka MASON)&lt;/strong&gt; that fits the bill perfectly&amp;nbsp;(&amp;quot;sheesh&amp;quot;, I must be out of my freaking mind!). And integration with
&lt;strong&gt;&lt;a href="http://research.microsoft.com/en-us/collaboration/tools/trident.aspx"&gt;Microsoft's Project Trident&lt;/a&gt;&lt;/strong&gt; collaborative scientific research platform seems like a yes&lt;em&gt;-braner&lt;/em&gt;. But there are also many other interesting possibilities.
&lt;strong&gt;Stay tuned!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE: This software is a central feature in a much larger development picture that is partially laid out in the
&lt;a href="http://branecloud.codeplex.com/wikipage?title=Vision&amp;version=8"&gt;Vision&lt;/a&gt; statement. Additional information will be made available in the
&lt;a href="http://branecloud.codeplex.com/documentation"&gt;Documentation&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;BTW: BraneCloud&lt;/strong&gt; is linked to a registered domain (net|com) for future things like
&lt;strong&gt;name/schema&lt;/strong&gt; resolution in the &lt;strong&gt;cloud&lt;/strong&gt;. So the only thing I ask if you want to derive your own fork from this one is that you
&lt;strong&gt;please use a different root namespace&lt;/strong&gt; to avoid collisions. Other that that, you are free to do with this what you will, so long as it abides by the stated licensing terms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ECJ License (AFL 3.0)&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;BraneCloud.Evolution.EC (Apache 2.0)&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;(Sean informs me that he may eventually be switching to the Apache license when he gets around to it.)&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Thu, 26 Jul 2012 03:02:11 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120726030211A</guid></item><item><title>Updated Wiki: Home</title><link>http://branecloud.codeplex.com/wikipage?version=90</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Project Description&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Industrial-Strength Evolutionary Computation for .NET 4.0&lt;/h3&gt;
&lt;h5&gt;This is an independent port of &lt;strong&gt;&lt;a href="http://www.cs.gmu.edu/~eclab/projects/ecj/"&gt;Sean Luke's venerable ECJ project (GMU EC Lab) Version 20&lt;/a&gt;&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;&lt;br&gt;
&lt;strong&gt;NOTE: This conversion to C# cannot and will not in any way be supported by Sean or any other member of his team at GMU. Please do not even ask! It is incredible that software of this caliber is made available in open-source form, and that is more than
 enough support! &lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
It is hard to imagine how many hours Sean and his team have put into this over the course of
&lt;strong&gt;13 years&lt;/strong&gt;. But suffice it to say: &lt;br&gt;
&lt;strong&gt;ECJ is an 800 lb Gorilla in the realm of Evolutionary Computation and Stochastic Optimization&lt;/strong&gt;.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;MILD WARNING: ECJ&lt;/strong&gt; is used for some very serious business (and this C# version has, or will shortly have, all of the same capabilities).
&lt;em&gt;But you don't need to get scared off by that&lt;/em&gt;. A comprehensive collection of samples is provided with
&lt;strong&gt;ECJ&lt;/strong&gt;, and the documentation that you can browse on &lt;strong&gt;Sean's&lt;/strong&gt; site covers all of the basics and well beyond. I highly recommend that newbies work with
&lt;strong&gt;ECJ&lt;/strong&gt; in &lt;strong&gt;JAVA&lt;/strong&gt; before you decide if this converted fork makes sense for you. The need for tight native .NET platform integration is potentially uncalled for, and you must ask yourself,
&lt;strong&gt;&amp;quot;Do I really Need This?&amp;quot;. Chances are, you don't.&lt;/strong&gt; But I personally really
&lt;em&gt;DO&lt;/em&gt; need this, and I&amp;rsquo;m happy to spare others with similar requirements all of the heavy lifting required to get it this far.
&lt;em&gt;Trust me, it is a DAUNTING challenge to preserve delicate algorithms when there are so many moving parts.&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
I have made all of the samples bundled in the original Java version equally accessible to those of you who need orientation in C#. Each sample is set up as a bare-bones console app that you can &amp;quot;fiddle&amp;quot; with to your heart's content. But also, and this is something
 that is &lt;em&gt;NOT&lt;/em&gt; provided in the original software, there are &lt;strong&gt;&lt;span style="color:#ff0000"&gt;over 500 unit tests&lt;/span&gt;&lt;/strong&gt; that I wrote during the conversion process. This turns out to be quite a useful side-effect of going through the whole
 torturous exercise in the first place! These tests, although perhaps still a little incoherent in places (because they focus on specific conversion issues), make it even easier to dig deep without stumbling around in total bewilderment (well, you may still
 stumble around, but they do provide a bit of a handrail to lean on when you start feeling sick to your stomach). \'-)
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Side Note: &lt;em&gt;There are likely to wind up being several &lt;span style="color:#ff0000"&gt;
thousands of tests&lt;/span&gt; associated with this software. I only covered what was causing difficulty during the conversion process, and that is but a small fraction of the full coverage this software deserves. (&amp;quot;sheesh&amp;quot;, as Sean is wont to say, I must be freaking
 crazy!)&lt;/em&gt;&lt;/strong&gt; &lt;br&gt;
&lt;br&gt;
If you are not familiar with the purpose of this software, you can purchase Sean's excellent book entitled
&lt;strong&gt;&lt;a href="http://www.lulu.com/product/paperback/essentials-of-metaheuristics/15028803"&gt;The Essentials of Metaheuristics&lt;/a&gt;&lt;/strong&gt; (or download the electronic version for free). You can also find numerous articles and academic papers on the website
 listed above, covering a variety of related topics. If you plan on doing really serious work in this field, you might also consider starting out with the early works of
&lt;strong&gt;&lt;a href="http://www.genetic-programming.com/johnkoza.html"&gt;John Koza (Genetic Programming I, II, et al)&lt;/a&gt;&lt;/strong&gt; and then move on through the ever-expanding body of research that grew from there. Or if you
&lt;em&gt;really&lt;/em&gt; get serious about this stuff, you will probably want to start all the way back with
&lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/John_Henry_Holland"&gt;John Holland&lt;/a&gt;&lt;/strong&gt;, who as many of you may already know, is generally considered the &amp;quot;father&amp;quot; of research into the field of
&lt;strong&gt;Genetic Algorithms&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
&lt;strong&gt;ECJ&lt;/strong&gt; targets &lt;strong&gt;Java&lt;/strong&gt;, because large scale evolutionary processes often need to interoperate seamlessly between workstations, which may or may not be hosting Windows, and back-end &amp;quot;heavy metal&amp;quot; hosting one of the
&lt;strong&gt;UNIX/LINUX&lt;/strong&gt; variants. Such environments are typical in many large enterprise and academic research settings, as you all well know (or know all too well!). If that kind of heterogeneous environment describes where
&lt;em&gt;YOU&lt;/em&gt; develop complex systems to solve difficult problems, then you will definitely want to trot on over to Sean's lab and familiarize yourself with the
&lt;strong&gt;Java&lt;/strong&gt; &amp;quot;source&amp;quot; code. &lt;br&gt;
&lt;br&gt;
On the other hand..., if you develop your software for homogenous environments with
&lt;strong&gt;Windows7 and Server 2003/2008/2008R2&lt;/strong&gt;, then you may want to consider downloading the converted
&lt;strong&gt;Open Source&lt;/strong&gt; &lt;strong&gt;C#&lt;/strong&gt; code hosted here to take full advantage of tight integration with the latest features provided by
&lt;strong&gt;.NET 4.0&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
Obviously I won't be able to deliver anywhere near the same level of support that a dedicated team can provide (almost none at all in fact). But if you are willing to work hard at it, or if you just want to experiment with the basics, everything you need to
 go the full distance is (or will shortly be) available in the download. I didn't leave anything out. But I should repeat the warning given above: some things have
&lt;em&gt;NOT YET&lt;/em&gt; been covered in the unit tests. I haven't had the time, for example, to test whether the Master / Slave communications are working (it uses simple sockets, so I'm not too worried about that, because I'll be migrating it to WCF4). Same goes
 for Island Exchange for speciation, coevolution, and maybe another thing or two. The
&lt;strong&gt;ECJ&lt;/strong&gt; team was actively revamping some of the code for a robotics exercise while I was still in the middle of the conversion. Those gaps in coverage will be closed in due course.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;I'll also revisit the ECJ SVN repository in coming weeks to pick up any new bits that show up and integrate any bug fixes and significant changes.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
The goal for this project is to try and deliver a conversion of the latest bits as they accrue in
&lt;strong&gt;ECJ&lt;/strong&gt;, while maintaining a robust and flexible platform on which to develop in
&lt;strong&gt;C#, F#, IronPython, IronRuby, VB.NET&lt;/strong&gt; and so on. I will also be keeping my eye out for other juicy plums that will integrate nicely with this software. In fact,
&lt;strong&gt;ECJ&lt;/strong&gt; has a sibling project for &lt;strong&gt;&amp;quot;Multi-Agent Simulation of Neighborhoods, or Networks (or something)&amp;quot; (aka MASON)&lt;/strong&gt; that fits the bill perfectly&amp;nbsp;(&amp;quot;sheesh&amp;quot;, I must be out of my freaking mind!). And integration with
&lt;strong&gt;&lt;a href="http://research.microsoft.com/en-us/collaboration/tools/trident.aspx"&gt;Microsoft's Project Trident&lt;/a&gt;&lt;/strong&gt; collaborative scientific research platform seems like a
&lt;em&gt;no-brainer&lt;/em&gt;. But there are also many other interesting possibilities. &lt;strong&gt;
Stay tuned!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE: This software is a central feature in a much larger development picture that is partially laid out in the
&lt;a href="http://branecloud.codeplex.com/wikipage?title=Vision&amp;version=8"&gt;Vision&lt;/a&gt; statement. Additional information will be made available in the
&lt;a href="http://branecloud.codeplex.com/documentation"&gt;Documentation&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;BTW: BraneCloud&lt;/strong&gt; is linked to a registered domain (net|com) for future things like
&lt;strong&gt;name/schema&lt;/strong&gt; resolution in the &lt;strong&gt;cloud&lt;/strong&gt;. So the only thing I ask if you want to derive your own fork from this one is that you
&lt;strong&gt;please use a different root namespace&lt;/strong&gt; to avoid collisions. Other that that, you are free to do with this what you will, so long as it abides by the stated licensing terms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ECJ License (AFL 3.0)&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;BraneCloud.Evolution.EC (Apache 2.0)&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;(Sean informs me that he may eventually be switching to the Apache license when he gets around to it.)&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Thu, 24 May 2012 18:55:41 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120524065541P</guid></item><item><title>Updated Wiki: Home</title><link>http://branecloud.codeplex.com/wikipage?version=89</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Project Description&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Industrial-Strength Evolutionary Computation for .NET 4.0&lt;/h3&gt;
&lt;h5&gt;This is an independent port of &lt;strong&gt;&lt;a href="http://www.cs.gmu.edu/~eclab/projects/ecj/"&gt;Sean Luke's venerable ECJ project (GMU EC Lab) Version 20&lt;/a&gt;&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;&lt;br&gt;
&lt;strong&gt;NOTE: This conversion to C# cannot and will not in any way be supported by Sean or any other member of his team at GMU. Please do not even ask! It is incredible that software of this caliber is made available in open-source form, and that is more than
 enough support! &lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
It is hard to imagine how many hours Sean and his team have put into this over the course of
&lt;strong&gt;13 years&lt;/strong&gt;. But suffice it to say: &lt;br&gt;
&lt;strong&gt;ECJ is an 800 lb Gorilla in the realm of Evolutionary Computation and Stochastic Optimization&lt;/strong&gt;.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;MILD WARNING: ECJ&lt;/strong&gt; is used for some very serious business (and this C# version has, or will shortly have, all of the same capabilities).
&lt;em&gt;But you don't need to get scared off by that&lt;/em&gt;. A comprehensive collection of samples is provided with
&lt;strong&gt;ECJ&lt;/strong&gt;, and the documentation that you can browse on &lt;strong&gt;Sean's&lt;/strong&gt; site covers all of the basics and well beyond. I highly recommend that newbies work with
&lt;strong&gt;ECJ&lt;/strong&gt; in &lt;strong&gt;JAVA&lt;/strong&gt; before you decide if this converted fork makes sense for you. The need for tight native .NET platform integration is potentially uncalled for, and you must ask yourself,
&lt;strong&gt;&amp;quot;Do I really Need This?&amp;quot;. Chances are, you don't.&lt;/strong&gt; But I personally really
&lt;em&gt;DO&lt;/em&gt; need this, and I&amp;rsquo;m happy to spare others with similar requirements all of the heavy lifting required to get it this far.
&lt;em&gt;Trust me, it is a DAUNTING challenge to preserve delicate algorithms when there are so many moving parts.&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
I have made all of the samples bundled in the original Java version equally accessible to those of you who need orientation in C#. Each sample is set up as a bare-bones console app that you can &amp;quot;fiddle&amp;quot; with to your heart's content. But also, and this is something
 that is &lt;em&gt;NOT&lt;/em&gt; provided in the original software, there are &lt;strong&gt;&lt;span style="color:#ff0000"&gt;over 500 unit tests&lt;/span&gt;&lt;/strong&gt; that I wrote during the conversion process. This turns out to be quite a useful side-effect of going through the whole
 torturous exercise in the first place! These tests, although perhaps still a little incoherent in places (because they focus on specific conversion issues), make it even easier to dig deep without stumbling around in total bewilderment (well, you may still
 stumble around, but they do provide a bit of a handrail to lean on when you start feeling sick to your stomach). \'-)
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Side Note: &lt;em&gt;There are likely to wind up being several &lt;span style="color:#ff0000"&gt;
thousands of tests&lt;/span&gt; associated with this software. I only covered what was causing difficulty during the conversion process, and that is but a small fraction of the full coverage this software deserves. (&amp;quot;sheesh&amp;quot;, as Sean is wont to say, I must be freaking
 crazy!)&lt;/em&gt;&lt;/strong&gt; &lt;br&gt;
&lt;br&gt;
If you are not familiar with the purpose of this software, you can purchase Sean's excellent book entitled
&lt;strong&gt;&lt;a href="http://www.lulu.com/product/paperback/essentials-of-metaheuristics/15028803"&gt;The Essentials of Metaheuristics&lt;/a&gt;&lt;/strong&gt; (or download the electronic version for free). You can also find numerous articles and academic papers on the website
 listed above, covering a variety of related topics. If you plan on doing really serious work in this field, you might also consider starting out with the early works of
&lt;strong&gt;&lt;a href="http://www.genetic-programming.com/johnkoza.html"&gt;John Koza (Genetic Programming I, II, et al)&lt;/a&gt;&lt;/strong&gt; and then move on through the ever-expanding body of research that grew from there. Or if you
&lt;em&gt;really&lt;/em&gt; get serious about this stuff, you will probably want to start all the way back with
&lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/John_Henry_Holland"&gt;John Holland&lt;/a&gt;&lt;/strong&gt;, who as many of you may already know, is generally considered the &amp;quot;father&amp;quot; of research into the field of
&lt;strong&gt;Genetic Algorithms&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
&lt;strong&gt;ECJ&lt;/strong&gt; targets &lt;strong&gt;Java&lt;/strong&gt;, because large scale evolutionary processes often need to interoperate seamlessly between workstations, which may or may not be hosting Windows, and back-end &amp;quot;heavy metal&amp;quot; hosting one of the
&lt;strong&gt;UNIX/LINUX&lt;/strong&gt; variants. Such environments are typical in many large enterprise and academic research settings, as you all well know (or know all too well!). If that kind of heterogeneous environment describes where
&lt;em&gt;YOU&lt;/em&gt; develop complex systems to solve difficult problems, then you will definitely want to trot on over to Sean's lab and familiarize yourself with the
&lt;strong&gt;Java&lt;/strong&gt; &amp;quot;source&amp;quot; code. &lt;br&gt;
&lt;br&gt;
On the other hand..., if you develop your software for homogenous environments with
&lt;strong&gt;Windows7 and Server 2003/2008/2008R2&lt;/strong&gt;, then you may want to consider downloading the converted
&lt;strong&gt;Open Source&lt;/strong&gt; &lt;strong&gt;C#&lt;/strong&gt; code hosted here to take full advantage of tight integration with the latest features provided by
&lt;strong&gt;.NET 4.0&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
Obviously I won't be able to deliver anywhere near the same level of support that a dedicated team can provide (almost none at all in fact). But if you are willing to work hard at it, or if you just want to experiment with the basics, everything you need to
 go the full distance is (or will shortly be) available in the download. I didn't leave anything out. But I should repeat the warning given above: some things have
&lt;em&gt;NOT YET&lt;/em&gt; been covered in the unit tests. I haven't had the time, for example, to test whether the Master / Slave communications are working (it uses simple sockets, so I'm not too worried about that, because I'll be migrating it to WCF4). Same goes
 for Island Exchange for speciation, coevolution, and maybe another thing or two. The
&lt;strong&gt;ECJ&lt;/strong&gt; team was actively revamping some of the code for a robotics exercise while I was still in the middle of the conversion. Those gaps in coverage will be closed in due course.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;I'll also revisit the ECJ SVN repository in coming weeks to pick up any new bits that show up and integrate any bug fixes and significant changes.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
The goal for this project is to try and deliver a conversion of the latest bits as they accrue in
&lt;strong&gt;ECJ&lt;/strong&gt;, while maintaining a robust and flexible platform on which to develop in
&lt;strong&gt;C#, F#, IronPython, IronRuby, VB.NET&lt;/strong&gt; and so on. I will also be keeping my eye out for other juicy plums that will integrate nicely with this software. In fact,
&lt;strong&gt;ECJ&lt;/strong&gt; has a sibling project for &lt;strong&gt;&amp;quot;Multi-Agent Simulation of Neighborhoods, or Networks (or something)&amp;quot; (aka MASON)&lt;/strong&gt; that fits the bill perfectly&amp;nbsp;(&amp;quot;sheesh&amp;quot;, I must be out of my freaking mind!). And integration with
&lt;strong&gt;&lt;a href="http://research.microsoft.com/en-us/collaboration/tools/trident.aspx"&gt;Microsoft's Project Trident&lt;/a&gt;&lt;/strong&gt; collaborative scientific research platform seems like a
&lt;em&gt;no-brainer&lt;/em&gt;. But there are also many other interesting possibilities. &lt;strong&gt;
Stay tuned!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE: This software is a central feature in a much larger development picture that is partially laid out in the
&lt;a href="http://branecloud.codeplex.com/wikipage?title=Vision&amp;version=8"&gt;Vision&lt;/a&gt; statement. Additional information will be made available in the
&lt;a href="http://branecloud.codeplex.com/documentation"&gt;Documentation&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;BTW: BraneCloud&lt;/strong&gt; is linked to a registered domain (net|com) for future things like
&lt;strong&gt;name/schema&lt;/strong&gt; resolution in the &lt;strong&gt;cloud&lt;/strong&gt;. So the only thing I ask if you want to derive your own fork from this one is that you
&lt;strong&gt;please use a different root namespace&lt;/strong&gt; to avoid collisions. Other that that, you are free to do with this what you will, so long as it abides by the stated licensing terms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ECJ License (AFL 3.0)&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;BraneCloud.Evolution.EC (Apache 2.0)&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;(Sean informs me that he may eventually be switching to the Apache license when he gets around to it.)&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Wed, 29 Jun 2011 17:38:01 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110629053801P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://branecloud.codeplex.com/documentation?version=17</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;There are definitely some things you are going to need to know about before you will understand all of what needed to be done for the conversion to C#/.NET4.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
I'll add some real help to describe the ways that this version differs from what you can read about in the&lt;a href="http://cs.gmu.edu/~eclab/projects/ecj/"&gt;
&lt;strong&gt;Java original&lt;/strong&gt;, on the &lt;strong&gt;ECJ&lt;/strong&gt; site at &lt;strong&gt;GMU&lt;/strong&gt;&lt;/a&gt;. But for now, a few notes will have to do&amp;hellip;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;FUNCTIONAL EQUIVALENCE&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Almost everything in this software is configurable, making if extremely flexible. The way that
&lt;strong&gt;BraneCloud&lt;/strong&gt; achieves equivalent configuration behavior is interesting:
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;&lt;span style="color:#000080"&gt;ECJ&lt;/span&gt;&lt;/strong&gt; the &amp;ldquo;&lt;strong&gt;*.param&lt;/strong&gt;&amp;rdquo; files contain simple type assignments by namespace such as &amp;quot;&lt;strong&gt;ec.Population&lt;/strong&gt;&amp;quot;. At runtime the code directly instantiates a
&lt;strong&gt;Population&lt;/strong&gt; because that type name in the assignment corresponds directly to a type that is locatable (without any need for aliasing).&lt;/p&gt;
&lt;p&gt;But in .NET, we need to map those &amp;quot;&lt;em&gt;&lt;strong&gt;canonical names&lt;/strong&gt;&lt;/em&gt;&amp;quot; (as they exist in ECJ) to real (.NET) type names before we can search for, and instantiate,&amp;nbsp;each type. Oddly enough, the solution to this issue creates added flexibility.&lt;/p&gt;
&lt;p&gt;As follows ...&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
An attribute, &lt;strong&gt;ECConfiguration&lt;/strong&gt;, is attached to all types that might need to be specified in the configuration files (it does no harm, of course, to alias ANY type). A static class called
&lt;strong&gt;ECActivator&lt;/strong&gt; maps a canonical name, specified in the attribute, to a .NET type found in assemblies which are added at runtime.&lt;/p&gt;
&lt;p&gt;For Example:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; namespace MyNamespace &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ECConfiguration(&amp;quot;ec.MyType&amp;quot;)] &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class MyClass {} &lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Now in the bootstrapping we need to add whatever assembly contains &amp;quot;MyClass&amp;quot; to the activator:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; public static Main(...) &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly ecAssembly);
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly myAssembly);&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah
&lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You will note that I'm adding the main assembly, &lt;strong&gt;BraneCloud.Evolution.EC
&lt;/strong&gt;(passed in as &amp;quot;ecAssembly&amp;quot; in this case). This is&amp;nbsp;where most of the important core model types live. And then I'm adding
&lt;strong&gt;myAssembly &lt;/strong&gt;where our custom &amp;quot;auxilliary&amp;quot; type is defined. The&amp;nbsp;first step, adding the main&lt;strong&gt;&amp;nbsp;EC&lt;/strong&gt; assembly,&amp;nbsp;could be easily avoided. But it is actually&amp;nbsp;&amp;quot;intentional&amp;quot;, because it removes any dependency from the
&lt;strong&gt;BraneCloud.Evolution.EC.Configuration&lt;/strong&gt; assembly where the activator is defined. I'm a big believer in Separation of Concerns, and there is absolutely no reason that
&lt;strong&gt;ECActivator&lt;/strong&gt; needs to know the identity of&amp;nbsp;ANY assembly ahead of time. You will ALSO note that I'm mapping the &amp;quot;&lt;strong&gt;&lt;span style="color:#ff0000"&gt;MyClass&lt;/span&gt;&lt;/strong&gt;&amp;quot; type to a canonical name of &amp;quot;&lt;span style="color:#ff0000"&gt;&lt;strong&gt;MyType&lt;/strong&gt;&lt;/span&gt;&amp;quot;.
 In like manner, we could change the entire canonical path to whatever we want, although one must wonder: for what reason? ;-)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;NOTES: &amp;quot;ARCHETYPES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I'm really not sure why it is not&amp;nbsp;a universal&amp;nbsp;practice, but I usually create a separate assembly called &amp;quot;Archetype&amp;quot; for any non-trivial project (the suitability of the name seems remarkably obvious to me). In it go any types that have no outside
 dependencies aside from the standard &amp;quot;platform&amp;quot; provisions. This allows us to avoid many annoying&amp;nbsp;circular reference&amp;nbsp;problems that ultimately&amp;nbsp;result in&amp;nbsp;bad design as projects grow increasingly complex (when they begin to require more sophisticated
 factoring). The assembly should remain extremely lightweight no matter how large the project grows (because it is meant to hold mainly interfaces, enumerations, constants, and perhaps a few simple abstract base classes. I'm making note of this here, so that&amp;nbsp;no
 one gets the wrong idea about what purpose this assembly is meant to serve. There's nothing mystical about it. It's purpose is as simple as&amp;nbsp;simple gets!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(To be fair, one often sees this kind of assembly popping up in a myriad of guises - usually named somthing like &amp;quot;contracts&amp;quot;, which has slightly more speicalized implications. I am only surprised that Martin Fowler, or someone,&amp;nbsp;hasn't had more to
 say about it, and I'm surprised that computer science programs haven't been able to&amp;nbsp;compel &amp;quot;better practice&amp;quot; in this area. A lot of &amp;quot;spaghetti&amp;quot; dependency problems can be avoided in this way, and it seems like a standardized name for it would avoid much
 confusion.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;NAMESPACES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While the algorithms and apparti provided by &lt;strong&gt;ECJ &lt;/strong&gt;are central to the evolutionary optimization&amp;nbsp;strategy in
&lt;strong&gt;BraneCloud, &lt;/strong&gt;there are additional namespaces currently taking shape in my private development branch. It would have been nice to tag this conversion with a simple name like
&lt;strong&gt;ECCSharp&lt;/strong&gt;, or something. But that would have created a disconnect from some of the extensions, integrations,&amp;nbsp;and specializations that&amp;nbsp;are planned. If, or when, I release some of these other things, it will become more obvious why added
 differentiation was required. For example, there are already other conversions in progress and original code existing&amp;nbsp;under the following namespaces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BraneCloud.Deduction &lt;/li&gt;&lt;li&gt;BraneCloud.Induction &lt;/li&gt;&lt;li&gt;BraneCloud.Presentation &lt;/li&gt;&lt;li&gt;BraneCloud.Representation &lt;/li&gt;&lt;li&gt;BraneCloud.Simulation &lt;/li&gt;&lt;li&gt;BraneCloud.Workflow &lt;/li&gt;&lt;li&gt;Etc. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;A significant number of additional namespaces will be added in the future. Things would quickly devolve into mayhem if I tried to use an &amp;quot;alphabet soup&amp;quot; approach.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(MORE NOTES LATER&amp;hellip;)&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Thu, 26 May 2011 22:57:21 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20110526105721P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://branecloud.codeplex.com/documentation?version=16</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;There are definitely some things you are going to need to know about before you will understand all of what needed to be done for the conversion to C#/.NET4.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
I'll add some real help to describe the ways that this version differs from what you can read about in the&lt;a href="http://cs.gmu.edu/~eclab/projects/ecj/"&gt;
&lt;strong&gt;Java original&lt;/strong&gt;, on the &lt;strong&gt;ECJ&lt;/strong&gt; site at &lt;strong&gt;GMU&lt;/strong&gt;&lt;/a&gt;. But for now, a few notes will have to do&amp;hellip;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;FUNCTIONAL EQUIVALENCE&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Almost everything in this software is configurable, making if extremely flexible. The way that
&lt;strong&gt;BraneCloud&lt;/strong&gt; achieves equivalent configuration behavior is interesting:
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;&lt;span style="color:#000080"&gt;ECJ&lt;/span&gt;&lt;/strong&gt; the &amp;ldquo;&lt;strong&gt;*.param&lt;/strong&gt;&amp;rdquo; files contain simple type assignments by namespace such as &amp;quot;&lt;strong&gt;ec.Population&lt;/strong&gt;&amp;quot;. At runtime the code directly instantiates a
&lt;strong&gt;Population&lt;/strong&gt; because that type name in the assignment corresponds directly to a type that is locatable (without any need for aliasing).&lt;/p&gt;
&lt;p&gt;But in .NET, we need to map those &amp;quot;&lt;em&gt;&lt;strong&gt;canonical names&lt;/strong&gt;&lt;/em&gt;&amp;quot; (as they exist in ECJ) to real (.NET) type names before we can search for, and instantiate,&amp;nbsp;each type. Oddly enough, the solution to this issue creates added flexibility.&lt;/p&gt;
&lt;p&gt;As follows ...&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
An attribute, &lt;strong&gt;ECConfiguration&lt;/strong&gt;, is attached to all types that might need to be specified in the configuration files (it does no harm, of course, to alias ANY type). A static class called
&lt;strong&gt;ECActivator&lt;/strong&gt; maps a canonical name, specified in the attribute, to a .NET type found in assemblies which are added at runtime.&lt;/p&gt;
&lt;p&gt;For Example:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; namespace MyNamespace &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ECConfiguration(&amp;quot;ec.MyType&amp;quot;)] &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class MyClass {} &lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Now in the bootstrapping we need to add whatever assembly contains &amp;quot;MyClass&amp;quot; to the activator:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; public static Main(...) &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly ecAssembly);
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly myAssembly);&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah
&lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You will note that I'm adding the main assembly, &lt;strong&gt;BraneCloud.Evolution.EC
&lt;/strong&gt;(passed in as &amp;quot;ecAssembly&amp;quot; in this case). This is&amp;nbsp;where most of the important core model types live. And then I'm adding
&lt;strong&gt;myAssembly &lt;/strong&gt;where our custom &amp;quot;auxilliary&amp;quot; type is defined. The&amp;nbsp;first step, adding the main&lt;strong&gt;&amp;nbsp;EC&lt;/strong&gt; assembly,&amp;nbsp;could be easily avoided. But it is actually&amp;nbsp;&amp;quot;intentional&amp;quot;, because it removes any dependency from the
&lt;strong&gt;BraneCloud.Evolution.EC.Configuration&lt;/strong&gt; assembly where the activator is defined. I'm a big believer in Separation of Concerns, and there is absolutely no reason that
&lt;strong&gt;ECActivator&lt;/strong&gt; needs to know the identity of&amp;nbsp;ANY assembly ahead of time. You will ALSO note that I'm mapping the &amp;quot;&lt;strong&gt;&lt;span style="color:#ff0000"&gt;MyClass&lt;/span&gt;&lt;/strong&gt;&amp;quot; type to a canonical name of &amp;quot;&lt;span style="color:#ff0000"&gt;&lt;strong&gt;MyType&lt;/strong&gt;&lt;/span&gt;&amp;quot;.
 In like manner, we could change the entire canonical path to whatever we want, although one must wonder: for what reason? ;-)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;NOTES: &amp;quot;ARCHETYPES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I'm really not sure why it is not&amp;nbsp;a universal&amp;nbsp;practice, but I usually create a separate assembly called &amp;quot;Archetype&amp;quot; for any non-trivial project (the suitability of the name seems remarkably obvious to me). In it go any types that have no outside
 dependencies aside from the standard &amp;quot;platform&amp;quot; provisions. This allows us to avoid many annoying&amp;nbsp;circular reference&amp;nbsp;problems that ultimately&amp;nbsp;result in&amp;nbsp;bad design as projects grow increasingly complex (when they begin to require more sophisticated
 factoring). The assembly should remain extremely lightweight no matter how large the project grows (because it is meant to hold mainly interfaces, enumerations, constants, and perhaps a few simple abstract base classes. I'm making note of this here, so that&amp;nbsp;no
 one gets the wrong idea about what purpose this assembly is meant to serve. There's nothing mystical about it. It's purpose is as simple as&amp;nbsp;simple gets!
&lt;em&gt;(To be fair, one often sees this kind of assembly popping up in a myriad of guises - usually named somthing like &amp;quot;contracts&amp;quot;, which has slightly more speicalized implications. I am only surprised that Martin Fowler, or someone,&amp;nbsp;hasn't had more to say
 about it, and I'm surprised that computer science programs haven't been able to&amp;nbsp;compel &amp;quot;better practice&amp;quot; in this area. A lot of &amp;quot;spaghetti&amp;quot; dependency problems can be avoided in this way, and it seems like a standardized name for it would avoid much confusion.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;NAMESPACES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While the algorithms and apparti provided by &lt;strong&gt;ECJ &lt;/strong&gt;are central to the evolutionary optimization&amp;nbsp;strategy in
&lt;strong&gt;BraneCloud, &lt;/strong&gt;there are additional namespaces currently taking shape in my private development branch. It would have been nice to tag this conversion with a simple name like
&lt;strong&gt;ECCSharp&lt;/strong&gt;, or something. But that would have created a disconnect from some of the extensions, integrations,&amp;nbsp;and specializations that&amp;nbsp;are planned. If, or when, I release some of these other things, it will become more obvious why added
 differentiation was required. For example, there are already other conversions in progress and original code existing&amp;nbsp;under the following namespaces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BraneCloud.Deduction &lt;/li&gt;&lt;li&gt;BraneCloud.Induction &lt;/li&gt;&lt;li&gt;BraneCloud.Presentation &lt;/li&gt;&lt;li&gt;BraneCloud.Representation &lt;/li&gt;&lt;li&gt;BraneCloud.Simulation &lt;/li&gt;&lt;li&gt;BraneCloud.Workflow &lt;/li&gt;&lt;li&gt;Etc. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;A significant number of additional namespaces will be added in the future. Things would quickly devolve into mayhem if I tried to use an &amp;quot;alphabet soup&amp;quot; approach.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(MORE NOTES LATER&amp;hellip;)&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Thu, 26 May 2011 22:55:08 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20110526105508P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://branecloud.codeplex.com/documentation?version=15</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;There are definitely some things you are going to need to know about before you will understand all of what needed to be done for the conversion to C#/.NET4.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
I'll add some real help to describe the ways that this version differs from what you can read about in the&lt;a href="http://cs.gmu.edu/~eclab/projects/ecj/"&gt;
&lt;strong&gt;Java original&lt;/strong&gt;, on the &lt;strong&gt;ECJ&lt;/strong&gt; site at &lt;strong&gt;GMU&lt;/strong&gt;&lt;/a&gt;. But for now, a few notes will have to do&amp;hellip;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;FUNCTIONAL EQUIVALENCE&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Almost everything in this software is configurable, making if extremely flexible. The way that
&lt;strong&gt;BraneCloud&lt;/strong&gt; achieves equivalent configuration behavior is interesting:
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;&lt;span style="color:#000080"&gt;ECJ&lt;/span&gt;&lt;/strong&gt; the &amp;ldquo;&lt;strong&gt;*.param&lt;/strong&gt;&amp;rdquo; files contain simple type assignments by namespace such as &amp;quot;&lt;strong&gt;ec.Population&lt;/strong&gt;&amp;quot;. At runtime the code directly instantiates a
&lt;strong&gt;Population&lt;/strong&gt; because that type name in the assignment corresponds directly to a type that is locatable (without any need for aliasing).&lt;/p&gt;
&lt;p&gt;But in .NET, we need to map those &amp;quot;&lt;em&gt;&lt;strong&gt;canonical names&lt;/strong&gt;&lt;/em&gt;&amp;quot; (as they exist in ECJ) to real (.NET) type names before we can search for, and instantiate,&amp;nbsp;each type. Oddly enough, the solution to this issue creates added flexibility.&lt;/p&gt;
&lt;p&gt;As follows ...&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
An attribute, &lt;strong&gt;ECConfiguration&lt;/strong&gt;, is attached to all types that might need to be specified in the configuration files (it does no harm, of course, to alias ANY type). A static class called
&lt;strong&gt;ECActivator&lt;/strong&gt; maps a canonical name, specified in the attribute, to a .NET type found in assemblies which are added at runtime.&lt;/p&gt;
&lt;p&gt;For Example:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; namespace MyNamespace &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ECConfiguration(&amp;quot;ec.MyType&amp;quot;)] &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class MyClass {} &lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Now in the bootstrapping we need to add whatever assembly contains &amp;quot;MyClass&amp;quot; to the activator:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; public static Main(...) &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly ecAssembly);
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly myAssembly);&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah
&lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You will note that I'm adding the main assembly, &lt;strong&gt;BraneCloud.Evolution.EC
&lt;/strong&gt;(passed in as &amp;quot;ecAssembly&amp;quot; in this case). This is&amp;nbsp;where most of the important core model types live. And the n I'm adding
&lt;strong&gt;myAssembly &lt;/strong&gt;where our custom &amp;quot;auxilliary&amp;quot; type is defined. The&amp;nbsp;first step, adding the main&lt;strong&gt;&amp;nbsp;EC&lt;/strong&gt; assembly,&amp;nbsp;could be easily avoided. But it is actually&amp;nbsp;&amp;quot;intentional&amp;quot;, because it removes any dependency from the
&lt;strong&gt;BraneCloud.Evolution.EC.Configuration&lt;/strong&gt; assembly where the activator is defined. I'm a big believer in Separation of Concerns, and there is absolutely no reason that
&lt;strong&gt;ECActivator&lt;/strong&gt; needs to know the identity of&amp;nbsp;ANY assembly ahead of time. You will ALSO note that I'm mapping the &amp;quot;&lt;strong&gt;&lt;span style="color:#ff0000"&gt;MyClass&lt;/span&gt;&lt;/strong&gt;&amp;quot; type to a canonical name of &amp;quot;&lt;span style="color:#ff0000"&gt;&lt;strong&gt;MyType&lt;/strong&gt;&lt;/span&gt;&amp;quot;.
 In like manner, we could change the entire canonical path to whatever we want, although one must wonder: for what reason? ;-)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;NOTES: &amp;quot;ARCHETYPES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I'm really not sure why it is not&amp;nbsp;a universal&amp;nbsp;practice, but I usually create a separate assembly called &amp;quot;Archetype&amp;quot; for any non-trivial project (the suitability of the name seems remarkably obvious to me). In it go any types that have no outside
 dependencies aside from the standard &amp;quot;platform&amp;quot; provisions. This allows us to avoid many annoying&amp;nbsp;circular reference&amp;nbsp;problems that ultimately&amp;nbsp;result in&amp;nbsp;bad design as projects grow increasingly complex (when they begin to require more sophisticated
 factoring). The assembly should remain extremely lightweight no matter how large the project grows (because it is meant to hold mainly interfaces, enumerations, constants, and perhaps a few simple abstract base classes. I'm making note of this here, so that&amp;nbsp;no
 one gets the wrong idea about what purpose this assembly is meant to serve. There's nothing mystical about it. It's purpose is as simple as&amp;nbsp;simple gets!
&lt;em&gt;(To be fair, one often sees this kind of assembly popping up in a myriad of guises - usually named somthing like &amp;quot;contracts&amp;quot;, which has slightly more speicalized implications. I am only surprised that Martin Fowler, or someone,&amp;nbsp;hasn't had more to say
 about it, and I'm surprised that computer science programs haven't been able to&amp;nbsp;compel &amp;quot;better practice&amp;quot; in this area. A lot of &amp;quot;spaghetti&amp;quot; dependency problems can be avoided in this way, and it seems like a standardized name for it would avoid much confusion.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;NAMESPACES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While the algorithms and apparti provided by &lt;strong&gt;ECJ &lt;/strong&gt;are central to the evolutionary optimization&amp;nbsp;strategy in
&lt;strong&gt;BraneCloud, &lt;/strong&gt;there are additional namespaces currently taking shape in my private development branch. It would have been nice to tag this conversion with a simple name like
&lt;strong&gt;ECCSharp&lt;/strong&gt;, or something. But that would have created a disconnect from some of the extensions, integrations,&amp;nbsp;and specializations that&amp;nbsp;are planned. If, or when, I release some of these other things, it will become more obvious why added
 differentiation was required. For example, there are already other conversions in progress and original code existing&amp;nbsp;under the following namespaces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BraneCloud.Deduction &lt;/li&gt;&lt;li&gt;BraneCloud.Induction &lt;/li&gt;&lt;li&gt;BraneCloud.Presentation &lt;/li&gt;&lt;li&gt;BraneCloud.Representation &lt;/li&gt;&lt;li&gt;BraneCloud.Simulation &lt;/li&gt;&lt;li&gt;BraneCloud.Workflow &lt;/li&gt;&lt;li&gt;Etc. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;A significant number of additional namespaces will be added in the future. Things would quickly devolve into mayhem if I tried to use an &amp;quot;alphabet soup&amp;quot; approach.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(MORE NOTES LATER&amp;hellip;)&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Thu, 26 May 2011 22:53:05 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20110526105305P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://branecloud.codeplex.com/documentation?version=14</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;There are definitely some things you are going to need to know about before you will understand all of what needed to be done for the conversion to C#/.NET4.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
I'll add some real help to describe the ways that this version differs from what you can read about in the&lt;a href="http://cs.gmu.edu/~eclab/projects/ecj/"&gt;
&lt;strong&gt;Java original&lt;/strong&gt;, on the &lt;strong&gt;ECJ&lt;/strong&gt; site at &lt;strong&gt;GMU&lt;/strong&gt;&lt;/a&gt;. But for now, a few notes will have to do&amp;hellip;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;FUNCTIONAL EQUIVALENCE&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Almost everything in this software is configurable, making if extremely flexible. The way that
&lt;strong&gt;BraneCloud&lt;/strong&gt; achieves equivalent configuration behavior is interesting:
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;&lt;span style="color:#000080"&gt;ECJ&lt;/span&gt;&lt;/strong&gt; the &amp;ldquo;&lt;strong&gt;*.param&lt;/strong&gt;&amp;rdquo; files contain simple type assignments by namespace such as &amp;quot;&lt;strong&gt;ec.Population&lt;/strong&gt;&amp;quot;. At runtime the code directly instantiates a
&lt;strong&gt;Population&lt;/strong&gt; because that type name in the assignment corresponds directly to a type that is locatable (without any need for aliasing).&lt;/p&gt;
&lt;p&gt;But in .NET, we need to map those &amp;quot;&lt;em&gt;&lt;strong&gt;canonical names&lt;/strong&gt;&lt;/em&gt;&amp;quot; (as they exist in ECJ) to real type names before we can search for, and instantiate,&amp;nbsp;each type. Oddly enough, the solution to this issue creates added flexibility.&lt;/p&gt;
&lt;p&gt;As follows ...&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
An attribute, &lt;strong&gt;ECConfiguration&lt;/strong&gt;, is attached to all types that might need to be specified in the configuration files (it does no harm, of course, to alias ANY type). A static class called
&lt;strong&gt;ECActivator&lt;/strong&gt; maps a canonical name, specified in the attribute, to a .NET type found in assemblies which are added at runtime.&lt;/p&gt;
&lt;p&gt;For Example:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; namespace MyNamespace &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ECConfiguration(&amp;quot;ec.MyType&amp;quot;)] &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class MyClass {} &lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Now in the bootstrapping we need to add whatever assembly contains &amp;quot;MyClass&amp;quot; to the activator:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; public static Main(...) &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly ecAssembly);
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly myAssembly);&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah
&lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You will note that I'm adding the main assembly, &lt;strong&gt;BraneCloud.Evolution.EC
&lt;/strong&gt;(passed in as &amp;quot;ecAssembly&amp;quot; in this case). This is&amp;nbsp;where most of the important core model types live. And the n I'm adding
&lt;strong&gt;myAssembly &lt;/strong&gt;where our custom &amp;quot;auxilliary&amp;quot; type is defined. The&amp;nbsp;first step, adding the main&lt;strong&gt;&amp;nbsp;EC&lt;/strong&gt; assembly,&amp;nbsp;could be easily avoided. But it is actually&amp;nbsp;&amp;quot;intentional&amp;quot;, because it removes any dependency from the
&lt;strong&gt;BraneCloud.Evolution.EC.Configuration&lt;/strong&gt; assembly where the activator is defined. I'm a big believer in Separation of Concerns, and there is absolutely no reason that
&lt;strong&gt;ECActivator&lt;/strong&gt; needs to know the identity of&amp;nbsp;ANY assembly ahead of time. You will ALSO note that I'm mapping the &amp;quot;&lt;strong&gt;&lt;span style="color:#ff0000"&gt;MyClass&lt;/span&gt;&lt;/strong&gt;&amp;quot; type to a canonical name of &amp;quot;&lt;span style="color:#ff0000"&gt;&lt;strong&gt;MyType&lt;/strong&gt;&lt;/span&gt;&amp;quot;.
 In like manner, we could change the entire canonical path to whatever we want, although one must wonder: for what reason? ;-)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;NOTES: &amp;quot;ARCHETYPES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I'm really not sure why it is not&amp;nbsp;a universal&amp;nbsp;practice, but I usually create a separate assembly called &amp;quot;Archetype&amp;quot; for any non-trivial project (the suitability of the name seems remarkably obvious to me). In it go any types that have no outside
 dependencies aside from the standard &amp;quot;platform&amp;quot; provisions. This allows us to avoid many annoying&amp;nbsp;circular reference&amp;nbsp;problems that ultimately&amp;nbsp;result in&amp;nbsp;bad design as projects grow increasingly complex (when they begin to require more sophisticated
 factoring). The assembly should remain extremely lightweight no matter how large the project grows (because it is meant to hold mainly interfaces, enumerations, constants, and perhaps a few simple abstract base classes. I'm making note of this here, so that&amp;nbsp;no
 one gets the wrong idea about what purpose this assembly is meant to serve. There's nothing mystical about it. It's purpose is as simple as&amp;nbsp;simple gets!
&lt;em&gt;(To be fair, one often sees this kind of assembly popping up in a myriad of guises - usually named somthing like &amp;quot;contracts&amp;quot;, which has slightly more speicalized implications. I am only surprised that Martin Fowler, or someone,&amp;nbsp;hasn't had more to say
 about it, and I'm surprised that computer science programs haven't been able to&amp;nbsp;compel &amp;quot;better practice&amp;quot; in this area. A lot of &amp;quot;spaghetti&amp;quot; dependency problems can be avoided in this way, and it seems like a standardized name for it would avoid much confusion.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;NAMESPACES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While the algorithms and apparti provided by &lt;strong&gt;ECJ &lt;/strong&gt;are central to the evolutionary optimization&amp;nbsp;strategy in
&lt;strong&gt;BraneCloud, &lt;/strong&gt;there are additional namespaces currently taking shape in my private development branch. It would have been nice to tag this conversion with a simple name like
&lt;strong&gt;ECCSharp&lt;/strong&gt;, or something. But that would have created a disconnect from some of the extensions, integrations,&amp;nbsp;and specializations that&amp;nbsp;are planned. If, or when, I release some of these other things, it will become more obvious why added
 differentiation was required. For example, there are already other conversions in progress and original code existing&amp;nbsp;under the following namespaces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BraneCloud.Deduction &lt;/li&gt;&lt;li&gt;BraneCloud.Induction &lt;/li&gt;&lt;li&gt;BraneCloud.Presentation &lt;/li&gt;&lt;li&gt;BraneCloud.Representation &lt;/li&gt;&lt;li&gt;BraneCloud.Simulation &lt;/li&gt;&lt;li&gt;BraneCloud.Workflow &lt;/li&gt;&lt;li&gt;Etc. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;A significant number of additional namespaces will be added in the future. Things would quickly devolve into mayhem if I tried to use an &amp;quot;alphabet soup&amp;quot; approach.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(MORE NOTES LATER&amp;hellip;)&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Thu, 26 May 2011 22:51:33 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20110526105133P</guid></item><item><title>Updated Wiki: Home</title><link>http://branecloud.codeplex.com/wikipage?version=88</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Project Description&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Industrial-Strength Evolutionary Computation for .NET 4.0&lt;/h3&gt;
&lt;h5&gt;This is an independent port of &lt;strong&gt;&lt;a href="http://www.cs.gmu.edu/~eclab/projects/ecj/"&gt;Sean Luke's venerable ECJ project (GMU EC Lab) Version 20&lt;/a&gt;&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;&lt;br&gt;
&lt;strong&gt;NOTE: This conversion to C# cannot and will not in any way be supported by Sean or any other member of his team at GMU. Please do not even ask! It is incredible that software of this caliber is made available in open-source form, and that is more than
 enough support! &lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
It is hard to imagine how many hours Sean and his team have put into this over the course of
&lt;strong&gt;13 years&lt;/strong&gt;. But suffice it to say: &lt;br&gt;
&lt;strong&gt;ECJ is an 800 lb Gorilla in the realm of Evolutionary Computation and Stochastic Optimization&lt;/strong&gt;.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;MILD WARNING: ECJ&lt;/strong&gt; is used for some very serious business (and this C# version has, or will shortly have, all of the same capabilities).
&lt;em&gt;But you don't need to get scared off by that&lt;/em&gt;. A comprehensive collection of samples is provided with
&lt;strong&gt;ECJ&lt;/strong&gt;, and the documentation that you can browse on &lt;strong&gt;Sean's&lt;/strong&gt; site covers all of the basics and well beyond. I highly recommend that newbies work with
&lt;strong&gt;ECJ&lt;/strong&gt; in &lt;strong&gt;JAVA&lt;/strong&gt; before you decide if this converted fork makes sense for you. The need for tight native .NET platform integration is potentially uncalled for, and you must ask yourself,
&lt;strong&gt;&amp;quot;Do I really Need This?&amp;quot;. Chances are, you don't.&lt;/strong&gt; But I personally really
&lt;em&gt;DO&lt;/em&gt; need this, and I&amp;rsquo;m happy to spare others with similar requirements all of the heavy lifting required to get it this far.
&lt;em&gt;Trust me, it is a DAUNTING challenge to preserve delicate algorithms when there are so many moving parts.&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
I have made all of the samples bundled in the original Java version equally accessible to those of you who need orientation in C#. Each sample is set up as a bare-bones console app that you can &amp;quot;fiddle&amp;quot; with them&amp;nbsp;to your heart's content. But also, and
 this is something that is &lt;em&gt;NOT&lt;/em&gt; provided in the original software, there are
&lt;strong&gt;&lt;span style="color:#ff0000"&gt;over 500 unit tests&lt;/span&gt;&lt;/strong&gt; that I wrote during the conversion process. This turns out to be quite a useful side-effect of going through the whole torturous exercise in the first place! These tests, although perhaps
 still a little incoherent in places (because they focus on specific conversion issues), make it even easier to dig deep without stumbling around in total bewilderment (well, you may still stumble around, but they do provide a bit of a handrail to lean on when
 you start feeling sick to your stomach). \'-) &lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Side Note: &lt;em&gt;There are likely to wind up being several &lt;span style="color:#ff0000"&gt;
thousands of tests&lt;/span&gt; associated with this software. I only covered what was causing difficulty during the conversion process, and that is but a small fraction of the full coverage this software deserves. (&amp;quot;sheesh&amp;quot;, as Sean is wont to say, I must be freaking
 crazy!)&lt;/em&gt;&lt;/strong&gt; &lt;br&gt;
&lt;br&gt;
If you are not familiar with the purpose of this software, you can purchase Sean's excellent book entitled
&lt;strong&gt;&lt;a href="http://www.lulu.com/product/paperback/essentials-of-metaheuristics/15028803"&gt;The Essentials of Metaheuristics&lt;/a&gt;&lt;/strong&gt; (or download the electronic version for free). You can also find numerous articles and academic papers on the website
 listed above, covering a variety of related topics. If you plan on doing really serious work in this field, you might also consider starting out with the early works of
&lt;strong&gt;&lt;a href="http://www.genetic-programming.com/johnkoza.html"&gt;John Koza (Genetic Programming I, II, et al)&lt;/a&gt;&lt;/strong&gt; and then move on through the ever-expanding body of research that grew from there. Or if you
&lt;em&gt;really&lt;/em&gt; get serious about this stuff, you will probably want to start all the way back with
&lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/John_Henry_Holland"&gt;John Holland&lt;/a&gt;&lt;/strong&gt;, who as many of you may already know, is generally considered the &amp;quot;father&amp;quot; of research into the field of
&lt;strong&gt;Genetic Algorithms&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
&lt;strong&gt;ECJ&lt;/strong&gt; targets &lt;strong&gt;Java&lt;/strong&gt;, because large scale evolutionary processes often need to interoperate seamlessly between workstations, which may or may not be hosting Windows, and back-end &amp;quot;heavy metal&amp;quot; hosting one of the
&lt;strong&gt;UNIX/LINUX&lt;/strong&gt; variants. Such environments are typical in many large enterprise and academic research settings, as you all well know (or know all too well!). If that kind of heterogeneous environment describes where
&lt;em&gt;YOU&lt;/em&gt; develop complex systems to solve difficult problems, then you will definitely want to trot on over to Sean's lab and familiarize yourself with the
&lt;strong&gt;Java&lt;/strong&gt; &amp;quot;source&amp;quot; code. &lt;br&gt;
&lt;br&gt;
On the other hand..., if you develop your software for homogenous environments with
&lt;strong&gt;Windows7 and Server 2003/2008/2008R2&lt;/strong&gt;, then you may want to consider downloading the converted
&lt;strong&gt;Open Source&lt;/strong&gt; &lt;strong&gt;C#&lt;/strong&gt; code hosted here to take full advantage of tight integration with the latest features provided by
&lt;strong&gt;.NET 4.0&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
Obviously I won't be able to deliver anywhere near the same level of support that a dedicated team can provide (almost none at all in fact). But if you are willing to work hard at it, or if you just want to experiment with the basics, everything you need to
 go the full distance is (or will shortly be) available in the download. I didn't leave anything out. But I should repeat the warning given above: some things have
&lt;em&gt;NOT YET&lt;/em&gt; been covered in the unit tests. I haven't had the time, for example, to test whether the Master / Slave communications are working (it uses simple sockets, so I'm not too worried about that, because I'll be migrating it to WCF4). Same goes
 for Island Exchange for speciation, coevolution, and maybe another thing or two. The
&lt;strong&gt;ECJ&lt;/strong&gt; team was actively revamping some of the code for a robotics exercise while I was still in the middle of the conversion. Those gaps in coverage will be closed in due course.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;I'll also revisit the ECJ SVN repository in coming weeks to pick up any new bits that show up and integrate any bug fixes and significant changes.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
The goal for this project is to try and deliver a conversion of the latest bits as they accrue in
&lt;strong&gt;ECJ&lt;/strong&gt;, while maintaining a robust and flexible platform on which to develop in
&lt;strong&gt;C#, F#, IronPython, IronRuby, VB.NET&lt;/strong&gt; and so on. I will also be keeping my eye out for other juicy plums that will integrate nicely with this software. In fact,
&lt;strong&gt;ECJ&lt;/strong&gt; has a sibling project for &lt;strong&gt;&amp;quot;Multi-Agent Simulation of Neighborhoods, or Networks (or something)&amp;quot; (aka MASON)&lt;/strong&gt; that fits the bill perfectly&amp;nbsp;(&amp;quot;sheesh&amp;quot;, I must be out of my freaking mind!). And integration with
&lt;strong&gt;&lt;a href="http://research.microsoft.com/en-us/collaboration/tools/trident.aspx"&gt;Microsoft's Project Trident&lt;/a&gt;&lt;/strong&gt; collaborative scientific research platform seems like a
&lt;em&gt;no-brainer&lt;/em&gt;. But there are also many other interesting possibilities. &lt;strong&gt;
Stay tuned!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE: This software is a central feature in a much larger development picture that is partially laid out in the
&lt;a href="http://branecloud.codeplex.com/wikipage?title=Vision&amp;version=8"&gt;Vision&lt;/a&gt; statement. Additional information will be made available in the
&lt;a href="http://branecloud.codeplex.com/documentation"&gt;Documentation&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;BTW: BraneCloud&lt;/strong&gt; is linked to a registered domain (net|com) for future things like
&lt;strong&gt;name/schema&lt;/strong&gt; resolution in the &lt;strong&gt;cloud&lt;/strong&gt;. So the only thing I ask if you want to derive your own fork from this one is that you
&lt;strong&gt;please use a different root namespace&lt;/strong&gt; to avoid collisions. Other that that, you are free to do with this what you will, so long as it abides by the stated licensing terms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ECJ License (AFL 3.0)&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;BraneCloud.Evolution.EC (Apache 2.0)&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;(Sean informs me that he may eventually be switching to the Apache license when he gets around to it.)&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Mon, 23 May 2011 20:23:32 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110523082332P</guid></item><item><title>Updated Wiki: Home</title><link>http://branecloud.codeplex.com/wikipage?version=87</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Project Description&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Industrial-Strength Evolutionary Computation for .NET 4.0&lt;/h3&gt;
&lt;h5&gt;This is an independent port of &lt;strong&gt;&lt;a href="http://www.cs.gmu.edu/~eclab/projects/ecj/"&gt;Sean Luke's venerable ECJ project (GMU EC Lab) Version 20&lt;/a&gt;&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;&lt;br&gt;
&lt;strong&gt;NOTE: This conversion to C# cannot and will not in any way be supported by Sean or any other member of his team at GMU. Please do not even ask! It is incredible that software of this caliber is made available in open-source form, and that is more than
 enough support! &lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
It is hard to imagine how many hours Sean and his team have put into this over the course of
&lt;strong&gt;13 years&lt;/strong&gt;. But suffice it to say: &lt;br&gt;
&lt;strong&gt;ECJ is an 800 lb Gorilla in the realm of Evolutionary Computation and Stochastic Optimization&lt;/strong&gt;.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;MILD WARNING: ECJ&lt;/strong&gt; is used for some very serious business (and this C# version has, or will shortly have, all of the same capabilities).
&lt;em&gt;But you don't need to get scared off by that&lt;/em&gt;. A comprehensive collection of samples is provided with
&lt;strong&gt;ECJ&lt;/strong&gt;, and the documentation that you can browse on &lt;strong&gt;Sean's&lt;/strong&gt; site covers all of the basics and well beyond. I highly recommend that newbies work with
&lt;strong&gt;ECJ&lt;/strong&gt; in &lt;strong&gt;JAVA&lt;/strong&gt; before you decide if this converted fork makes sense for you. The need for tight native .NET platform integration is potentially uncalled for, and you must ask yourself,
&lt;strong&gt;&amp;quot;Do I really Need This?&amp;quot;. Chances are, you don't.&lt;/strong&gt; But I personally really
&lt;em&gt;DO&lt;/em&gt; need this, and I&amp;rsquo;m happy to spare others with similar requirements all of the heavy lifting required to get it this far.
&lt;em&gt;Trust me, it is a DAUNTING challenge to preserve delicate algorithms when there are so many moving parts.&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
I have made all of the samples bundled in the original Java version equally accessible to those of you who need orientation in C#. Each sample is set up as a bare-bones console app that you can &amp;quot;fiddle&amp;quot; with them&amp;nbsp;to your heart's content. But also, and
 this is something that is &lt;em&gt;NOT&lt;/em&gt; provided in the original software, there are
&lt;strong&gt;&lt;span style="color:#ff0000"&gt;over 500 unit tests&lt;/span&gt;&lt;/strong&gt; that I wrote during the conversion process. This turns out to be quite a useful side-effect of going through the whole torturous exercise in the first place! These tests, although perhaps
 still a little incoherent in places (because they focus on specific conversion issues), make it even easier to dig deep without stumbling around in total bewilderment (well, you may still stumble around, but they do provide a bit of a handrail to lean on when
 you start feeling sick to your stomach). \'-) &lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Side Note: &lt;em&gt;There are likely to wind up being several &lt;span style="color:#ff0000"&gt;
thousands of tests&lt;/span&gt; associated with this software. I only covered what was causing difficulty during the conversion process, and that is but a small fraction of the full coverage this software deserves. (&amp;quot;sheesh&amp;quot;, as Sean is wont to say, I must be freaking
 crazy!)&lt;/em&gt;&lt;/strong&gt; &lt;br&gt;
&lt;br&gt;
If you are not familiar with the purpose of this software, you can purchase Sean's excellent book entitled
&lt;strong&gt;&lt;a href="http://www.lulu.com/product/paperback/essentials-of-metaheuristics/15028803"&gt;The Essentials of Metaheuristics&lt;/a&gt;&lt;/strong&gt; (or download the electronic version for free). You can also find numerous articles and academic papers on the website
 listed above, covering a variety of related topics. If you plan on doing really serious work in this field, you might also consider starting out with the early works of
&lt;strong&gt;&lt;a href="http://www.genetic-programming.com/johnkoza.html"&gt;John Koza (Genetic Programming I, II, et al)&lt;/a&gt;&lt;/strong&gt; and then move on through the ever-expanding body of research that grew from there. Or if you
&lt;em&gt;really&lt;/em&gt; get serious about this stuff, you will probably want to start all the way back with
&lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/John_Henry_Holland"&gt;John Holland&lt;/a&gt;&lt;/strong&gt;, who as many of you may already know, is generally considered the &amp;quot;father&amp;quot; of research into the field of
&lt;strong&gt;Genetic Algorithms&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
&lt;strong&gt;ECJ&lt;/strong&gt; targets &lt;strong&gt;Java&lt;/strong&gt;, because large scale evolutionary processes often need to interoperate seamlessly between workstations, which may or may not be hosting Windows, and back-end &amp;quot;heavy metal&amp;quot; hosting one of the
&lt;strong&gt;UNIX/LINUX&lt;/strong&gt; variants. Such environments are typical in many large enterprise and academic research settings, as you all well know (or know all too well!). If that kind of heterogeneous environment describes where
&lt;em&gt;YOU&lt;/em&gt; develop complex systems to solve difficult problems, then you will definitely want to trot on over to Sean's lab and familiarize yourself with the
&lt;strong&gt;Java&lt;/strong&gt; &amp;quot;source&amp;quot; code. &lt;br&gt;
&lt;br&gt;
On the other hand..., if you develop your software for homogenous environments with
&lt;strong&gt;Windows7 and Server 2003/2008/2008R2&lt;/strong&gt;, then you may want to consider downloading the converted
&lt;strong&gt;Open Source&lt;/strong&gt; &lt;strong&gt;C#&lt;/strong&gt; code hosted here to take full advantage of tight integration with the latest features provided by
&lt;strong&gt;.NET 4.0&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
Obviously I won't be able to deliver anywhere near the same level of support that a dedicated team can provide (almost none at all in fact). But if you are willing to work hard at it, or if you just want to experiment with the basics, everything you need to
 go the full distance is (or will shortly be) available in the download. I didn't leave anything out. But I should repeat the warning given above: some things have
&lt;em&gt;NOT YET&lt;/em&gt; been covered in the unit tests. I haven't had the time, for example, to test whether the Master / Slave communications are working (it uses simple sockets, so I'm not too worried about that). Same goes for Island Exchange for speciation, coevolution,
 and maybe another thing or two. The &lt;strong&gt;ECJ&lt;/strong&gt; team was actively revamping some of the code for a robotics exercise while I was still in the middle of the conversion. Those gaps in coverage will be closed in due course.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;I'll also revisit the ECJ SVN repository in coming weeks to pick up any new bits that show up and integrate any bug fixes and significant changes.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
The goal for this project is to try and deliver a conversion of the latest bits as they accrue in
&lt;strong&gt;ECJ&lt;/strong&gt;, while maintaining a robust and flexible platform on which to develop in
&lt;strong&gt;C#, F#, IronPython, IronRuby, VB.NET&lt;/strong&gt; and so on. I will also be keeping my eye out for other juicy plums that will integrate nicely with this software. In fact,
&lt;strong&gt;ECJ&lt;/strong&gt; has a sibling project for &lt;strong&gt;&amp;quot;Multi-Agent Simulation of Neighborhoods, or Networks (or something)&amp;quot; (aka MASON)&lt;/strong&gt; that fits the bill perfectly&amp;nbsp;(&amp;quot;sheesh&amp;quot;, I must be out of my freaking mind!). And integration with
&lt;strong&gt;&lt;a href="http://research.microsoft.com/en-us/collaboration/tools/trident.aspx"&gt;Microsoft's Project Trident&lt;/a&gt;&lt;/strong&gt; collaborative scientific research platform seems like a
&lt;em&gt;no-brainer&lt;/em&gt;. But there are also many other interesting possibilities. &lt;strong&gt;
Stay tuned!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE: This software is a central feature in a much larger development picture that is partially laid out in the
&lt;a href="http://branecloud.codeplex.com/wikipage?title=Vision&amp;version=8"&gt;Vision&lt;/a&gt; statement. Additional information will be made available in the
&lt;a href="http://branecloud.codeplex.com/documentation"&gt;Documentation&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;BTW: BraneCloud&lt;/strong&gt; is linked to a registered domain (net|com) for future things like
&lt;strong&gt;name/schema&lt;/strong&gt; resolution in the &lt;strong&gt;cloud&lt;/strong&gt;. So the only thing I ask if you want to derive your own fork from this one is that you
&lt;strong&gt;please use a different root namespace&lt;/strong&gt; to avoid collisions. Other that that, you are free to do with this what you will, so long as it abides by the stated licensing terms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ECJ License (AFL 3.0)&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;BraneCloud.Evolution.EC (Apache 2.0)&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;(Sean informs me that he may eventually be switching to the Apache license when he gets around to it.)&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Mon, 23 May 2011 20:19:35 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110523081935P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://branecloud.codeplex.com/documentation?version=13</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;There are definitely some things your are going to need to know about before you will understand all of what needed to be done for the conversion to C#/.NET4.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
I'll add some real help to describe the ways that this version differs from what you can read about in the&lt;a href="http://cs.gmu.edu/~eclab/projects/ecj/"&gt;
&lt;strong&gt;Java original&lt;/strong&gt;, on the &lt;strong&gt;ECJ&lt;/strong&gt; site at &lt;strong&gt;GMU&lt;/strong&gt;&lt;/a&gt;. But for now, a few notes will have to do&amp;hellip;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;FUNCTIONAL EQUIVALENCE&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Almost everything in this software is configurable, making if extremely flexible. The way that
&lt;strong&gt;BraneCloud&lt;/strong&gt; achieves equivalent configuration behavior is interesting:
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;&lt;span style="color:#000080"&gt;ECJ&lt;/span&gt;&lt;/strong&gt; the &amp;ldquo;&lt;strong&gt;*.param&lt;/strong&gt;&amp;rdquo; files contain simple type assignments by namespace such as &amp;quot;&lt;strong&gt;ec.Population&lt;/strong&gt;&amp;quot;. At runtime the code directly instantiates a
&lt;strong&gt;Population&lt;/strong&gt; because that type name in the assignment corresponds directly to a type that is locatable (without any need for aliasing).&lt;/p&gt;
&lt;p&gt;But in .NET, we need to map those &amp;quot;&lt;em&gt;&lt;strong&gt;canonical names&lt;/strong&gt;&lt;/em&gt;&amp;quot; (as they exist in ECJ) to real type names before we can search for, and instantiate,&amp;nbsp;each type. Oddly enough, the solution to this issue creates added flexibility.&lt;/p&gt;
&lt;p&gt;As follows ...&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
An attribute, &lt;strong&gt;ECConfiguration&lt;/strong&gt;, is attached to all types that might need to be specified in the configuration files (it does no harm, of course, to alias ANY type). A static class called
&lt;strong&gt;ECActivator&lt;/strong&gt; maps a canonical name, specified in the attribute, to a .NET type found in assemblies which are added at runtime.&lt;/p&gt;
&lt;p&gt;For Example:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; namespace MyNamespace &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ECConfiguration(&amp;quot;ec.MyType&amp;quot;)] &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class MyClass {} &lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Now in the bootstrapping we need to add whatever assembly contains &amp;quot;MyClass&amp;quot; to the activator:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; public static Main(...) &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly ecAssembly);
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly myAssembly);&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah
&lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You will note that I'm adding the main assembly, &lt;strong&gt;BraneCloud.Evolution.EC
&lt;/strong&gt;(passed in as &amp;quot;ecAssembly&amp;quot; in this case). This is&amp;nbsp;where most of the important core model types live. And the n I'm adding
&lt;strong&gt;myAssembly &lt;/strong&gt;where our custom &amp;quot;auxilliary&amp;quot; type is defined. The&amp;nbsp;first step, adding the main&lt;strong&gt;&amp;nbsp;EC&lt;/strong&gt; assembly,&amp;nbsp;could be easily avoided. But it is actually&amp;nbsp;&amp;quot;intentional&amp;quot;, because it removes any dependency from the
&lt;strong&gt;BraneCloud.Evolution.EC.Configuration&lt;/strong&gt; assembly where the activator is defined. I'm a big believer in Separation of Concerns, and there is absolutely no reason that
&lt;strong&gt;ECActivator&lt;/strong&gt; needs to know the identity of&amp;nbsp;ANY assembly ahead of time. You will ALSO note that I'm mapping the &amp;quot;&lt;strong&gt;&lt;span style="color:#ff0000"&gt;MyClass&lt;/span&gt;&lt;/strong&gt;&amp;quot; type to a canonical name of &amp;quot;&lt;span style="color:#ff0000"&gt;&lt;strong&gt;MyType&lt;/strong&gt;&lt;/span&gt;&amp;quot;.
 In like manner, we could change the entire canonical path to whatever we want, although one must wonder: for what reason? ;-)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;NOTES: &amp;quot;ARCHETYPES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I'm really not sure why it is not&amp;nbsp;a universal&amp;nbsp;practice, but I usually create a separate assembly called &amp;quot;Archetype&amp;quot; for any non-trivial project (the suitability of the name seems remarkably obvious to me). In it go any types that have no outside
 dependencies aside from the standard &amp;quot;platform&amp;quot; provisions. This allows us to avoid many annoying&amp;nbsp;circular reference&amp;nbsp;problems that ultimately&amp;nbsp;result in&amp;nbsp;bad design as projects grow increasingly complex (when they begin to require more sophisticated
 factoring). The assembly should remain extremely lightweight no matter how large the project grows (because it is meant to hold mainly interfaces, enumerations, constants, and perhaps a few simple abstract base classes. I'm making note of this here, so that&amp;nbsp;no
 one gets the wrong idea about what purpose this assembly is meant to serve. There's nothing mystical about it. It's purpose is as simple as&amp;nbsp;simple gets!
&lt;em&gt;(To be fair, one often sees this kind of assembly popping up in a myriad of guises - usually named somthing like &amp;quot;contracts&amp;quot;, which has slightly more speicalized implications. I am only surprised that Martin Fowler, or someone,&amp;nbsp;hasn't had more to say
 about it, and I'm surprised that computer science programs haven't been able to&amp;nbsp;compel &amp;quot;better practice&amp;quot; in this area. A lot of &amp;quot;spaghetti&amp;quot; dependency problems can be avoided in this way, and it seems like a standardized name for it would avoid much confusion.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;NAMESPACES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While the algorithms and apparti provided by &lt;strong&gt;ECJ &lt;/strong&gt;are central to the evolutionary optimization&amp;nbsp;strategy in
&lt;strong&gt;BraneCloud, &lt;/strong&gt;there are additional namespaces currently taking shape in my private development branch. It would have been nice to tag this conversion with a simple name like
&lt;strong&gt;ECCSharp&lt;/strong&gt;, or something. But that would have created a disconnect from some of the extensions, integrations,&amp;nbsp;and specializations that&amp;nbsp;are planned. If, or when, I release some of these other things, it will become more obvious why added
 differentiation was required. For example, there are already other conversions in progress and original code existing&amp;nbsp;under the following namespaces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BraneCloud.Deduction &lt;/li&gt;&lt;li&gt;BraneCloud.Induction &lt;/li&gt;&lt;li&gt;BraneCloud.Presentation &lt;/li&gt;&lt;li&gt;BraneCloud.Representation &lt;/li&gt;&lt;li&gt;BraneCloud.Simulation &lt;/li&gt;&lt;li&gt;BraneCloud.Workflow &lt;/li&gt;&lt;li&gt;Etc. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;A significant number of additional namespaces will be added in the future. Things would quickly devolve into mayhem if I tried to use an &amp;quot;alphabet soup&amp;quot; approach.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(MORE NOTES LATER&amp;hellip;)&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Sat, 21 May 2011 23:16:48 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20110521111648P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://branecloud.codeplex.com/documentation?version=12</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;There are definitely some things your are going to need to know about before you will understand all of what needed to be done for the conversion to C#/.NET4.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
I'll add some real help to describe the ways that this version differs from what you can read about in the&lt;a href="http://cs.gmu.edu/~eclab/projects/ecj/"&gt;
&lt;strong&gt;Java original&lt;/strong&gt;, on the &lt;strong&gt;ECJ&lt;/strong&gt; site at &lt;strong&gt;GMU&lt;/strong&gt;&lt;/a&gt;. But for now, a few notes will have to do&amp;hellip;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;FUNCTIONAL EQUIVALENCE&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Almost everything in this software is configurable, making if extremely flexible. The way that
&lt;strong&gt;BraneCloud&lt;/strong&gt; achieves equivalent configuration behavior is interesting:
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;&lt;span style="color:#000080"&gt;ECJ&lt;/span&gt;&lt;/strong&gt; the &amp;ldquo;&lt;strong&gt;*.param&lt;/strong&gt;&amp;rdquo; files contain simple type assignments by namespace such as &amp;quot;&lt;strong&gt;ec.Population&lt;/strong&gt;&amp;quot;. At runtime the code directly instantiates a
&lt;strong&gt;Population&lt;/strong&gt; because that type name in the assignment corresponds directly to a type that is locatable (without any need for aliasing).&lt;/p&gt;
&lt;p&gt;But in .NET, we need to map those &amp;quot;&lt;em&gt;&lt;strong&gt;canonical names&lt;/strong&gt;&lt;/em&gt;&amp;quot; (as they exist in ECJ) to real type names before we can search for, and instantiate,&amp;nbsp;each type. Oddly enough, the solution to this issue creates added flexibility.&lt;/p&gt;
&lt;p&gt;As follows ...&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
An attribute, &lt;strong&gt;ECConfiguration&lt;/strong&gt;, is attached to all types that might need to be specified in the configuration files (it does no harm, of course, to alias ANY type). A static class called
&lt;strong&gt;ECActivator&lt;/strong&gt; maps a canonical name, specified in the attribute, to a .NET type found in assemblies which are added at runtime.&lt;/p&gt;
&lt;p&gt;For Example:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; namespace MyNamespace &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ECConfiguration(&amp;quot;ec.MyType&amp;quot;)] &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class MyClass {} &lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Now in the bootstrapping we need to add whatever assembly contains &amp;quot;MyClass&amp;quot; to the activator:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; public static Main(...) &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly ecAssembly);
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly myAssembly);&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah
&lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You will note that I'm adding the main assembly, &lt;strong&gt;BraneCloud.Evolution.EC
&lt;/strong&gt;(passed in as &amp;quot;ecAssembly&amp;quot; in this case). This is&amp;nbsp;where most of the important core model types live. And the n I'm adding
&lt;strong&gt;myAssembly &lt;/strong&gt;where our custom &amp;quot;auxilliary&amp;quot; type is defined. The&amp;nbsp;first step, adding the main&lt;strong&gt;&amp;nbsp;EC&lt;/strong&gt; assembly,&amp;nbsp;could be easily avoided. But it is actually&amp;nbsp;&amp;quot;intentional&amp;quot;, because it removes any dependency from the
&lt;strong&gt;BraneCloud.Evolution.EC.Configuration&lt;/strong&gt; assembly where the activator is defined. I'm a big believer in Separation of Concerns, and there is absolutely no reason that
&lt;strong&gt;ECActivator&lt;/strong&gt; needs to know the identity of&amp;nbsp;ANY assembly ahead of time. You will ALSO note that I'm mapping the &amp;quot;&lt;strong&gt;&lt;span style="color:#ff0000"&gt;MyClass&lt;/span&gt;&lt;/strong&gt;&amp;quot; type to a canonical name of &amp;quot;&lt;span style="color:#ff0000"&gt;&lt;strong&gt;MyType&lt;/strong&gt;&lt;/span&gt;&amp;quot;.
 In like manner, we could change the entire canonical path to whatever we want, although one must wonder: for what reason? ;-)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;NOTES: &amp;quot;ARCHETYPES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I'm really not sure why it is not&amp;nbsp;a universal&amp;nbsp;practice, but I usually create a separate assembly called &amp;quot;Archetype&amp;quot; for any non-trivial project (the suitability of the name seems remarkably obvious to me). In it go any types that have no outside
 dependencies aside from the standard &amp;quot;platform&amp;quot; provisions. This allows us to avoid many annoying&amp;nbsp;circular reference&amp;nbsp;problems that ultimately&amp;nbsp;result in&amp;nbsp;bad design as projects grow increasingly complex (when they begin to require more sophisticated
 factoring). The assembly should remain extremely lightweight no matter how large the project grows (because it is meant to hold mainly interfaces, enumerations, constants, and perhaps a few simple abstract base classes. I'm making note of this here, so that&amp;nbsp;no
 one gets the wrong idea about what purpose this assembly is meant to serve. There's nothing mystical about it. It's purpose is as simple as&amp;nbsp;simple gets!
&lt;em&gt;(To be fair, one often sees this kind of assembly popping up in a myriad of guises. I am only surprised that Martin Fowler, or someone,&amp;nbsp;hasn't had more to say about it, and I'm surprised that computer science programs haven't been able to&amp;nbsp;compel
 &amp;quot;better practice&amp;quot; in this area. A lot of &amp;quot;spaghetti&amp;quot; dependency problems can be avoided in this way, and it seems like a standardized name for it would avoid much confusion.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;NAMESPACES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While the algorithms and apparti provided by &lt;strong&gt;ECJ &lt;/strong&gt;are central to the evolutionary optimization&amp;nbsp;strategy in
&lt;strong&gt;BraneCloud, &lt;/strong&gt;there are additional namespaces currently taking shape in my private development branch. It would have been nice to tag this conversion with a simple name like
&lt;strong&gt;ECCSharp&lt;/strong&gt;, or something. But that would have created a disconnect from some of the extensions, integrations,&amp;nbsp;and specializations that&amp;nbsp;are planned. If, or when, I release some of these other things, it will become more obvious why added
 differentiation was required. For example, there are already other conversions in progress and original code existing&amp;nbsp;under the following namespaces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BraneCloud.Deduction &lt;/li&gt;&lt;li&gt;BraneCloud.Induction &lt;/li&gt;&lt;li&gt;BraneCloud.Presentation &lt;/li&gt;&lt;li&gt;BraneCloud.Representation &lt;/li&gt;&lt;li&gt;BraneCloud.Simulation &lt;/li&gt;&lt;li&gt;BraneCloud.Workflow &lt;/li&gt;&lt;li&gt;Etc. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;A significant number of additional namespaces will be added in the future. Things would quickly devolve into mayhem if I tried to use an &amp;quot;alphabet soup&amp;quot; approach.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(MORE NOTES LATER&amp;hellip;)&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Sat, 21 May 2011 23:11:11 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20110521111111P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://branecloud.codeplex.com/documentation?version=11</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;There are definitely some things your are going to need to know about before you will understand all of what needed to be done for the conversion to C#/.NET4.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
I'll add some real help to describe the ways that this version differs from what you can read about in the&lt;a href="http://cs.gmu.edu/~eclab/projects/ecj/"&gt;
&lt;strong&gt;Java original&lt;/strong&gt;, on the &lt;strong&gt;ECJ&lt;/strong&gt; site at &lt;strong&gt;GMU&lt;/strong&gt;&lt;/a&gt;. But for now, a few notes will have to do&amp;hellip;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;FUNCTIONAL EQUIVALENCE&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Almost everything in this software is configurable, making if extremely flexible. The way that
&lt;strong&gt;BraneCloud&lt;/strong&gt; achieves equivalent configuration behavior is interesting:
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;&lt;span style="color:#000080"&gt;ECJ&lt;/span&gt;&lt;/strong&gt; the &amp;ldquo;&lt;strong&gt;*.param&lt;/strong&gt;&amp;rdquo; files contain simple type assignments by namespace such as &amp;quot;&lt;strong&gt;ec.Population&lt;/strong&gt;&amp;quot;. At runtime the code directly instantiates a
&lt;strong&gt;Population&lt;/strong&gt; because that type name in the assignment corresponds directly to a type that is locatable (without any need for aliasing).&lt;/p&gt;
&lt;p&gt;But in .NET, we need to map those &amp;quot;&lt;em&gt;&lt;strong&gt;canonical names&lt;/strong&gt;&lt;/em&gt;&amp;quot; (as they exist in ECJ) to real type names before we can search for, and instantiate,&lt;/p&gt;
&lt;p&gt;each type. Oddly enough, the solution to this issue creates added flexibility.&lt;/p&gt;
&lt;p&gt;As follows ...&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
An attribute, &lt;strong&gt;ECConfiguration&lt;/strong&gt;, is attached to all types that might need to be specified in the configuration files (it does no harm, of course, to alias ANY type). A static class called
&lt;strong&gt;ECActivator&lt;/strong&gt; maps a canonical name, specified in the attribute, to a .NET type found in assemblies which are added at runtime.&lt;/p&gt;
&lt;p&gt;For Example:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; namespace MyNamespace &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ECConfiguration(&amp;quot;ec.MyType&amp;quot;)] &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class MyClass {} &lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Now in the bootstrapping we need to add whatever assembly contains &amp;quot;MyClass&amp;quot; to the activator:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; public static Main(...) &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly ecAssembly);
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly myAssembly);&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah
&lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You will note that I'm adding the main assembly, &lt;strong&gt;BraneCloud.Evolution.EC
&lt;/strong&gt;(passed in as &amp;quot;ecAssembly&amp;quot; in this case). This is&amp;nbsp;where most of the important core model types live. And the n I'm adding
&lt;strong&gt;myAssembly &lt;/strong&gt;where our custom &amp;quot;auxilliary&amp;quot; type is defined. The&amp;nbsp;first step, adding the main&lt;strong&gt;&amp;nbsp;EC&lt;/strong&gt; assembly,&amp;nbsp;could be easily avoided. But it is actually&amp;nbsp;&amp;quot;intentional&amp;quot;, because it removes any dependency from the
&lt;strong&gt;BraneCloud.Evolution.EC.Configuration&lt;/strong&gt; assembly where the activator is defined. I'm a big believer in Separation of Concerns, and there is absolutely no reason that
&lt;strong&gt;ECActivator&lt;/strong&gt; needs to know the identity of&amp;nbsp;ANY assembly ahead of time. You will ALSO note that I'm mapping the &amp;quot;&lt;strong&gt;&lt;span style="color:#ff0000"&gt;MyClass&lt;/span&gt;&lt;/strong&gt;&amp;quot; type to a canonical name of &amp;quot;&lt;span style="color:#ff0000"&gt;&lt;strong&gt;MyType&lt;/strong&gt;&lt;/span&gt;&amp;quot;.
 In like manner, we could change the entire canonical path to whatever we want, although one must wonder: for what reason? ;-)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;NOTES: &amp;quot;ARCHETYPES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I'm really not sure why it is not&amp;nbsp;a universal&amp;nbsp;practice, but I usually create a separate assembly called &amp;quot;Archetype&amp;quot; for any non-trivial project (the suitability of the name seems remarkably obvious to me). In it go any types that have no outside
 dependencies aside from the standard &amp;quot;platform&amp;quot; provisions. This allows us to avoid many annoying&amp;nbsp;circular reference&amp;nbsp;problems that ultimately&amp;nbsp;result in&amp;nbsp;bad design as projects grow increasingly complex (when they begin to require more sophisticated
 factoring). The assembly should remain extremely lightweight no matter how large the project grows (because it is meant to hold mainly interfaces, enumerations, constants, and perhaps a few simple abstract base classes. I'm making note of this here, so that&amp;nbsp;no
 one gets the wrong idea about what purpose this assembly is meant to serve. There's nothing mystical about it. It's purpose is as simple as&amp;nbsp;simple gets!
&lt;em&gt;(To be fair, one often sees this kind of assembly popping up in a myriad of guises. I am only surprised that Martin Fowler, or someone,&amp;nbsp;hasn't had more to say about it, and I'm surprised that computer science programs haven't been able to&amp;nbsp;compel
 &amp;quot;better practice&amp;quot; in this area. A lot of &amp;quot;spaghetti&amp;quot; dependency problems can be avoided in this way, and it seems like a standardized name for it would avoid much confusion.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;NAMESPACES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While the algorithms and apparti provided by &lt;strong&gt;ECJ &lt;/strong&gt;are central to the evolutionary optimization&amp;nbsp;strategy in
&lt;strong&gt;BraneCloud, &lt;/strong&gt;there are additional namespaces currently taking shape in my private development branch. It would have been nice to tag this conversion with a simple name like
&lt;strong&gt;ECCSharp&lt;/strong&gt;, or something. But that would have created a disconnect from some of the extensions, integrations,&amp;nbsp;and specializations that&amp;nbsp;are planned. If, or when, I release some of these other things, it will become more obvious why added
 differentiation was required. For example, there are already other conversions in progress and original code existing&amp;nbsp;under the following namespaces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BraneCloud.Deduction &lt;/li&gt;&lt;li&gt;BraneCloud.Induction &lt;/li&gt;&lt;li&gt;BraneCloud.Presentation &lt;/li&gt;&lt;li&gt;BraneCloud.Representation &lt;/li&gt;&lt;li&gt;BraneCloud.Simulation &lt;/li&gt;&lt;li&gt;BraneCloud.Workflow &lt;/li&gt;&lt;li&gt;Etc. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;A significant number of additional namespaces will be added in the future. Things would quickly devolve into mayhem if I tried to use an &amp;quot;alphabet soup&amp;quot; approach.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(MORE NOTES LATER&amp;hellip;)&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Sat, 21 May 2011 23:10:38 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20110521111038P</guid></item><item><title>Updated Wiki: Home</title><link>http://branecloud.codeplex.com/wikipage?version=86</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Project Description&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Industrial-Strength Evolutionary Computation for .NET 4.0&lt;/h3&gt;
&lt;h5&gt;This is an independent port of &lt;strong&gt;&lt;a href="http://www.cs.gmu.edu/~eclab/projects/ecj/"&gt;Sean Luke's venerable ECJ project (GMU EC Lab) Version 20&lt;/a&gt;&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;&lt;br&gt;
&lt;strong&gt;NOTE: This conversion to C# cannot and will not in any way be supported by Sean or any other member of his team at GMU. Please do not even ask! It is incredible that software of this caliber is made available in open-source form, and that is more than
 enough support! &lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
It is hard to imagine how many hours Sean and his team have put into this over the course of
&lt;strong&gt;13 years&lt;/strong&gt;. But suffice it to say: &lt;br&gt;
&lt;strong&gt;ECJ is an 800 lb Gorilla in the realm of Evolutionary Computation and Stochastic Optimization&lt;/strong&gt;.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;MILD WARNING: ECJ&lt;/strong&gt; is used for some very serious business (and this C# version has, or will shortly have, all of the same capabilities).
&lt;em&gt;But you don't need to get scared off by that&lt;/em&gt;. A comprehensive collection of samples is provided with
&lt;strong&gt;ECJ&lt;/strong&gt;, and the documentation that you can browse on &lt;strong&gt;Sean's&lt;/strong&gt; site covers all of the basics and well beyond. I highly recommend that newbies work with
&lt;strong&gt;ECJ&lt;/strong&gt; in &lt;strong&gt;JAVA&lt;/strong&gt; before you decide if this converted fork makes sense for you. The need for tight native .NET platform integration is potentially uncalled for, and you must ask yourself,
&lt;strong&gt;&amp;quot;Do I really Need This?&amp;quot;. Chances are, you don't.&lt;/strong&gt; But I personally really
&lt;em&gt;DO&lt;/em&gt; need this, and I&amp;rsquo;m happy to spare others with similar requirements all of the heavy lifting required to get it this far.
&lt;em&gt;Trust me, it is a DAUNTING challenge to preserve delicate algorithms when there are so many moving parts.&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
I have made all of the samples bundled in the original Java version equally accessible to those of you who need orientation in C#. Each sample is set up as a bare-bones console app that you can &amp;quot;fiddle&amp;quot; with to your heart's content. But also, and this is something
 that is &lt;em&gt;NOT&lt;/em&gt; provided in the original software, there are &lt;strong&gt;&lt;span style="color:#ff0000"&gt;over 500 unit tests&lt;/span&gt;&lt;/strong&gt; that I wrote during the conversion process. This turns out to be quite a useful side-effect of going through the whole
 torturous exercise in the first place! These tests, although perhaps still a little incoherent in places (because they focus on specific conversion issues), make it even easier to dig deep without stumbling around in total bewilderment (well, you may still
 stumble around, but they do provide a bit of a handrail to lean on when you start feeling sick to your stomach). \'-)
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Side Note: &lt;em&gt;There are likely to wind up being several &lt;span style="color:#ff0000"&gt;
thousands of tests&lt;/span&gt; associated with this software. I only covered what was causing difficulty during the conversion process, and that is but a small fraction of the full coverage this software deserves. (&amp;quot;sheesh&amp;quot;, as Sean is wont to say, I must be freaking
 crazy!)&lt;/em&gt;&lt;/strong&gt; &lt;br&gt;
&lt;br&gt;
If you are not familiar with the purpose of this software, you can purchase Sean's excellent book entitled
&lt;strong&gt;&lt;a href="http://www.lulu.com/product/paperback/essentials-of-metaheuristics/15028803"&gt;The Essentials of Metaheuristics&lt;/a&gt;&lt;/strong&gt; (or download the electronic version for free). You can also find numerous articles and academic papers on the website
 listed above, covering a variety of related topics. If you plan on doing really serious work in this field, you might also consider starting out with the early works of
&lt;strong&gt;&lt;a href="http://www.genetic-programming.com/johnkoza.html"&gt;John Koza (Genetic Programming I, II, et al)&lt;/a&gt;&lt;/strong&gt; and then move on through the ever-expanding body of research that grew from there. Or if you
&lt;em&gt;really&lt;/em&gt; get serious about this stuff, you will probably want to start all the way back with
&lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/John_Henry_Holland"&gt;John Holland&lt;/a&gt;&lt;/strong&gt;, who as many of you may already know, is generally considered the &amp;quot;father&amp;quot; of research into the field of
&lt;strong&gt;Genetic Algorithms&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
&lt;strong&gt;ECJ&lt;/strong&gt; targets &lt;strong&gt;Java&lt;/strong&gt;, because large scale evolutionary processes often need to interoperate seamlessly between workstations, which may or may not be hosting Windows, and back-end &amp;quot;heavy metal&amp;quot; hosting one of the
&lt;strong&gt;UNIX/LINUX&lt;/strong&gt; variants. Such environments are typical in many large enterprise and academic research settings, as you all well know (or know all too well!). If that kind of heterogeneous environment describes where
&lt;em&gt;YOU&lt;/em&gt; develop complex systems to solve difficult problems, then you will definitely want to trot on over to Sean's lab and familiarize yourself with the
&lt;strong&gt;Java&lt;/strong&gt; &amp;quot;source&amp;quot; code. &lt;br&gt;
&lt;br&gt;
On the other hand..., if you develop your software for homogenous environments with
&lt;strong&gt;Windows7 and Server 2003/2008/2008R2&lt;/strong&gt;, then you may want to consider downloading the converted
&lt;strong&gt;Open Source&lt;/strong&gt; &lt;strong&gt;C#&lt;/strong&gt; code hosted here to take full advantage of tight integration with the latest features provided by
&lt;strong&gt;.NET 4.0&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
Obviously I won't be able to deliver anywhere near the same level of support that a dedicated team can provide (almost none at all in fact). But if you are willing to work hard at it, or if you just want to experiment with the basics, everything you need to
 go the full distance is (or will shortly be) available in the download. I didn't leave anything out. But I should repeat the warning given above: some things have
&lt;em&gt;NOT YET&lt;/em&gt; been covered in the unit tests. I haven't had the time, for example, to test whether the Master / Slave communications are working (it uses simple sockets, so I'm not too worried about that). Same goes for Island Exchange for speciation, coevolution,
 and maybe another thing or two. The &lt;strong&gt;ECJ&lt;/strong&gt; team was actively revamping some of the code for a robotics exercise while I was still in the middle of the conversion. Those gaps in coverage will be closed in due course.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;I'll also revisit the ECJ SVN repository in coming weeks to pick up any new bits that show up and integrate any bug fixes and significant changes.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
The goal for this project is to try and deliver a conversion of the latest bits as they accrue in
&lt;strong&gt;ECJ&lt;/strong&gt;, while maintaining a robust and flexible platform on which to develop in
&lt;strong&gt;C#, F#, IronPython, IronRuby, VB.NET&lt;/strong&gt; and so on. I will also be keeping my eye out for other juicy plums that will integrate nicely with this software. In fact,
&lt;strong&gt;ECJ&lt;/strong&gt; has a sibling project for &lt;strong&gt;&amp;quot;Multi-Agent Simulation of Neighborhoods, or Networks (or something)&amp;quot; (aka MASON)&lt;/strong&gt; that fits the bill perfectly&amp;nbsp;(&amp;quot;sheesh&amp;quot;, I must be out of my freaking mind!). And integration with
&lt;strong&gt;&lt;a href="http://research.microsoft.com/en-us/collaboration/tools/trident.aspx"&gt;Microsoft's Project Trident&lt;/a&gt;&lt;/strong&gt; collaborative scientific research platform seems like a
&lt;em&gt;no-brainer&lt;/em&gt;. But there are also many other interesting possibilities. &lt;strong&gt;
Stay tuned!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE: This software is a central feature in a much larger development picture that is partially laid out in the
&lt;a href="http://branecloud.codeplex.com/wikipage?title=Vision&amp;version=8"&gt;Vision&lt;/a&gt; statement. Additional information will be made available in the
&lt;a href="http://branecloud.codeplex.com/documentation"&gt;Documentation&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;BTW: BraneCloud&lt;/strong&gt; is linked to a registered domain (net|com) for future things like
&lt;strong&gt;name/schema&lt;/strong&gt; resolution in the &lt;strong&gt;cloud&lt;/strong&gt;. So the only thing I ask if you want to derive your own fork from this one is that you
&lt;strong&gt;please use a different root namespace&lt;/strong&gt; to avoid collisions. Other that that, you are free to do with this what you will, so long as it abides by the stated licensing terms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ECJ License (AFL 3.0)&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;BraneCloud.Evolution.EC (Apache 2.0)&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;(Sean informs me that he may eventually be switching to the Apache license when he gets around to it.)&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Fri, 20 May 2011 21:10:23 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110520091023P</guid></item><item><title>Updated Wiki: Home</title><link>http://branecloud.codeplex.com/wikipage?version=85</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Project Description&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Industrial-Strength Evolutionary Computation for .NET 4.0&lt;/h3&gt;
&lt;h5&gt;This is an independent port of &lt;strong&gt;&lt;a href="http://www.cs.gmu.edu/~eclab/projects/ecj/"&gt;Sean Luke's venerable ECJ project (GMU EC Lab) Version 20&lt;/a&gt;&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;&lt;br&gt;
&lt;strong&gt;NOTE: This conversion to C# cannot and will not in any way be supported by Sean or any other member of his team at GMU. Please do not even ask! It is incredible that software of this caliber is made available in open-source form, and that is more than
 enough support! &lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
It is hard to imagine how many hours Sean and his team have put into this over the course of
&lt;strong&gt;13 years&lt;/strong&gt;. But suffice it to say: &lt;br&gt;
&lt;strong&gt;ECJ is an 800 lb Gorilla in the realm of Evolutionary Computation and Stochastic Optimization&lt;/strong&gt;.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;MILD WARNING: ECJ&lt;/strong&gt; is used for some very serious business (and this C# version has, or will shortly have, all of the same capabilities).
&lt;em&gt;But you don't need to get scared off by that&lt;/em&gt;. A comprehensive collection of samples is provided with
&lt;strong&gt;ECJ&lt;/strong&gt;, and the documentation that you can browse on &lt;strong&gt;Sean's&lt;/strong&gt; site covers all of the basics and well beyond. I highly recommend that newbies work with
&lt;strong&gt;ECJ&lt;/strong&gt; in &lt;strong&gt;JAVA&lt;/strong&gt; before you decide if this converted fork makes sense for you. The need for tight native .NET platform integration is potentially uncalled for, and you must ask yourself,
&lt;strong&gt;&amp;quot;Do I really Need This?&amp;quot;. Chances are, you don't.&lt;/strong&gt; But I personally really
&lt;em&gt;DO&lt;/em&gt; need this, and I&amp;rsquo;m happy to spare others with similar requirements all of the heavy lifting required to get it this far.
&lt;em&gt;Trust me, it is a DAUNTING challenge to preserve delicate algorithms when there are so many moving parts.&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
I have made all of the samples bundled in the original Java version equally accessible to those of you who need orientation in C#. Each sample is set up as a bare-bones console app that you can &amp;quot;fiddle&amp;quot; with to your heart's content. But also, and this is something
 that is &lt;em&gt;NOT&lt;/em&gt; provided in the original software, there are &lt;strong&gt;&lt;span style="color:#ff0000"&gt;over 500 unit tests&lt;/span&gt;&lt;/strong&gt; that I wrote during the conversion process. This turns out to be quite a useful side-effect of going through the whole
 torturous exercise in the first place! These tests, although perhaps still a little incoherent in places (because they focus on specific conversion issues), make it even easier to dig deep without stumbling around in total bewilderment (well, you may still
 stumble around, but they do provide a bit of a handrail to lean on when you start feeling sick to your stomach). \'-)
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Side Note: &lt;em&gt;There are likely to wind up being several &lt;span style="color:#ff0000"&gt;
thousands of tests&lt;/span&gt; associated with this software. I only covered what was causing difficulty during the conversion process, and that is but a small fraction of the full coverage this software deserves. (&amp;quot;sheesh&amp;quot;, as Sean is wont to say, I must be freaking
 crazy!)&lt;/em&gt;&lt;/strong&gt; &lt;br&gt;
&lt;br&gt;
If you are not familiar with the purpose of this software, you can purchase Sean's excellent book entitled
&lt;strong&gt;&lt;a href="http://www.lulu.com/product/paperback/essentials-of-metaheuristics/15028803"&gt;The Essentials of Metaheuristics&lt;/a&gt;&lt;/strong&gt; (or download the electronic version for free). You can also find numerous articles and academic papers on the website
 listed above, covering a variety of related topics. If you plan on doing really serious work in this field, you might also consider starting out with the early works of
&lt;strong&gt;&lt;a href="http://www.genetic-programming.com/johnkoza.html"&gt;John Koza (Genetic Programming I, II, et al)&lt;/a&gt;&lt;/strong&gt; and then move on through the ever-expanding body of research that grew from there. Or if you
&lt;em&gt;really&lt;/em&gt; get serious about this stuff, you will probably want to start all the way back with
&lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/John_Henry_Holland"&gt;John Holland&lt;/a&gt;&lt;/strong&gt;, who as many of you may already know, is generally considered the &amp;quot;father&amp;quot; of research into the field of
&lt;strong&gt;Genetic Algorithms&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
&lt;strong&gt;ECJ&lt;/strong&gt; targets &lt;strong&gt;Java&lt;/strong&gt;, because large scale evolutionary processes often need to interoperate seamlessly between workstations, which may or may not be hosting Windows, and back-end &amp;quot;heavy metal&amp;quot; hosting one of the
&lt;strong&gt;UNIX/LINUX&lt;/strong&gt; variants. Such environments are typical in many large enterprise and academic research settings, as you all well know (or know all too well!). If that kind of heterogeneous environment describes where
&lt;em&gt;YOU&lt;/em&gt; develop complex systems to solve difficult problems, then you will definitely want to trot on over to Sean's lab and familiarize yourself with the
&lt;strong&gt;Java&lt;/strong&gt; &amp;quot;source&amp;quot; code. &lt;br&gt;
&lt;br&gt;
On the other hand..., if you develop your software for homogenous environments with
&lt;strong&gt;Windows7 and Server 2003/2008/2008R2&lt;/strong&gt;, then you may want to consider downloading the converted
&lt;strong&gt;Open Source&lt;/strong&gt; &lt;strong&gt;C#&lt;/strong&gt; code hosted here to take full advantage of tight integration with the latest features provided by
&lt;strong&gt;.NET 4.0&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
Obviously I won't be able to deliver anywhere near the same level of support that a dedicated team can provide (almost none at all in fact). But if you are willing to work hard at it, or if you just want to experiment with the basics, everything you need to
 go the full distance is (or will shortly be) available in the download. I didn't leave anything out. But I should repeat the warning given above: some things have
&lt;em&gt;NOT YET&lt;/em&gt; been covered in the unit tests. I haven't had the time, for example, to test whether the Master / Slave communications are working (it uses simple sockets, so I'm not too worried about that). Same goes for Island Exchange for speciation, coevolution,
 and maybe another thing or two. The &lt;strong&gt;ECJ&lt;/strong&gt; team was actively revamping some of the code for a robotics exercise while I was still in the middle of the conversion. Those gaps in coverage will be closed in due course.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;I'll also revisit the ECJ SVN repository in coming weeks to pick up any new bits that show up and integrate any bug fixes and significant changes.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
The goal for this project is to try and deliver a conversion of the latest bits as they accrue in
&lt;strong&gt;ECJ&lt;/strong&gt;, while maintaining a robust and flexible platform on which to develop in
&lt;strong&gt;C#, F#, IronPython, IronRuby, VB.NET&lt;/strong&gt; and so on. I will also be keeping my eye out for other juicy plums that will integrate nicely with this software. In fact,
&lt;strong&gt;ECJ&lt;/strong&gt; has a sibling project for &lt;strong&gt;&amp;quot;Multi-Agent Simulation of Neighborhoods, or Networks (or something)&amp;quot; (aka MASON)&lt;/strong&gt; that fits the bill perfectly&amp;nbsp;(&amp;quot;sheesh&amp;quot;, I must be out of my freaking mind!). And integration with
&lt;strong&gt;&lt;a href="http://research.microsoft.com/en-us/collaboration/tools/trident.aspx"&gt;Microsoft's Project Trident&lt;/a&gt;&lt;/strong&gt; collaborative scientific research platform seems like a
&lt;em&gt;no-brainer&lt;/em&gt;. But there are also many other interesting possibilities. &lt;strong&gt;
Stay tuned!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE: This software is a central feature in a much larger development picture that is partially laid out in the
&lt;a href="http://branecloud.codeplex.com/wikipage?title=Vision&amp;version=8"&gt;Vision&lt;/a&gt; statement. Additional information will be made available in the
&lt;a href="http://branecloud.codeplex.com/documentation"&gt;Documentation&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;BTW: BraneCloud&lt;/strong&gt; is linked to a registered domain (net|com) for future things like
&lt;strong&gt;name/schema&lt;/strong&gt; resolution in the &lt;strong&gt;cloud&lt;/strong&gt;. So the only thing I ask if you want to derive your own fork from this one is that you
&lt;strong&gt;please use a different root namespace&lt;/strong&gt; to avoid collisions. Other that that, you are free to do with this what you will, so long as it abides by the stated licensing terms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ECJ License (AFL 3.0)&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;BraneCloud.Evolution.EC (Apache 2.0)&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;(Sean informs me that he may eventually be switching to the Apache license when he gets around to it.)&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Additional information on starting a new project is available here: &lt;a href="http://codeplex.codeplex.com/wikipage?title=Start%20a%20Project"&gt;
Project Startup Guide&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Thu, 19 May 2011 11:42:03 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110519114203A</guid></item><item><title>Updated Wiki: Home</title><link>http://branecloud.codeplex.com/wikipage?version=84</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;Project Description&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Industrial-Strength Evolutionary Computation for .NET 4.0&lt;/h3&gt;
&lt;h5&gt;This is an independent port of &lt;strong&gt;&lt;a href="http://www.cs.gmu.edu/~eclab/projects/ecj/"&gt;Sean Luke's venerable ECJ project (GMU EC Lab) Version 20&lt;/a&gt;&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;&lt;br&gt;
&lt;strong&gt;NOTE: This conversion to C# cannot and will not in any way be supported by Sean or any other member of his team at GMU. Please do not even ask! It is incredible that software of this caliber is made available in open-source form, and that is more than
 enough support! &lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
It is hard to imagine how many hours Sean and his team have put into this over the course of
&lt;strong&gt;13 years&lt;/strong&gt;. But suffice it to say: &lt;br&gt;
&lt;strong&gt;ECJ is an 800 lb Gorilla in the realm of Evolutionary Computation and Stochastic Optimization&lt;/strong&gt;.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;MILD WARNING: ECJ&lt;/strong&gt; is used for some very serious business (and this C# version has, or will shortly have, all of the same capabilities).
&lt;em&gt;But you don't need to get scared off by that&lt;/em&gt;. A comprehensive collection of samples is provided with
&lt;strong&gt;ECJ&lt;/strong&gt;, and the documentation that you can browse on &lt;strong&gt;Sean's&lt;/strong&gt; site covers all of the basics and well beyond. I highly recommend that newbies work with
&lt;strong&gt;ECJ&lt;/strong&gt; in &lt;strong&gt;JAVA&lt;/strong&gt; before you decide if this converted fork makes sense for you. The need for tight native .NET platform integration is potentially uncalled for, and you must ask yourself,
&lt;strong&gt;&amp;quot;Do I really Need This?&amp;quot;. Chances are, you probably don't.&lt;/strong&gt; But I personally really
&lt;em&gt;DO&lt;/em&gt; need this, and I&amp;rsquo;m happy to spare others with similar requirements all of the heavy lifting required to get it this far.
&lt;em&gt;Trust me, it is a DAUNTING challenge to preserve delicate algorithms when there are so many moving parts.&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
I have made all of the samples bundled in the original Java version equally accessible to those of you who need orientation in C#. Each sample is set up as a bare-bones console app that you can &amp;quot;fiddle&amp;quot; with to your heart's content. But also, and this is something
 that is &lt;em&gt;NOT&lt;/em&gt; provided in the original software, there are &lt;strong&gt;&lt;span style="color:#ff0000"&gt;over 500 unit tests&lt;/span&gt;&lt;/strong&gt; that I wrote during the conversion process. This turns out to be quite a useful side-effect of going through the whole
 torturous exercise in the first place! These tests, although perhaps still a little incoherent in places (because they focus on specific conversion issues), make it even easier to dig deep without stumbling around in total bewilderment (well, you may still
 stumble around, but they do provide a bit of a handrail to lean on when you start feeling sick to your stomach). \'-)
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Side Note: &lt;em&gt;There are likely to wind up being several &lt;span style="color:#ff0000"&gt;
thousands of tests&lt;/span&gt; associated with this software. I only covered what was causing difficulty during the conversion process, and that is but a small fraction of the full coverage this software deserves. (&amp;quot;sheesh&amp;quot;, as Sean is wont to say, I must be freaking
 crazy!)&lt;/em&gt;&lt;/strong&gt; &lt;br&gt;
&lt;br&gt;
If you are not familiar with the purpose of this software, you can purchase Sean's excellent book entitled
&lt;strong&gt;&lt;a href="http://www.lulu.com/product/paperback/essentials-of-metaheuristics/15028803"&gt;The Essentials of Metaheuristics&lt;/a&gt;&lt;/strong&gt; (or download the electronic version for free). You can also find numerous articles and academic papers on the website
 listed above, covering a variety of related topics. If you plan on doing really serious work in this field, you might also consider starting out with the early works of
&lt;strong&gt;&lt;a href="http://www.genetic-programming.com/johnkoza.html"&gt;John Koza (Genetic Programming I, II, et al)&lt;/a&gt;&lt;/strong&gt; and then move on through the ever-expanding body of research that grew from there. Or if you
&lt;em&gt;really&lt;/em&gt; get serious about this stuff, you will probably want to start all the way back with
&lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/John_Henry_Holland"&gt;John Holland&lt;/a&gt;&lt;/strong&gt;, who as many of you may already know, is generally considered the &amp;quot;father&amp;quot; of research into the field of
&lt;strong&gt;Genetic Algorithms&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
&lt;strong&gt;ECJ&lt;/strong&gt; targets &lt;strong&gt;Java&lt;/strong&gt;, because large scale evolutionary processes often need to interoperate seamlessly between workstations, which may or may not be hosting Windows, and back-end &amp;quot;heavy metal&amp;quot; hosting one of the
&lt;strong&gt;UNIX/LINUX&lt;/strong&gt; variants. Such environments are typical in many large enterprise and academic research settings, as you all well know (or know all too well!). If that kind of heterogeneous environment describes where
&lt;em&gt;YOU&lt;/em&gt; develop complex systems to solve difficult problems, then you will definitely want to trot on over to Sean's lab and familiarize yourself with the
&lt;strong&gt;Java&lt;/strong&gt; &amp;quot;source&amp;quot; code. &lt;br&gt;
&lt;br&gt;
On the other hand..., if you develop your software for homogenous environments with
&lt;strong&gt;Windows7 and Server 2003/2008/2008R2&lt;/strong&gt;, then you may want to consider downloading the converted
&lt;strong&gt;Open Source&lt;/strong&gt; &lt;strong&gt;C#&lt;/strong&gt; code hosted here to take full advantage of tight integration with the latest features provided by
&lt;strong&gt;.NET 4.0&lt;/strong&gt;. &lt;br&gt;
&lt;br&gt;
Obviously I won't be able to deliver anywhere near the same level of support that a dedicated team can provide (almost none at all in fact). But if you are willing to work hard at it, or if you just want to experiment with the basics, everything you need to
 go the full distance is (or will shortly be) available in the download. I didn't leave anything out. But I should repeat the warning given above: some things have
&lt;em&gt;NOT YET&lt;/em&gt; been covered in the unit tests. I haven't had the time, for example, to test whether the Master / Slave communications are working (it uses simple sockets, so I'm not too worried about that). Same goes for Island Exchange for speciation, coevolution,
 and maybe another thing or two. The &lt;strong&gt;ECJ&lt;/strong&gt; team was actively revamping some of the code for a robotics exercise while I was still in the middle of the conversion. Those gaps in coverage will be closed in due course.
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;I'll also revisit the ECJ SVN repository in coming weeks to pick up any new bits that show up and integrate any bug fixes and significant changes.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
The goal for this project is to try and deliver a conversion of the latest bits as they accrue in
&lt;strong&gt;ECJ&lt;/strong&gt;, while maintaining a robust and flexible platform on which to develop in
&lt;strong&gt;C#, F#, IronPython, IronRuby, VB.NET&lt;/strong&gt; and so on. I will also be keeping my eye out for other juicy plums that will integrate nicely with this software. In fact,
&lt;strong&gt;ECJ&lt;/strong&gt; has a sibling project for &lt;strong&gt;&amp;quot;Multi-Agent Simulation of Neighborhoods, or Networks (or something)&amp;quot; (aka MASON)&lt;/strong&gt; that fits the bill perfectly&amp;nbsp;(&amp;quot;sheesh&amp;quot;, I must be out of my freaking mind!). And integration with
&lt;strong&gt;&lt;a href="http://research.microsoft.com/en-us/collaboration/tools/trident.aspx"&gt;Microsoft's Project Trident&lt;/a&gt;&lt;/strong&gt; collaborative scientific research platform seems like a
&lt;em&gt;no-brainer&lt;/em&gt;. But there are also many other interesting possibilities. &lt;strong&gt;
Stay tuned!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE: This software is a central feature in a much larger development picture that is partially laid out in the
&lt;a href="http://branecloud.codeplex.com/wikipage?title=Vision&amp;version=8"&gt;Vision&lt;/a&gt; statement. Additional information will be made available in the
&lt;a href="http://branecloud.codeplex.com/documentation"&gt;Documentation&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;BTW: BraneCloud&lt;/strong&gt; is linked to a registered domain (net|com) for future things like
&lt;strong&gt;name/schema&lt;/strong&gt; resolution in the &lt;strong&gt;cloud&lt;/strong&gt;. So the only thing I ask if you want to derive your own fork from this one is that you
&lt;strong&gt;please use a different root namespace&lt;/strong&gt; to avoid collisions. Other that that, you are free to do with this what you will, so long as it abides by the stated licensing terms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ECJ License (AFL 3.0)&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;BraneCloud.Evolution.EC (Apache 2.0)&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;(Sean informs me that he may eventually be switching to the Apache license when he gets around to it.)&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Additional information on starting a new project is available here: &lt;a href="http://codeplex.codeplex.com/wikipage?title=Start%20a%20Project"&gt;
Project Startup Guide&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Tue, 17 May 2011 13:27:30 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110517012730P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://branecloud.codeplex.com/documentation?version=10</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;There are definitely some things your are going to need to know about before you will understand all of what needed to be done for the conversion to C#/.NET4.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
I'll add some real help to describe the ways that this version differs from what you can read about in the&lt;a href="http://cs.gmu.edu/~eclab/projects/ecj/"&gt;
&lt;strong&gt;Java original&lt;/strong&gt;, on the &lt;strong&gt;ECJ&lt;/strong&gt; site at &lt;strong&gt;GMU&lt;/strong&gt;&lt;/a&gt;. But for now, a few notes will have to do&amp;hellip;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;FUNCTIONAL EQUIVALENCE&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Almost everything in this software is configurable, making if extremely flexible. The way that
&lt;strong&gt;BraneCloud&lt;/strong&gt; achieves equivalent configuration behavior is interesting:
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;&lt;span style="color:#000080"&gt;ECJ&lt;/span&gt;&lt;/strong&gt; the &amp;ldquo;&lt;strong&gt;*.param&lt;/strong&gt;&amp;rdquo; files contain simple type assignments by namespace such as &amp;quot;&lt;strong&gt;ec.Population&lt;/strong&gt;&amp;quot;. At runtime the code&lt;/p&gt;
&lt;p&gt;directly instantiates a &lt;strong&gt;Population&lt;/strong&gt; because that type name in the assignment corresponds directly to a type that is locatable (without any need for aliasing).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;But in .NET, we need to map those &amp;quot;&lt;em&gt;&lt;strong&gt;canonical names&lt;/strong&gt;&lt;/em&gt;&amp;quot; (as they exist in ECJ) to real type names before we can search for, and instantiate,&lt;/p&gt;
&lt;p&gt;each type. Oddly enough, the solution to this issue creates added flexibility.&lt;/p&gt;
&lt;p&gt;As follows ...&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
An attribute, &lt;strong&gt;ECConfiguration&lt;/strong&gt;, is attached to all types that might need to be specified in the configuration files (it does no harm, of course, to alias ANY type). A static class called
&lt;strong&gt;ECActivator&lt;/strong&gt; maps a canonical name, specified in the attribute, to a .NET type found in assemblies which are added at runtime.&lt;/p&gt;
&lt;p&gt;For Example:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; namespace MyNamespace &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ECConfiguration(&amp;quot;ec.MyType&amp;quot;)] &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class MyClass {} &lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Now in the bootstrapping we need to add whatever assembly contains &amp;quot;MyClass&amp;quot; to the activator:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; public static Main(...) &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly ecAssembly);
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly myAssembly);&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah
&lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You will note that I'm adding the main assembly, &lt;strong&gt;BraneCloud.Evolution.EC
&lt;/strong&gt;(passed in as &amp;quot;ecAssembly&amp;quot; in this case). This is&amp;nbsp;where most of the important core model types live. And the n I'm adding
&lt;strong&gt;myAssembly &lt;/strong&gt;where our custom &amp;quot;auxilliary&amp;quot; type is defined. The&amp;nbsp;first step, adding the main&lt;strong&gt;&amp;nbsp;EC&lt;/strong&gt; assembly,&amp;nbsp;could be easily avoided. But it is actually&amp;nbsp;&amp;quot;intentional&amp;quot;, because it removes any dependency from the
&lt;strong&gt;BraneCloud.Evolution.EC.Configuration&lt;/strong&gt; assembly where the activator is defined. I'm a big believer in Separation of Concerns, and there is absolutely no reason that
&lt;strong&gt;ECActivator&lt;/strong&gt; needs to know the identity of&amp;nbsp;ANY assembly ahead of time. You will ALSO note that I'm mapping the &amp;quot;&lt;strong&gt;&lt;span style="color:#ff0000"&gt;MyClass&lt;/span&gt;&lt;/strong&gt;&amp;quot; type to a canonical name of &amp;quot;&lt;span style="color:#ff0000"&gt;&lt;strong&gt;MyType&lt;/strong&gt;&lt;/span&gt;&amp;quot;.
 In like manner, we could change the entire canonical path to whatever we want, although one must wonder: for what reason? ;-)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;NOTES: &amp;quot;ARCHETYPES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I'm really not sure why it is not&amp;nbsp;a universal&amp;nbsp;practice, but I usually create a separate assembly called &amp;quot;Archetype&amp;quot; for any non-trivial project (the suitability of the name seems remarkably obvious to me). In it go any types that have no outside
 dependencies aside from the standard &amp;quot;platform&amp;quot; provisions. This allows us to avoid many annoying&amp;nbsp;circular reference&amp;nbsp;problems that ultimately&amp;nbsp;result in&amp;nbsp;bad design as projects grow increasingly complex (when they begin to require more sophisticated
 factoring). The assembly should remain extremely lightweight no matter how large the project grows (because it is meant to hold mainly interfaces, enumerations, constants, and perhaps a few simple abstract base classes. I'm making note of this here, so that&amp;nbsp;no
 one gets the wrong idea about what purpose this assembly is meant to serve. There's nothing mystical about it. It's purpose is as simple as&amp;nbsp;simple gets!
&lt;em&gt;(To be fair, one often sees this kind of assembly popping up in a myriad of guises. I am only surprised that Martin Fowler, or someone,&amp;nbsp;hasn't had more to say about it, and I'm surprised that computer science programs haven't been able to&amp;nbsp;compel
 &amp;quot;better practice&amp;quot; in this area. A lot of &amp;quot;spaghetti&amp;quot; dependency problems can be avoided in this way, and it seems like a standardized name for it would avoid much confusion.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;NAMESPACES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While the algorithms and apparti provided by &lt;strong&gt;ECJ &lt;/strong&gt;are central to the evolutionary optimization&amp;nbsp;strategy in
&lt;strong&gt;BraneCloud, &lt;/strong&gt;there are additional namespaces currently taking shape in my private development branch. It would have been nice to tag this conversion with a simple name like
&lt;strong&gt;ECCSharp&lt;/strong&gt;, or something. But that would have created a disconnect from some of the extensions, integrations,&amp;nbsp;and specializations that&amp;nbsp;are planned. If, or when, I release some of these other things, it will become more obvious why added
 differentiation was required. For example, there are already other conversions in progress and original code existing&amp;nbsp;under the following namespaces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BraneCloud.Deduction &lt;/li&gt;&lt;li&gt;BraneCloud.Induction &lt;/li&gt;&lt;li&gt;BraneCloud.Presentation &lt;/li&gt;&lt;li&gt;BraneCloud.Representation &lt;/li&gt;&lt;li&gt;BraneCloud.Simulation &lt;/li&gt;&lt;li&gt;BraneCloud.Workflow &lt;/li&gt;&lt;li&gt;Etc. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;A significant number of additional namespaces will be added in the future. Things would quickly devolve into mayhem if I tried to use an &amp;quot;alphabet soup&amp;quot; approach.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(MORE NOTES LATER&amp;hellip;)&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Tue, 17 May 2011 13:23:09 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20110517012309P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://branecloud.codeplex.com/documentation?version=9</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;There are definitely some things your are going to need to know about before you will understand all of what needed to be done for the conversion to C#/.NET4.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
I'll add some real help to describe the ways that this version differs from what you can read about in the&lt;a href="http://cs.gmu.edu/~eclab/projects/ecj/"&gt;
&lt;strong&gt;Java original&lt;/strong&gt;, on the &lt;strong&gt;ECJ&lt;/strong&gt; site at &lt;strong&gt;GMU&lt;/strong&gt;&lt;/a&gt;. But for now, a few notes will have to do&amp;hellip;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;FUNCTIONAL EQUIVALENCE&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Almost everything in this software is configurable, making if extremely flexible. The way that
&lt;strong&gt;BraneCloud&lt;/strong&gt; achieves equivalent configuration behavior is interesting:
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;&lt;span style="color:#000080"&gt;ECJ&lt;/span&gt;&lt;/strong&gt; the &amp;ldquo;&lt;strong&gt;*.param&lt;/strong&gt;&amp;rdquo; files contain simple type assignments by namespace such as &amp;quot;&lt;strong&gt;ec.Population&lt;/strong&gt;&amp;quot;. At runtime the code&lt;/p&gt;
&lt;p&gt;directly instantiates a &lt;strong&gt;Population&lt;/strong&gt; because that type name in the assignment corresponds directly to a type that is locatable (without any need for aliasing).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;But in .NET, we need to map those &amp;quot;&lt;em&gt;&lt;strong&gt;canonical names&lt;/strong&gt;&lt;/em&gt;&amp;quot; (as they exist in ECJ) to real type names before we can search for, and instantiate,&lt;/p&gt;
&lt;p&gt;each type. Oddly enough, the solution to this issue creates added flexibility.&lt;/p&gt;
&lt;p&gt;As follows ...&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
An attribute, &lt;strong&gt;ECConfiguration&lt;/strong&gt;, is attached to all types that might need to be specified in the configuration files (it does no harm, of course, to alias ANY type). A static class called
&lt;strong&gt;ECActivator&lt;/strong&gt; maps a canonical name, specified in the attribute, to a .NET type found in assemblies which are added at runtime.&lt;/p&gt;
&lt;p&gt;For Example:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; namespace MyNamespace &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ECConfiguration(&amp;quot;ec.MyType&amp;quot;)] &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class MyClass {} &lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Now in the bootstrapping we need to add whatever assembly contains &amp;quot;MyClass&amp;quot; to the activator:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; public static Main(...) &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly ecAssembly);
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly myAssembly);&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah
&lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You will note that I'm adding the main assembly, &lt;strong&gt;BraneCloud.Evolution.EC
&lt;/strong&gt;(passed in as &amp;quot;ecAssembly&amp;quot; in this case). This is&amp;nbsp;where most of the important core model types live. And the n I'm adding
&lt;strong&gt;myAssembly &lt;/strong&gt;where our custom &amp;quot;auxilliary&amp;quot; type is defined. The&amp;nbsp;first step, adding the main&lt;strong&gt;&amp;nbsp;EC&lt;/strong&gt; assembly,&amp;nbsp;could be easily avoided. But it is actually&amp;nbsp;&amp;quot;intentional&amp;quot;, because it removes any dependency from the
&lt;strong&gt;BraneCloud.Evolution.EC.Configuration&lt;/strong&gt; assembly where the activator is defined. I'm a big believer in Separation of Concerns, and there is absolutely no reason that
&lt;strong&gt;ECActivator&lt;/strong&gt; needs to know the identity of&amp;nbsp;ANY assembly ahead of time. You will ALSO note that I'm mapping the &amp;quot;&lt;strong&gt;&lt;span style="color:#ff0000"&gt;MyClass&lt;/span&gt;&lt;/strong&gt;&amp;quot; type to a canonical name of &amp;quot;&lt;span style="color:#ff0000"&gt;&lt;strong&gt;MyType&lt;/strong&gt;&lt;/span&gt;&amp;quot;.
 In like manner, we could change the entire canonical path to whatever we want, although one must wonder: for what reason? ;-)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;NOTES: &amp;quot;ARCHETYPES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I'm really not sure why it is not&amp;nbsp;a universal&amp;nbsp;practice, but I usually create a separate assembly called &amp;quot;Archetype&amp;quot; for any non-trivial project (the suitability of the name seems remarkably obvious to me). In it go any types that have no outside
 dependencies aside from the standard &amp;quot;platform&amp;quot; provisions. This allows us to avoid many annoying&amp;nbsp;circular reference&amp;nbsp;problems that ultimately&amp;nbsp;result in&amp;nbsp;bad design as projects grow increasingly complex (when they begin to require more sophisticated
 factoring). The assembly should remain extremely lightweight no matter how large the project grows (because it is meant to hold mainly interfaces, enumerations, constants, and perhaps a few simple abstract base classes. I'm making note of this here, so that&amp;nbsp;no
 one gets the wrong idea about what purpose this assembly is meant to serve. There's nothing mystical about it. It's purpose is as simple as&amp;nbsp;simple gets!
&lt;em&gt;(To be fair, one often sees this kind of assembly popping up in a myriad of guises. I am only surprised that Martin Fowler, or someone,&amp;nbsp;hasn't had more to say about it, and I'm surprised that computer science programs haven't been able to&amp;nbsp;compel
 &amp;quot;better practice&amp;quot; in this area. A lot of &amp;quot;spaghetti&amp;quot; dependency problems can be avoided in this way, and it seems like a standardized name for it would avoid much confusion.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(MORE NOTES LATER&amp;hellip;)&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Tue, 17 May 2011 12:36:48 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20110517123648P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://branecloud.codeplex.com/documentation?version=8</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;There are definitely some things your are going to need to know about before you will understand all of what needed to be done for the conversion to C#/.NET4.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
I'll add some real help to describe the ways that this version differs from what you can read about in the&lt;a href="http://cs.gmu.edu/~eclab/projects/ecj/"&gt;
&lt;strong&gt;Java original&lt;/strong&gt;, on the &lt;strong&gt;ECJ&lt;/strong&gt; site at &lt;strong&gt;GMU&lt;/strong&gt;&lt;/a&gt;. But for now, a few notes will have to do&amp;hellip;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;FUNCTIONAL EQUIVALENCE&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Almost everything in this software is configurable, making if extremely flexible. The way that
&lt;strong&gt;BraneCloud&lt;/strong&gt; achieves equivalent configuration behavior is interesting:
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;&lt;span style="color:#000080"&gt;ECJ&lt;/span&gt;&lt;/strong&gt; the &amp;ldquo;&lt;strong&gt;*.param&lt;/strong&gt;&amp;rdquo; files contain simple type assignments by namespace such as &amp;quot;&lt;strong&gt;ec.Population&lt;/strong&gt;&amp;quot;. At runtime the code&lt;/p&gt;
&lt;p&gt;directly instantiates a &lt;strong&gt;Population&lt;/strong&gt; because that type name in the assignment corresponds directly to a type that is locatable (without any need for aliasing).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;But in .NET, we need to map those &amp;quot;&lt;em&gt;&lt;strong&gt;canonical names&lt;/strong&gt;&lt;/em&gt;&amp;quot; (as they exist in ECJ) to real type names before we can search for, and instantiate,&lt;/p&gt;
&lt;p&gt;each type. Oddly enough, the solution to this issue creates added flexibility.&lt;/p&gt;
&lt;p&gt;As follows ...&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
An attribute, &lt;strong&gt;ECConfiguration&lt;/strong&gt;, is attached to all types that might need to be specified in the configuration files (it does no harm, of course, to alias ANY type). A static class called
&lt;strong&gt;ECActivator&lt;/strong&gt; maps a canonical name, specified in the attribute, to a .NET type found in assemblies which are added at runtime.&lt;/p&gt;
&lt;p&gt;For Example:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; namespace MyNamespace &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ECConfiguration(&amp;quot;ec.MyType&amp;quot;)] &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class MyClass {} &lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Now in the bootstrapping we need to add whatever assembly contains &amp;quot;MyClass&amp;quot; to the activator:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; public static Main(...) &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly ecAssembly);
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly myAssembly);&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah
&lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You will note that I'm adding the main assembly, &lt;strong&gt;BraneCloud.Evolution.EC
&lt;/strong&gt;(passed in as &amp;quot;ecAssembly&amp;quot; in this case). This is&amp;nbsp;where most of the important core model types live. And the n I'm adding
&lt;strong&gt;myAssembly &lt;/strong&gt;where our custom &amp;quot;auxilliary&amp;quot; type is defined. The&amp;nbsp;first step, adding the main&lt;strong&gt;&amp;nbsp;EC&lt;/strong&gt; assembly,&amp;nbsp;could be easily avoided. But it is actually&amp;nbsp;&amp;quot;intentional&amp;quot;, because it removes any dependency from the
&lt;strong&gt;BraneCloud.Evolution.EC.Configuration&lt;/strong&gt; assembly where the activator is defined. I'm a big believer in Separation of Concerns, and there is absolutely no reason that
&lt;strong&gt;ECActivator&lt;/strong&gt; needs to know the identity of&amp;nbsp;ANY assembly ahead of time. You will ALSO note that I'm mapping the &amp;quot;&lt;strong&gt;&lt;span style="color:#ff0000"&gt;MyClass&lt;/span&gt;&lt;/strong&gt;&amp;quot; type to a canonical name of &amp;quot;&lt;span style="color:#ff0000"&gt;&lt;strong&gt;MyType&lt;/strong&gt;&lt;/span&gt;&amp;quot;.
 In like manner, we could change the entire canonical path to whatever we want, although one must wonder: for what reason? ;-)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;NOTES: &amp;quot;ARCHETYPES&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I'm really not sure why it is not standard practice, but I usually create a separate assembly called &amp;quot;Archetype&amp;quot; for any non-trivial project. In it go any types that have no outside dependencies aside from the standard .NET provisions. This allows us to
 avoid many annoying&amp;nbsp;circular reference&amp;nbsp;problems that ultimately compel bad design as projects grow increasingly complex and begin to require more sophisticated factoring. The assembly should remain extremely lightweight no matter how large the project
 grows. And if doesn't, then one&amp;nbsp;should recognize&amp;nbsp;immediately that something is amiss. I'm making note of this here, so that&amp;nbsp;no one gets the wrong idea about what purpose this assembly is meant to serve. It's purpose is as simple as&amp;nbsp;simple
 gets!&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(MORE NOTES LATER&amp;hellip;)&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Tue, 17 May 2011 12:03:48 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20110517120348P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://branecloud.codeplex.com/documentation?version=7</link><description>&lt;div class="wikidoc"&gt;
&lt;p&gt;&lt;strong&gt;There are definitely some things your are going to need to know about before you will understand all of what needed to be done for the conversion to C#/.NET4.&lt;/strong&gt;
&lt;br&gt;
&lt;br&gt;
I'll add some real help to describe the ways that this version differs from what you can read about in the&lt;a href="http://cs.gmu.edu/~eclab/projects/ecj/"&gt;
&lt;strong&gt;Java original&lt;/strong&gt;, on the &lt;strong&gt;ECJ&lt;/strong&gt; site at &lt;strong&gt;GMU&lt;/strong&gt;&lt;/a&gt;. But for now, a few notes will have to do&amp;hellip;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &amp;quot;FUNCTIONAL EQUIVALENCE&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The way that &lt;strong&gt;BraneCloud&lt;/strong&gt; achieves equivalent configuration behavior is interesting:
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;&lt;span style="color:#000080"&gt;ECJ&lt;/span&gt;&lt;/strong&gt; the &amp;ldquo;&lt;strong&gt;*.param&lt;/strong&gt;&amp;rdquo; files contain simple type assignments by namespace such as &amp;quot;&lt;strong&gt;ec.Population&lt;/strong&gt;&amp;quot;. At runtime the code&lt;/p&gt;
&lt;p&gt;directly instantiates a &lt;strong&gt;Population&lt;/strong&gt; because that type name in the assignment corresponds directly to a type that is globally known.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;But in .NET, we need to map those &amp;quot;&lt;em&gt;&lt;strong&gt;canonical names&lt;/strong&gt;&lt;/em&gt;&amp;quot; (as they exist in ECJ) to real type names before we can search for, and instantiate,&lt;/p&gt;
&lt;p&gt;each type. Oddly enough, the solution to this issue creates added flexibility.&lt;/p&gt;
&lt;p&gt;As follows ...&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
An attribute, &lt;strong&gt;ECConfiguration&lt;/strong&gt;, is attached to all types that might need to be specified in the configuration files. A static class called
&lt;strong&gt;ECActivator&lt;/strong&gt; maps a canonical name, specified in the attribute, to a .NET type found in assemblies which are added at runtime.&lt;/p&gt;
&lt;p&gt;For Example:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; namespace MyNamespace &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ECConfiguration(&amp;quot;ec.MyType&amp;quot;)] &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class MyClass {} &lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Now in the bootstrapping we need to add whatever assembly contains &amp;quot;MyClass&amp;quot; to the activator:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp; public static Main(...) &lt;br&gt;
&amp;nbsp; { &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly ecAssembly);
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ECActivator.AddSourceAssembly(Assembly myAssembly);&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#400040"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ... blah, blah, blah
&lt;br&gt;
&amp;nbsp; }&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You will note that I'm adding the main assembly, &lt;strong&gt;BraneCloud.Evolution.EC&lt;/strong&gt;, where most of the important model types live, along with
&lt;strong&gt;myAssembly&lt;/strong&gt;. That preliminary step is intentional (even though we could manage to avoid it), because it removes any dependency from the
&lt;strong&gt;BraneCloud.Evolution.EC.Configuration&lt;/strong&gt; assembly where the activator is defined. You will ALSO note that I'm mapping the &amp;quot;&lt;strong&gt;&lt;span style="color:#ff0000"&gt;MyClass&lt;/span&gt;&lt;/strong&gt;&amp;quot; type to a canonical name of &amp;quot;&lt;span style="color:#ff0000"&gt;&lt;strong&gt;MyType&lt;/strong&gt;&lt;/span&gt;&amp;quot;.
 In like manner, we could change the entire canonical path to whatever we want, although one must wonder: for what reason? ;-)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(MORE NOTES LATER&amp;hellip;)&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>bstabile</author><pubDate>Tue, 17 May 2011 11:28:26 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20110517112826A</guid></item></channel></rss>