genetica 0.0.1.beta.1 → 0.0.1.beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/genetica/population.rb +12 -0
- data/lib/genetica/population_builder.rb +3 -0
- metadata +3 -4
data/lib/genetica/population.rb
CHANGED
@@ -5,6 +5,7 @@ module Genetica
|
|
5
5
|
attr_reader :generation
|
6
6
|
|
7
7
|
attr_accessor :alleles
|
8
|
+
attr_accessor :elitism
|
8
9
|
attr_accessor :crossover_probability
|
9
10
|
attr_accessor :mutation_probability
|
10
11
|
attr_accessor :fitness_function
|
@@ -18,10 +19,18 @@ module Genetica
|
|
18
19
|
@population.at @population_fitness.index(self.best_fitness)
|
19
20
|
end
|
20
21
|
|
22
|
+
def best_chromosomes(quantity=1)
|
23
|
+
self.best_fitnesses(quantity).collect { |fitness| @population.at(@population_fitness.index fitness) }
|
24
|
+
end
|
25
|
+
|
21
26
|
def best_fitness
|
22
27
|
@population_fitness.max
|
23
28
|
end
|
24
29
|
|
30
|
+
def best_fitnesses(quantity=1)
|
31
|
+
@population_fitness.sort.reverse.take(quantity)
|
32
|
+
end
|
33
|
+
|
25
34
|
def average_fitness
|
26
35
|
@population_fitness.inject(:+) / @population_fitness.size.to_f
|
27
36
|
end
|
@@ -61,6 +70,9 @@ module Genetica
|
|
61
70
|
# Generate a new chromosome population
|
62
71
|
population = Array.new
|
63
72
|
|
73
|
+
# If elitism if greater than 0 then we save the same number of chromosomes to the next generation
|
74
|
+
population += self.best_chromosomes(quantity=@elitism) if @elitism > 0
|
75
|
+
|
64
76
|
while population.size < @population.size
|
65
77
|
# 1. Selection Step
|
66
78
|
# Select a pair of parent chromosomes from the current population.
|
@@ -3,6 +3,7 @@ module Genetica
|
|
3
3
|
|
4
4
|
# Population attributes
|
5
5
|
attr_accessor :size
|
6
|
+
attr_accessor :elitism
|
6
7
|
attr_accessor :crossover_probability
|
7
8
|
attr_accessor :mutation_probability
|
8
9
|
attr_accessor :fitness_function
|
@@ -13,6 +14,7 @@ module Genetica
|
|
13
14
|
def initialize
|
14
15
|
# Default Population values
|
15
16
|
@size = 20
|
17
|
+
@elitism = 0
|
16
18
|
@crossover_probability = 0.7
|
17
19
|
@mutation_probability = 0.001
|
18
20
|
@fitness_function = nil
|
@@ -33,6 +35,7 @@ module Genetica
|
|
33
35
|
# Generating Population
|
34
36
|
population = Population.new chromosome_population
|
35
37
|
population.alleles = @chromosome_alleles
|
38
|
+
population.elitism = @elitism
|
36
39
|
population.crossover_probability = @crossover_probability
|
37
40
|
population.mutation_probability = @mutation_probability
|
38
41
|
population.fitness_function = @fitness_function
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: genetica
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1.beta.
|
4
|
+
version: 0.0.1.beta.2
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,10 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-11-23 00:00:00.000000000 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
|
-
description: Genetica is a library to create and use
|
16
|
-
using Ruby language.
|
15
|
+
description: Genetica is a library to create and use Genetics Algorithms with Ruby.
|
17
16
|
email: josefranciscocalvo@gmail.com
|
18
17
|
executables: []
|
19
18
|
extensions: []
|