------ art_20716_4602529.1198145494901 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline Excellent, I've been wanting such a library for a while now. Cheers! On 19/12/2007, hemant <gethemant / gmail.com> wrote: > > On Dec 19, 2007 11:22 PM, Sander Land <sander.land / gmail.com> wrote: > > Hi all, > > > > I'm pleased to announce the first public release of charlie, a genetic > > algorithms library for Ruby. > > > > ## FEATURES: > > - Quickly develop GAs by combining several parts (genotype, selection, > > crossover, mutation) provided by the library. > > - Sensible defaults are provided with any genotype, so often you only > > need to define a fitness function. > > - Easily replace any of the parts by your own code. > > - Test different strategies in GA, and generate reports comparing them. > > > > ## EXAMPLE: (also at http://pastie.caboo.se/130559 with better > formatting) > > This example finds the binary representation of the number 512. > > > > require 'rubygems' > > require 'charlie' > > class Find512 < BitStringGenotype(10) # choose a genotype, in this > > case a list of 10 bits represents a solution > > # Define a fitness function. This one returns minus the offset to > > the best solution, so a higher number is better. > > # Usually, you won't know the best solution, and will define this > > as some value that needs to be maximized. > > def fitness > > # Use the 'genes' function to retrieve the array of bits > > representing this solution. > > -(genes.map(&:to_s).join.to_i(2) - 512).abs > > end > > end > > # Finally, create an instance of a population (with the default size > > of 20) and let it run for the default number of 100 generations. > > Population.new(Find512).evolve_on_console > > > > ## RUBYQUIZ #142 SOLUTION: > > I know, it's a bit late. ;) > > > > require 'rubygems' > > require 'charlie' > > NP> > CITIES 0...N).map{|i| (0...N).map{|j| [i,j] } }.inject{|a,b|a+b} > > class TSP < PermutationGenotype(CITIES.size) > > def fitness > > d > > (genes + [genes[0]]).each_cons(2){|a,b| > > a,bIES[a],CITIES[b] > > d + ath.sqrt( (a[0]-b[0])**2 + (a[1]-b[1])**2 ) > > } > > -d # lower distance -> higher fitness. > > end > > end > > pop opulation.new(TSP,20).evolve_on_console(50) > > > > Several other simple examples are included in the gem/tarball. > > > > ## INSTALLATION: > > * sudo gem install charlie > > > > ## Links > > * http://rubyforge.org/projects/charlie/ > > * http://charlie.rubyforge.org > > > > Awesome work! > > Going to check it out.. Thanks. > > > > -- > Let them talk of their oriental summer climes of everlasting > conservatories; give me the privilege of making my own summer with my > own coals. > > http://gnufied.org > > ------ art_20716_4602529.1198145494901--