Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
[ANN] charlie 0.5.0 Released - A genetic algorithms library.
Sander Land
12/19/2007 5:53:00 PM
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...
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/project...
*
http://charlie.rub...
## LICENSE:
MIT license.
2 Answers
hemant
12/19/2007 8:37:00 PM
0
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...
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/project...
> *
http://charlie.rub...
>
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://g...
Ian Leitch
12/20/2007 10:12:00 AM
0
[Note: parts of this message were removed to make it a legal post.]
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...
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/project...
> > *
http://charlie.rub...
> >
>
> 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://g...
>
>
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
[ANN] charlie 0.5.0 Released - A genetic algorithms library.
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password