|
1 | 1 | require "test_helper"
|
2 |
| -require "genetic/algorithm/optimiser" |
| 2 | +require "genetic/algorithm/optimizer" |
3 | 3 |
|
4 |
| -class Genetic::Algorithm::OptimiserTest < Minitest::Test |
| 4 | +class Genetic::Algorithm::OptimizerTest < Minitest::Test |
5 | 5 | def test_it_initialize_population
|
6 |
| - ga_optimiser = Genetic::Algorithm::Optimiser.new |
7 |
| - ga_optimiser.population_size = population_size |
8 |
| - ga_optimiser.genes_generator = method(:genes_generator) |
9 |
| - ga_optimiser.fitness_calculator = method(:fitness_calculator) |
| 6 | + ga_optimizer = Genetic::Algorithm::Optimizer.new |
| 7 | + ga_optimizer.population_size = population_size |
| 8 | + ga_optimizer.genes_generator = method(:genes_generator) |
| 9 | + ga_optimizer.fitness_calculator = method(:fitness_calculator) |
10 | 10 |
|
11 |
| - test_population = ga_optimiser.send(:initialize_population) |
| 11 | + test_population = ga_optimizer.send(:initialize_population) |
12 | 12 |
|
13 | 13 | assert(test_population.length == population_size)
|
14 | 14 | assert(test_population.map(&:fitness).inject(:+) >= population_size)
|
15 | 15 | end
|
16 | 16 |
|
17 | 17 | def test_it_do_natural_selection
|
18 |
| - ga_optimiser = Genetic::Algorithm::Optimiser.new |
19 |
| - ga_optimiser.crossover_probability = 0.7 |
20 |
| - ga_optimiser.mutation_probability = 0.1 |
21 |
| - ga_optimiser.population_size = population_size |
22 |
| - ga_optimiser.genes_generator = method(:genes_generator) |
23 |
| - ga_optimiser.fitness_calculator = method(:fitness_calculator) |
24 |
| - first_population = ga_optimiser.send(:initialize_population) |
| 18 | + ga_optimizer = Genetic::Algorithm::Optimizer.new |
| 19 | + ga_optimizer.crossover_probability = 0.7 |
| 20 | + ga_optimizer.mutation_probability = 0.5 |
| 21 | + ga_optimizer.population_size = population_size |
| 22 | + ga_optimizer.genes_generator = method(:genes_generator) |
| 23 | + ga_optimizer.fitness_calculator = method(:fitness_calculator) |
| 24 | + first_population = ga_optimizer.send(:initialize_population) |
25 | 25 | last_population = first_population
|
26 | 26 |
|
27 |
| - 20.times do |
28 |
| - last_population = ga_optimiser.send(:do_natural_selection, last_population) |
| 27 | + 100.times do |
| 28 | + last_population = ga_optimizer.send(:do_natural_selection, last_population) |
29 | 29 | end
|
30 | 30 |
|
31 | 31 | assert(first_population.length == population_size)
|
32 | 32 | assert(last_population.length == population_size)
|
33 | 33 |
|
| 34 | + assert(first_population != last_population) |
34 | 35 | first_gen_fitness = first_population.map(&:fitness).inject(:+)
|
35 | 36 | last_gen_fitness = last_population.map(&:fitness).inject(:+)
|
36 |
| - assert(first_gen_fitness < last_gen_fitness) |
| 37 | + assert(first_gen_fitness != last_gen_fitness) |
37 | 38 | end
|
38 | 39 |
|
39 | 40 | def test_mate_with_0_proability_returns_same_chromosomes
|
40 |
| - ga_optimiser = Genetic::Algorithm::Optimiser.new |
41 |
| - ga_optimiser.crossover_probability = 0.0 |
42 |
| - ga_optimiser.mutation_probability = 0.0 |
43 |
| - ga_optimiser.genes_generator = method(:genes_generator) |
44 |
| - ga_optimiser.fitness_calculator = method(:fitness_calculator) |
| 41 | + ga_optimizer = Genetic::Algorithm::Optimizer.new |
| 42 | + ga_optimizer.crossover_probability = 0.0 |
| 43 | + ga_optimizer.mutation_probability = 0.0 |
| 44 | + ga_optimizer.genes_generator = method(:genes_generator) |
| 45 | + ga_optimizer.fitness_calculator = method(:fitness_calculator) |
45 | 46 |
|
46 | 47 | parent1 = Genetic::Algorithm::Chromosome.new(genes_generator, method(:fitness_calculator))
|
47 | 48 | parent2 = Genetic::Algorithm::Chromosome.new(genes_generator, method(:fitness_calculator))
|
48 |
| - child1, child2 = ga_optimiser.send(:mate, parent1, parent2) |
| 49 | + child1, child2 = ga_optimizer.send(:mate, parent1, parent2) |
49 | 50 |
|
50 | 51 | assert(parent1.genes != parent2.genes)
|
51 | 52 | assert(child1.genes == parent1.genes)
|
52 | 53 | assert(child2.genes == parent2.genes)
|
53 | 54 | end
|
54 | 55 |
|
55 | 56 | def test_mate_crossover
|
56 |
| - ga_optimiser = Genetic::Algorithm::Optimiser.new |
57 |
| - ga_optimiser.crossover_probability = 1.0 |
58 |
| - ga_optimiser.mutation_probability = 0.0 |
59 |
| - ga_optimiser.genes_generator = method(:genes_generator) |
60 |
| - ga_optimiser.fitness_calculator = method(:fitness_calculator) |
| 57 | + ga_optimizer = Genetic::Algorithm::Optimizer.new |
| 58 | + ga_optimizer.crossover_probability = 1.0 |
| 59 | + ga_optimizer.mutation_probability = 0.0 |
| 60 | + ga_optimizer.genes_generator = method(:genes_generator) |
| 61 | + ga_optimizer.fitness_calculator = method(:fitness_calculator) |
61 | 62 |
|
62 | 63 | parent1 = Genetic::Algorithm::Chromosome.new(genes_generator, method(:fitness_calculator))
|
63 | 64 | parent2 = Genetic::Algorithm::Chromosome.new(genes_generator, method(:fitness_calculator))
|
64 |
| - child1, child2 = ga_optimiser.send(:mate, parent1, parent2) |
| 65 | + child1, child2 = ga_optimizer.send(:mate, parent1, parent2) |
65 | 66 |
|
66 | 67 | assert(parent1.genes != parent2.genes)
|
67 | 68 | assert(child1.genes != parent1.genes)
|
68 | 69 | assert(child2.genes != parent2.genes)
|
69 | 70 | end
|
70 | 71 |
|
71 | 72 | def test_mate_make_one_mutation_per_child
|
72 |
| - ga_optimiser = Genetic::Algorithm::Optimiser.new |
73 |
| - ga_optimiser.crossover_probability = 0.0 |
74 |
| - ga_optimiser.mutation_probability = 1.0 |
75 |
| - ga_optimiser.genes_generator = method(:genes_generator) |
76 |
| - ga_optimiser.fitness_calculator = method(:fitness_calculator) |
| 73 | + ga_optimizer = Genetic::Algorithm::Optimizer.new |
| 74 | + ga_optimizer.crossover_probability = 0.0 |
| 75 | + ga_optimizer.mutation_probability = 1.0 |
| 76 | + ga_optimizer.genes_generator = method(:genes_generator) |
| 77 | + ga_optimizer.fitness_calculator = method(:fitness_calculator) |
77 | 78 |
|
78 | 79 | parent1 = Genetic::Algorithm::Chromosome.new(genes_generator, method(:fitness_calculator))
|
79 | 80 | parent2 = Genetic::Algorithm::Chromosome.new(genes_generator, method(:fitness_calculator))
|
80 |
| - child1, child2 = ga_optimiser.send(:mate, parent1, parent2) |
| 81 | + child1, child2 = ga_optimizer.send(:mate, parent1, parent2) |
81 | 82 |
|
82 | 83 | assert(parent1.genes != parent2.genes)
|
83 | 84 | assert(child1.genes != parent1.genes)
|
|
0 commit comments