# Charlie 0.6.0 Released - A genetic algorithms library

**URL:** <https://www.ruby-forum.com/t/charlie-0-6-0-released-a-genetic-algorithms-library/124219>\
**Category:** Ruby\
**Created:** [December 26, 2007, 5:42pm UTC](https://www.ruby-forum.com/t/charlie-0-6-0-released-a-genetic-algorithms-library/124219 "2007-12-26T17:42:59Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![sander](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/90ced4/32.png) [@sander](https://www.ruby-forum.com/u/sander)\
**Post date:** [December 26, 2007, 5:42pm UTC](https://www.ruby-forum.com/t/charlie-0-6-0-released-a-genetic-algorithms-library/124219/1 "2007-12-26T17:42:59Z")

</div>

Hi all,

I’m pleased to announce the second public release of charlie, a  
genetic algorithms library for Ruby.

This release includes a TreeGenotype, making the library useful for  
genetic programming. This is still an early version with very limited  
mutation options, and I would really appreciate suggestions on how to  
extend these.  
It also includes several performance improvements, changes for ruby  
1.9, convergence checks and improved mutator/crossover operators for  
permutations.

## Ruby 1.9 Compatibility

This release is mostly compatible with Ruby 1.9.  
However, there is a bug in Ruby (#16493) that makes a lot of tests,  
and some benchmark examples fail.  
To avoid this bug, don’t have two or more results of a function that  
returns a module in the same array (e.g. don’t have something like  
“crossover PCross(0.5,SinglePointCrossover),  
PCross(0.5,UniformCrossover)” in your benchmarks).

## 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 report:  
[http://charlie.rubyforge.org/example\_report.html](http://charlie.rubyforge.org/example_report.html)

## EXAMPLE

This example finds a polynomial which approximates cos(x)

class Cos \< TreeGenotype([proc{3_rand-1.5},:x], [:+,:_,:-], [:-@])  
def fitness  
-[0,0.33,0.66,1].map{|x| (eval\_genes(:x=\>x) - Math.cos(x)).abs }.max  
end  
use TournamentSelection(4)  
end  
Population.new(Cos).evolve\_on\_console(500)

Several other simple examples are included in the gem/tarball.

## INSTALLATION:

- sudo gem install charlie

## Links

- [http://rubyforge.org/projects/charlie/](http://rubyforge.org/projects/charlie/)
- [http://charlie.rubyforge.org](http://charlie.rubyforge.org)

## LICENSE:

MIT license.
