metaheuristic_algorithms 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e93fd3942e1d7831286b0d122330e0ffc9af07f1
4
- data.tar.gz: 056c20d3c4ab43513d6e7c480341c78e2546fe61
3
+ metadata.gz: 71ab576a4800485d9359feeeee21831e1e8cad8b
4
+ data.tar.gz: 8cb7ecfb7825b3a4ab998360605bc205a88756cb
5
5
  SHA512:
6
- metadata.gz: c8d2d130a8f78ac347370344a653c0b81775dfaa489c21d6d2a45092adb723167e3b5be945f3556c88122e05d53ef94d732dec5ec53b1214589ee7324cdddcb6
7
- data.tar.gz: 07cf3a588365188af867a514f8f58af3130c88b3316c4e1cad9bba8f73edb7356a344f46f50ea1c07d081b7360b4bcec79c956782070671850d1f6eb7842a022
6
+ metadata.gz: e3a418400c47d95fe4d9f2fceb1a7bd0ad8854d8ce00de8a34c04d39045748c52adc5a1837b1143607388d6224ebf924d57868b0db2d15f3c65cdd9c0c5f37b5
7
+ data.tar.gz: 11b6e91e6215f1f4fcea3498aa5db60475e46fe1a8e9bde5d11e62c6ba013d9caa5c975fad4a1f871b9414712fe747e1a6b75b28daa383209a44f0bf9a8223c5
data/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ ## metaheuristic_algorithms 0.2.4 (November 9, 2015) ##
2
+
3
+ * Fixed a typo in method name minimum_decision_variable_values in FunctionWrapper's.
4
+
5
+ * Converts the values from methods in FunctionWrapper to Float, so that the algorithms codes work even when FunctionWrapper methods return values in BigDecimal.
6
+
7
+ Note: This can be considered to be incompatible API change. However, at this point, it is not yet considered to be a stable public API. Hence, the MAJOR version is kept to be 0. (See, [Semantic Versioning](http://semver.org/))
data/README.md CHANGED
@@ -59,7 +59,7 @@ Step 1. Create a Function Wrapper for your objective function by extending Metah
59
59
  [5, 5]
60
60
  end
61
61
 
62
- def miminum_decision_variable_values
62
+ def minimum_decision_variable_values
63
63
  [-5, -5]
64
64
  end
65
65
 
@@ -3,10 +3,10 @@ module MetaheuristicAlgorithms
3
3
  module BaseAlgorithmModule
4
4
 
5
5
  def get_decision_variable_value_by_randomization(decision_variable_index)
6
- # @function_wrapper.miminum_decision_variable_values[decision_variable_index]
7
- # + (@function_wrapper.maximum_decision_variable_values[decision_variable_index] - @function_wrapper.miminum_decision_variable_values[decision_variable_index]) * bigdecimal_rand
8
- @function_wrapper.miminum_decision_variable_values[decision_variable_index]
9
- + (@function_wrapper.maximum_decision_variable_values[decision_variable_index] - @function_wrapper.miminum_decision_variable_values[decision_variable_index]) * rand
6
+ # @function_wrapper.minimum_decision_variable_values[decision_variable_index]
7
+ # + (@function_wrapper.maximum_decision_variable_values[decision_variable_index] - @function_wrapper.minimum_decision_variable_values[decision_variable_index]) * bigdecimal_rand
8
+ @function_wrapper.minimum_decision_variable_values[decision_variable_index].to_f
9
+ + (@function_wrapper.maximum_decision_variable_values[decision_variable_index].to_f - @function_wrapper.minimum_decision_variable_values[decision_variable_index].to_f) * rand
10
10
  end
11
11
 
12
12
  # Based on the code by antonakos on http://stackoverflow.com/questions/5825680/code-to-generate-gaussian-normally-distributed-random-numbers-in-ruby
@@ -20,7 +20,7 @@ module MetaheuristicAlgorithms
20
20
  end
21
21
 
22
22
  def update_light_intensity
23
- @light_intensity = @function_wrapper.objective_function_value(@location_coordinates)
23
+ @light_intensity = @function_wrapper.objective_function_value(@location_coordinates).to_f
24
24
  end
25
25
 
26
26
  def deep_clone
@@ -126,10 +126,10 @@ module MetaheuristicAlgorithms
126
126
  end
127
127
 
128
128
  def constrain_within_range(location_coordinate, variable_index)
129
- if location_coordinate < @function_wrapper.miminum_decision_variable_values[variable_index]
130
- @function_wrapper.miminum_decision_variable_values[variable_index]
131
- elsif location_coordinate > @function_wrapper.maximum_decision_variable_values[variable_index]
132
- @function_wrapper.maximum_decision_variable_values[variable_index]
129
+ if location_coordinate < (minimum_decision_variable_values = @function_wrapper.minimum_decision_variable_values[variable_index].to_f)
130
+ minimum_decision_variable_values
131
+ elsif location_coordinate > (maximum_decision_variable_values = @function_wrapper.maximum_decision_variable_values[variable_index].to_f)
132
+ maximum_decision_variable_values
133
133
  else
134
134
  location_coordinate
135
135
  end
@@ -10,9 +10,9 @@ module MetaheuristicAlgorithms
10
10
  end
11
11
 
12
12
  # Return value: Array
13
- def miminum_decision_variable_values
13
+ def minimum_decision_variable_values
14
14
  raise "#{__method__} method must be implemented in the subclass"
15
- end
15
+ end
16
16
 
17
17
  # Input value: Array
18
18
  def objective_function_value(decision_variable_values)
@@ -12,7 +12,7 @@ module MetaheuristicAlgorithms
12
12
  [10]
13
13
  end
14
14
 
15
- def miminum_decision_variable_values
15
+ def minimum_decision_variable_values
16
16
  # [BigDecimal('-10')]
17
17
  [-10]
18
18
  end
@@ -12,7 +12,7 @@ module MetaheuristicAlgorithms
12
12
  [4, 4]
13
13
  end
14
14
 
15
- def miminum_decision_variable_values
15
+ def minimum_decision_variable_values
16
16
  # [BigDecimal('0'), BigDecimal('0')]
17
17
  [0, 0]
18
18
  end
@@ -11,7 +11,7 @@ module MetaheuristicAlgorithms
11
11
  [5, 5]
12
12
  end
13
13
 
14
- def miminum_decision_variable_values
14
+ def minimum_decision_variable_values
15
15
  # [BigDecimal('-5'), BigDecimal('-5')]
16
16
  [-5, -5]
17
17
  end
@@ -9,7 +9,7 @@ module MetaheuristicAlgorithms
9
9
  [5, 5]
10
10
  end
11
11
 
12
- def miminum_decision_variable_values
12
+ def minimum_decision_variable_values
13
13
  # [BigDecimal('-5'), BigDecimal('-5')]
14
14
  [-5, -5]
15
15
  end
@@ -82,7 +82,7 @@ module MetaheuristicAlgorithms
82
82
  get_decision_variable_value_by_randomization(variable_index)
83
83
  end
84
84
  @population << decision_variable_values
85
- @population_fitness << @function_wrapper.objective_function_value(decision_variable_values)
85
+ @population_fitness << @function_wrapper.objective_function_value(decision_variable_values).to_f
86
86
  end
87
87
 
88
88
  end
@@ -126,8 +126,8 @@ module MetaheuristicAlgorithms
126
126
 
127
127
  end
128
128
 
129
- new_crossover_pair_1_fitness = @function_wrapper.objective_function_value(crossover_pair_1_decimal_values)
130
- new_crossover_pair_2_fitness = @function_wrapper.objective_function_value(crossover_pair_2_decimal_values)
129
+ new_crossover_pair_1_fitness = @function_wrapper.objective_function_value(crossover_pair_1_decimal_values).to_f
130
+ new_crossover_pair_2_fitness = @function_wrapper.objective_function_value(crossover_pair_2_decimal_values).to_f
131
131
 
132
132
  if new_crossover_pair_1_fitness > @population_fitness[crossover_pair_1_index] &&
133
133
  new_crossover_pair_2_fitness > @population_fitness[crossover_pair_2_index]
@@ -176,7 +176,7 @@ module MetaheuristicAlgorithms
176
176
 
177
177
  end
178
178
 
179
- new_individual_fitness = @function_wrapper.objective_function_value(decimal_values)
179
+ new_individual_fitness = @function_wrapper.objective_function_value(decimal_values).to_f
180
180
 
181
181
  if new_individual_fitness > @population_fitness[individual_index]
182
182
 
@@ -193,7 +193,7 @@ module MetaheuristicAlgorithms
193
193
  end
194
194
 
195
195
  def in_the_range?(decimal_value, variable_index)
196
- decimal_value >= @function_wrapper.miminum_decision_variable_values[variable_index] && decimal_value <= @function_wrapper.maximum_decision_variable_values[variable_index]
196
+ decimal_value >= @function_wrapper.minimum_decision_variable_values[variable_index].to_f && decimal_value <= @function_wrapper.maximum_decision_variable_values[variable_index].to_f
197
197
  end
198
198
 
199
199
  def deep_clone_population
@@ -50,7 +50,7 @@ module MetaheuristicAlgorithms
50
50
 
51
51
  # if bigdecimal_rand < pitch_adjusting_rate
52
52
  if rand < pitch_adjusting_rate
53
- pitch_adjusting = (@function_wrapper.maximum_decision_variable_values[variable_index] - @function_wrapper.miminum_decision_variable_values[variable_index]) / pitch_adjusting_range
53
+ pitch_adjusting = (@function_wrapper.maximum_decision_variable_values[variable_index].to_f - @function_wrapper.minimum_decision_variable_values[variable_index].to_f) / pitch_adjusting_range
54
54
  # decision_variable_value = decision_variable_value + pitch_adjusting * (bigdecimal_rand - BigDecimal('0.5'))
55
55
  decision_variable_value = decision_variable_value + pitch_adjusting * (rand -0.5)
56
56
  end
@@ -60,7 +60,7 @@ module MetaheuristicAlgorithms
60
60
 
61
61
  end
62
62
 
63
- best_function_value = @function_wrapper.objective_function_value(decision_variable_values)
63
+ best_function_value = @function_wrapper.objective_function_value(decision_variable_values).to_f
64
64
 
65
65
  # TODO: Evaluate this logic. It appears that best_function_value_harmony_memory only needs to store the max best_function_value and the corresponding harmony_memory_random_index of harmony_memory.
66
66
  # The simpler implementation for MatLab doesn't seem to be a good implementation in Ruby here.
@@ -96,7 +96,7 @@ module MetaheuristicAlgorithms
96
96
  end
97
97
 
98
98
  @harmony_memory << decision_variable_values
99
- @best_function_value_harmony_memory << @function_wrapper.objective_function_value(decision_variable_values)
99
+ @best_function_value_harmony_memory << @function_wrapper.objective_function_value(decision_variable_values).to_f
100
100
 
101
101
  end
102
102
 
@@ -33,7 +33,7 @@ module MetaheuristicAlgorithms
33
33
  number_of_iterations.times do |iteration|
34
34
 
35
35
  function_values = @particle_locations.map do |particle_location|
36
- @function_wrapper.objective_function_value(particle_location)
36
+ @function_wrapper.objective_function_value(particle_location).to_f
37
37
  end
38
38
 
39
39
  best_function_value = function_values.send(@objective_method_name)
@@ -69,10 +69,10 @@ module MetaheuristicAlgorithms
69
69
  (0...@number_of_variables).map do |variable_index|
70
70
 
71
71
  # The value out-of-range in order to enter while loop
72
- # new_particle_location_coordinate = @function_wrapper.miminum_decision_variable_values[variable_index] - BigDecimal('1')
73
- new_particle_location_coordinate = @function_wrapper.miminum_decision_variable_values[variable_index] - 1
72
+ # new_particle_location_coordinate = @function_wrapper.minimum_decision_variable_values[variable_index] - BigDecimal('1')
73
+ new_particle_location_coordinate = @function_wrapper.minimum_decision_variable_values[variable_index].to_f - 1
74
74
 
75
- while new_particle_location_coordinate < @function_wrapper.miminum_decision_variable_values[variable_index] || new_particle_location_coordinate > @function_wrapper.maximum_decision_variable_values[variable_index]
75
+ while new_particle_location_coordinate < @function_wrapper.minimum_decision_variable_values[variable_index].to_f || new_particle_location_coordinate > @function_wrapper.maximum_decision_variable_values[variable_index].to_f
76
76
  # new_particle_location_coordinate = (BigDecimal('1') - social_coefficient) * particle_location[variable_index] + social_coefficient * global_best_position[variable_index] + random_variable_coefficient * (bigdecimal_rand - BigDecimal('0.5'))
77
77
  new_particle_location_coordinate = (1 - social_coefficient) * particle_location[variable_index] + social_coefficient * global_best_position[variable_index] + random_variable_coefficient * (rand - 0.5)
78
78
  end
@@ -51,9 +51,9 @@ module MetaheuristicAlgorithms
51
51
  number_of_acceptances = 0
52
52
  total_evaluations = 0
53
53
 
54
- initial_estimates = @function_wrapper.initial_decision_variable_value_estimates
54
+ initial_estimates = @function_wrapper.initial_decision_variable_value_estimates.map(&:to_f)
55
55
 
56
- best_evaluation = @function_wrapper.objective_function_value(initial_estimates)
56
+ best_evaluation = @function_wrapper.objective_function_value(initial_estimates).to_f
57
57
 
58
58
  best_solution = initial_estimates
59
59
 
@@ -72,7 +72,7 @@ module MetaheuristicAlgorithms
72
72
  end
73
73
 
74
74
  new_estimates = estimate_solution(initial_estimates, standard_diviation_for_estimation)
75
- new_evaluation = @function_wrapper.objective_function_value(new_estimates)
75
+ new_evaluation = @function_wrapper.objective_function_value(new_estimates).to_f
76
76
 
77
77
  evaluation_delta = ratio_of_energy_delta_over_evaluation_delta * (new_evaluation - best_evaluation)
78
78
 
@@ -107,10 +107,10 @@ module MetaheuristicAlgorithms
107
107
  (0...@number_of_variables).map do |variable_index|
108
108
 
109
109
  # The value out-of-range in order to enter while loop
110
- # new_estimate = @function_wrapper.miminum_decision_variable_values[variable_index] - BigDecimal('1')
111
- new_estimate = @function_wrapper.miminum_decision_variable_values[variable_index] - 1
110
+ # new_estimate = @function_wrapper.minimum_decision_variable_values[variable_index] - BigDecimal('1')
111
+ new_estimate = @function_wrapper.minimum_decision_variable_values[variable_index].to_f - 1
112
112
 
113
- while new_estimate < @function_wrapper.miminum_decision_variable_values[variable_index] || new_estimate > @function_wrapper.maximum_decision_variable_values[variable_index]
113
+ while new_estimate < @function_wrapper.minimum_decision_variable_values[variable_index].to_f || new_estimate > @function_wrapper.maximum_decision_variable_values[variable_index].to_f
114
114
 
115
115
  # MatLab example code uses newGuess = initialGuess + rand(1,2) * randn;
116
116
  # But in our case, the value range is different.
@@ -1,3 +1,3 @@
1
1
  module MetaheuristicAlgorithms
2
- VERSION = "0.2.3"
2
+ VERSION = "0.2.4"
3
3
  end
@@ -16,7 +16,7 @@ module MetaheuristicAlgorithms
16
16
  number_of_virtual_bees = number_of_virtual_bees.to_i unless number_of_virtual_bees.kind_of?(Integer)
17
17
  number_of_foraging_explorations = number_of_foraging_explorations.to_i unless number_of_foraging_explorations.kind_of?(Integer)
18
18
 
19
- solution_estimates = @function_wrapper.initial_decision_variable_value_estimates
19
+ solution_estimates = @function_wrapper.initial_decision_variable_value_estimates.map(&:to_f)
20
20
 
21
21
 
22
22
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metaheuristic_algorithms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tadatoshi Takahashi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-04 00:00:00.000000000 Z
11
+ date: 2015-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -64,6 +64,7 @@ files:
64
64
  - ".ruby-gemset"
65
65
  - ".ruby-version"
66
66
  - ".travis.yml"
67
+ - CHANGELOG.md
67
68
  - CODE_OF_CONDUCT.md
68
69
  - Gemfile
69
70
  - LICENSE.txt