Class: MetaheuristicAlgorithms::GeneticAlgorithm
- Inherits:
-
Object
- Object
- MetaheuristicAlgorithms::GeneticAlgorithm
- Includes:
- BaseAlgorithmModule, Helper
- Defined in:
- lib/metaheuristic_algorithms/genetic_algorithm.rb
Instance Method Summary collapse
-
#initialize(function_wrapper, number_of_variables: 1, objective: :maximization) ⇒ GeneticAlgorithm
constructor
A new instance of GeneticAlgorithm.
-
#search(population_size: 20, maximum_number_of_generations: 100, number_of_mutation_sites: 2, crossover_probability: 0.95, mutation_probability: 0.05) ⇒ Object
def search(population_size: 20, maximum_number_of_generations: 100, number_of_mutation_sites: BigDecimal(‘2’), crossover_probability: BigDecimal(‘0.95’), mutation_probability: BigDecimal(‘0.05’)).
Methods included from Helper
Methods included from BaseAlgorithmModule
#gaussian, #get_decision_variable_value_by_randomization
Constructor Details
#initialize(function_wrapper, number_of_variables: 1, objective: :maximization) ⇒ GeneticAlgorithm
Returns a new instance of GeneticAlgorithm.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/metaheuristic_algorithms/genetic_algorithm.rb', line 7 def initialize(function_wrapper, number_of_variables: 1, objective: :maximization) @function_wrapper = function_wrapper @number_of_variables = number_of_variables @objective_method_name = case objective when :maximization :max when :minimization :min end ## Decided to use decimal number representation and convert it to binary number by unpack method ## because it is difficult to initialize variable within the given range # @string_length_in_bits = 16 end |
Instance Method Details
#search(population_size: 20, maximum_number_of_generations: 100, number_of_mutation_sites: 2, crossover_probability: 0.95, mutation_probability: 0.05) ⇒ Object
def search(population_size: 20, maximum_number_of_generations: 100, number_of_mutation_sites: BigDecimal(‘2’), crossover_probability: BigDecimal(‘0.95’), mutation_probability: BigDecimal(‘0.05’))
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/metaheuristic_algorithms/genetic_algorithm.rb', line 23 def search(population_size: 20, maximum_number_of_generations: 100, number_of_mutation_sites: 2, crossover_probability: 0.95, mutation_probability: 0.05) population_size = population_size.to_i unless population_size.kind_of?(Integer) maximum_number_of_generations = maximum_number_of_generations.to_i unless maximum_number_of_generations.kind_of?(Integer) # number_of_mutation_sites = BigDecimal(number_of_mutation_sites.to_s) unless number_of_mutation_sites.kind_of?(BigDecimal) # crossover_probability = BigDecimal(crossover_probability.to_s) unless crossover_probability.kind_of?(BigDecimal) # mutation_probability = BigDecimal(mutation_probability.to_s) unless mutation_probability.kind_of?(BigDecimal) number_of_mutation_sites = number_of_mutation_sites.to_i unless number_of_mutation_sites.kind_of?(Integer) crossover_probability = crossover_probability.to_f unless crossover_probability.kind_of?(Float) mutation_probability = mutation_probability.to_f unless mutation_probability.kind_of?(Float) initialize_population(population_size) maximum_number_of_generations.times do |generation_index| @population_copy = deep_clone_population population_size.times do |individual_index| # if bigdecimal_rand < crossover_probability if rand < crossover_probability # Crossover pair: crossover_pair_1_index = generate_random_index(population_size) crossover_pair_2_index = generate_random_index(population_size) crossover(crossover_pair_1_index, crossover_pair_2_index) end # if bigdecimal_rand < mutation_probability if rand < mutation_probability mutation_individual_index = generate_random_index(population_size) mutate(mutation_individual_index, number_of_mutation_sites) end end end objective_function_value = @population_fitness.send(@objective_method_name) decision_variable_values = @population[@population_fitness.index(objective_function_value)] { best_decision_variable_values: decision_variable_values, best_objective_function_value: objective_function_value } end |