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'
>  N=5
>  CITIES = (0...N).map{|i| (0...N).map{|j| [i,j] } }.inject{|a,b|a+b}
>  class TSP < PermutationGenotype(CITIES.size)
>    def fitness
>      d=0
>      (genes + [genes[0]]).each_cons(2){|a,b|
>         a,b=CITIES[a],CITIES[b]
>         d += Math.sqrt( (a[0]-b[0])**2 + (a[1]-b[1])**2 )
>       }
>      -d # lower distance -> higher fitness.
>    end
>  end
>  pop = Population.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