Class: MetaheuristicAlgorithms::FireflyAlgorithm

Inherits:
Object
  • Object
show all
Includes:
BaseAlgorithmModule, Helper
Defined in:
lib/metaheuristic_algorithms/firefly_algorithm.rb

Defined Under Namespace

Classes: Firefly

Instance Method Summary collapse

Methods included from Helper

#bigdecimal_rand

Methods included from BaseAlgorithmModule

#gaussian, #get_decision_variable_value_by_randomization

Constructor Details

#initialize(function_wrapper, number_of_variables: 1, objective: :maximization) ⇒ FireflyAlgorithm

Returns a new instance of FireflyAlgorithm.



34
35
36
37
38
39
40
41
42
43
# File 'lib/metaheuristic_algorithms/firefly_algorithm.rb', line 34

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_by
                             when :minimization
                               :min_by
                           end
end

Instance Method Details

#search(number_of_fireflies: 10, maximun_generation: 10, randomization_parameter_alpha: 0.2, absorption_coefficient_gamma: 1.0) ⇒ Object

def search(number_of_fireflies: 10, maximun_generation: 10, randomization_parameter_alpha: BigDecimal(‘0.2’), absorption_coefficient_gamma: BigDecimal(‘1.0’))



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/metaheuristic_algorithms/firefly_algorithm.rb', line 46

def search(number_of_fireflies: 10, maximun_generation: 10, randomization_parameter_alpha: 0.2, absorption_coefficient_gamma: 1.0)

  number_of_fireflies = number_of_fireflies.to_i unless number_of_fireflies.kind_of?(Integer)
  maximun_generation = maximun_generation.to_i unless maximun_generation.kind_of?(Integer)
  # randomization_parameter_alpha = BigDecimal(randomization_parameter_alpha.to_s) unless randomization_parameter_alpha.kind_of?(BigDecimal)
  # absorption_coefficient_gamma = BigDecimal(absorption_coefficient_gamma.to_s) unless absorption_coefficient_gamma.kind_of?(BigDecimal)
  randomization_parameter_alpha = randomization_parameter_alpha.to_f unless randomization_parameter_alpha.kind_of?(Float)
  absorption_coefficient_gamma = absorption_coefficient_gamma.to_f unless absorption_coefficient_gamma.kind_of?(Float)

  initialize_fireflies(number_of_fireflies)

  maximun_generation.times do |generation|

    @fireflies.each { |firefly| firefly.update_light_intensity }

    move_fireflies(randomization_parameter_alpha, absorption_coefficient_gamma)

  end

  solution_firefly = @fireflies.send(@objective_method_name) { |firefly| firefly.light_intensity }

  { best_decision_variable_values: solution_firefly.location_coordinates, best_objective_function_value: solution_firefly.light_intensity }

end