# Charlie 0.5.0 Released - A genetic algorithms library

**URL:** <https://www.ruby-forum.com/t/charlie-0-5-0-released-a-genetic-algorithms-library/123683>\
**Category:** Ruby\
**Created:** [December 19, 2007, 6:53pm UTC](https://www.ruby-forum.com/t/charlie-0-5-0-released-a-genetic-algorithms-library/123683 "2007-12-19T18:53:24Z")\
**Posts on this page:** 3\
**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 19, 2007, 6:53pm UTC](https://www.ruby-forum.com/t/charlie-0-5-0-released-a-genetic-algorithms-library/123683/1 "2007-12-19T18:53:24Z")

</div>

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 [Parked at Loopia](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://rubyforge.org/projects/charlie/)
- [http://charlie.rubyforge.org](http://charlie.rubyforge.org)

## LICENSE:

MIT license.

---

<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 20, 2007, 11:12am UTC](https://www.ruby-forum.com/t/charlie-0-5-0-released-a-genetic-algorithms-library/123683/2 "2007-12-20T11:12:04Z")

</div>

Excellent, I’ve been wanting such a library for a while now. Cheers!

---

<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 19, 2007, 9:37pm UTC](https://www.ruby-forum.com/t/charlie-0-5-0-released-a-genetic-algorithms-library/123683/3 "2007-12-19T21:37:29Z")

</div>

On Dec 19, 2007 11:22 PM, Sander L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> - Easily replace any of the parts by your own code.  
> the best solution, so a higher number is better.  
> Population.new(Find512).evolve\_on\_console  
> d=0
> 
> ## INSTALLATION:
> 
> - sudo gem install charlie
> 
> ## Links
> 
> - [http://rubyforge.org/projects/charlie/](http://rubyforge.org/projects/charlie/)
> - [http://charlie.rubyforge.org](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](http://gnufied.org)
