evosynth 0.1.0

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.
Files changed (390) hide show
  1. data/INSTALL +74 -0
  2. data/LICENSE +22 -0
  3. data/README +57 -0
  4. data/Rakefile +132 -0
  5. data/TODO +88 -0
  6. data/docs/FEATURES +111 -0
  7. data/docs/rdoc/classes/EvoSynth.html +2643 -0
  8. data/docs/rdoc/classes/EvoSynth/Adjustments.html +119 -0
  9. data/docs/rdoc/classes/EvoSynth/Adjustments/AdaptiveAdjustment.html +264 -0
  10. data/docs/rdoc/classes/EvoSynth/Adjustments/PredifinedAdjustment.html +235 -0
  11. data/docs/rdoc/classes/EvoSynth/ArrayGenome.html +313 -0
  12. data/docs/rdoc/classes/EvoSynth/BinaryGenome.html +518 -0
  13. data/docs/rdoc/classes/EvoSynth/Decoder.html +286 -0
  14. data/docs/rdoc/classes/EvoSynth/Evaluator.html +466 -0
  15. data/docs/rdoc/classes/EvoSynth/Evolvers.html +469 -0
  16. data/docs/rdoc/classes/EvoSynth/Evolvers/AdaptiveES.html +448 -0
  17. data/docs/rdoc/classes/EvoSynth/Evolvers/BalancedCoevolutionary.html +439 -0
  18. data/docs/rdoc/classes/EvoSynth/Evolvers/DerandomizedES.html +450 -0
  19. data/docs/rdoc/classes/EvoSynth/Evolvers/Evolver.html +125 -0
  20. data/docs/rdoc/classes/EvoSynth/Evolvers/GeneticAlgorithm.html +467 -0
  21. data/docs/rdoc/classes/EvoSynth/Evolvers/Hillclimber.html +343 -0
  22. data/docs/rdoc/classes/EvoSynth/Evolvers/LocalSearch.html +422 -0
  23. data/docs/rdoc/classes/EvoSynth/Evolvers/LocalSearch/GreatDelugeAcceptance.html +287 -0
  24. data/docs/rdoc/classes/EvoSynth/Evolvers/LocalSearch/HillclimberAcceptance.html +197 -0
  25. data/docs/rdoc/classes/EvoSynth/Evolvers/LocalSearch/RecordToRecordTravelAcceptance.html +296 -0
  26. data/docs/rdoc/classes/EvoSynth/Evolvers/LocalSearch/SimulatedAnnealingAcceptance.html +286 -0
  27. data/docs/rdoc/classes/EvoSynth/Evolvers/LocalSearch/ThresholdAcceptance.html +287 -0
  28. data/docs/rdoc/classes/EvoSynth/Evolvers/MemeticAlgorithm.html +441 -0
  29. data/docs/rdoc/classes/EvoSynth/Evolvers/PopulationHillclimber.html +375 -0
  30. data/docs/rdoc/classes/EvoSynth/Evolvers/ProfileUsingEvolver.html +205 -0
  31. data/docs/rdoc/classes/EvoSynth/Evolvers/RoundRobinCoevolutionary.html +383 -0
  32. data/docs/rdoc/classes/EvoSynth/Evolvers/RunnableEvolver.html +279 -0
  33. data/docs/rdoc/classes/EvoSynth/Evolvers/RunnableEvolver/Goal.html +193 -0
  34. data/docs/rdoc/classes/EvoSynth/Evolvers/SelfAdaptiveES.html +394 -0
  35. data/docs/rdoc/classes/EvoSynth/Evolvers/SteadyStateGA.html +390 -0
  36. data/docs/rdoc/classes/EvoSynth/GlobalRecombinations.html +119 -0
  37. data/docs/rdoc/classes/EvoSynth/GlobalRecombinations/GlobalArithmeticCrossover.html +204 -0
  38. data/docs/rdoc/classes/EvoSynth/GlobalRecombinations/GlobalUniformCrossover.html +203 -0
  39. data/docs/rdoc/classes/EvoSynth/Individual.html +561 -0
  40. data/docs/rdoc/classes/EvoSynth/MaximizingIndividual.html +266 -0
  41. data/docs/rdoc/classes/EvoSynth/MetaOperators.html +149 -0
  42. data/docs/rdoc/classes/EvoSynth/MetaOperators/ConditionalCombinedOperator.html +278 -0
  43. data/docs/rdoc/classes/EvoSynth/MetaOperators/ProportionalCombinedOperator.html +285 -0
  44. data/docs/rdoc/classes/EvoSynth/MetaOperators/SequentialCombinedOperator.html +290 -0
  45. data/docs/rdoc/classes/EvoSynth/MinimizingIndividual.html +266 -0
  46. data/docs/rdoc/classes/EvoSynth/Mutations.html +251 -0
  47. data/docs/rdoc/classes/EvoSynth/Mutations/BinaryMutation.html +336 -0
  48. data/docs/rdoc/classes/EvoSynth/Mutations/EfficientBinaryMutation.html +345 -0
  49. data/docs/rdoc/classes/EvoSynth/Mutations/ExchangeMutation.html +320 -0
  50. data/docs/rdoc/classes/EvoSynth/Mutations/Functions.html +160 -0
  51. data/docs/rdoc/classes/EvoSynth/Mutations/GaussMutation.html +311 -0
  52. data/docs/rdoc/classes/EvoSynth/Mutations/Identity.html +220 -0
  53. data/docs/rdoc/classes/EvoSynth/Mutations/InversionMutation.html +231 -0
  54. data/docs/rdoc/classes/EvoSynth/Mutations/MixingMutation.html +233 -0
  55. data/docs/rdoc/classes/EvoSynth/Mutations/OneGeneFlipping.html +295 -0
  56. data/docs/rdoc/classes/EvoSynth/Mutations/SelfAdaptiveGaussMutation.html +347 -0
  57. data/docs/rdoc/classes/EvoSynth/Mutations/ShiftingMutation.html +229 -0
  58. data/docs/rdoc/classes/EvoSynth/Mutations/UniformRealMutation.html +264 -0
  59. data/docs/rdoc/classes/EvoSynth/Output.html +212 -0
  60. data/docs/rdoc/classes/EvoSynth/Output/CSVExporter.html +211 -0
  61. data/docs/rdoc/classes/EvoSynth/Output/ConsoleWriter.html +194 -0
  62. data/docs/rdoc/classes/EvoSynth/Output/GnuPlotExporter.html +235 -0
  63. data/docs/rdoc/classes/EvoSynth/Output/GruffExporter.html +219 -0
  64. data/docs/rdoc/classes/EvoSynth/Output/Logger.html +345 -0
  65. data/docs/rdoc/classes/EvoSynth/Population.html +430 -0
  66. data/docs/rdoc/classes/EvoSynth/Problems.html +159 -0
  67. data/docs/rdoc/classes/EvoSynth/Problems/BinaryBenchmarkFuntions.html +258 -0
  68. data/docs/rdoc/classes/EvoSynth/Problems/FloatBenchmarkFuntions.html +406 -0
  69. data/docs/rdoc/classes/EvoSynth/Problems/GraphColouring.html +265 -0
  70. data/docs/rdoc/classes/EvoSynth/Problems/TSP.html +327 -0
  71. data/docs/rdoc/classes/EvoSynth/Profile.html +324 -0
  72. data/docs/rdoc/classes/EvoSynth/Recombinations.html +251 -0
  73. data/docs/rdoc/classes/EvoSynth/Recombinations/ArithmeticCrossover.html +286 -0
  74. data/docs/rdoc/classes/EvoSynth/Recombinations/EdgeRecombination.html +203 -0
  75. data/docs/rdoc/classes/EvoSynth/Recombinations/Identity.html +192 -0
  76. data/docs/rdoc/classes/EvoSynth/Recombinations/KPointCrossover.html +286 -0
  77. data/docs/rdoc/classes/EvoSynth/Recombinations/OnePointCrossover.html +211 -0
  78. data/docs/rdoc/classes/EvoSynth/Recombinations/OrderedRecombination.html +206 -0
  79. data/docs/rdoc/classes/EvoSynth/Recombinations/PartiallyMappedCrossover.html +206 -0
  80. data/docs/rdoc/classes/EvoSynth/Recombinations/UniformCrossover.html +208 -0
  81. data/docs/rdoc/classes/EvoSynth/Selections.html +174 -0
  82. data/docs/rdoc/classes/EvoSynth/Selections/FitnessProportionalSelection.html +206 -0
  83. data/docs/rdoc/classes/EvoSynth/Selections/Identity.html +200 -0
  84. data/docs/rdoc/classes/EvoSynth/Selections/NStageTournamentSelection.html +273 -0
  85. data/docs/rdoc/classes/EvoSynth/Selections/RandomSelection.html +192 -0
  86. data/docs/rdoc/classes/EvoSynth/Selections/RouletteWheelSelection.html +212 -0
  87. data/docs/rdoc/classes/EvoSynth/Selections/SelectBest.html +206 -0
  88. data/docs/rdoc/classes/EvoSynth/Selections/TournamentSelection.html +274 -0
  89. data/docs/rdoc/classes/Examples.html +268 -0
  90. data/docs/rdoc/classes/Examples/Ants.html +198 -0
  91. data/docs/rdoc/classes/Examples/Ants/AntMutation.html +381 -0
  92. data/docs/rdoc/classes/Examples/Ants/Pheromon.html +256 -0
  93. data/docs/rdoc/classes/Examples/CCGAExample.html +305 -0
  94. data/docs/rdoc/classes/Examples/CCGAExample/CCGA2BenchmarkEvaluator.html +165 -0
  95. data/docs/rdoc/classes/Examples/CCGAExample/CCGABenchmarkEvaluator.html +242 -0
  96. data/docs/rdoc/classes/Examples/CCGAExample/CCGAIndividual.html +181 -0
  97. data/docs/rdoc/classes/Examples/CMBExample.html +215 -0
  98. data/docs/rdoc/classes/Examples/CMBExample/CMBEvaluator.html +212 -0
  99. data/docs/rdoc/classes/Examples/EsExample.html +270 -0
  100. data/docs/rdoc/classes/Examples/EsExample/BenchmarkEvaluator.html +162 -0
  101. data/docs/rdoc/classes/Examples/Exporter.html +208 -0
  102. data/docs/rdoc/classes/Examples/Exporter/ExporterEvaluator.html +196 -0
  103. data/docs/rdoc/classes/Examples/GraphColouring.html +199 -0
  104. data/docs/rdoc/classes/Examples/Hacking.html +147 -0
  105. data/docs/rdoc/classes/Examples/Hacking/HackingEvaluator.html +169 -0
  106. data/docs/rdoc/classes/Examples/LocalSearch.html +294 -0
  107. data/docs/rdoc/classes/Examples/LocalSearch/LocalSearchEvaluator.html +198 -0
  108. data/docs/rdoc/classes/Examples/MaxOnes.html +187 -0
  109. data/docs/rdoc/classes/Examples/MaxOnes/MaxOnesEvaluator.html +170 -0
  110. data/docs/rdoc/classes/Examples/Partitionproblem.html +201 -0
  111. data/docs/rdoc/classes/Examples/Partitionproblem/PartitionEvaluator.html +164 -0
  112. data/docs/rdoc/classes/Examples/Partitionproblem/PartitionIndividual.html +334 -0
  113. data/docs/rdoc/classes/Examples/Partitionproblem/PartitionMutation.html +199 -0
  114. data/docs/rdoc/classes/Examples/Partitionproblem/Testdata.html +294 -0
  115. data/docs/rdoc/classes/Examples/SPk.html +139 -0
  116. data/docs/rdoc/classes/Examples/SPk/SPkFitnessEvaluator.html +299 -0
  117. data/docs/rdoc/classes/Examples/TSP.html +187 -0
  118. data/docs/rdoc/created.rid +1 -0
  119. data/docs/rdoc/files/INSTALL.html +253 -0
  120. data/docs/rdoc/files/LICENSE.html +119 -0
  121. data/docs/rdoc/files/README.html +235 -0
  122. data/docs/rdoc/files/docs/FEATURES.html +428 -0
  123. data/docs/rdoc/files/examples/ants_rb.html +133 -0
  124. data/docs/rdoc/files/examples/ccga_example_rb.html +129 -0
  125. data/docs/rdoc/files/examples/cmb_example_rb.html +129 -0
  126. data/docs/rdoc/files/examples/evolution_strategies_rb.html +129 -0
  127. data/docs/rdoc/files/examples/exporter_rb.html +129 -0
  128. data/docs/rdoc/files/examples/graph_colouring_rb.html +129 -0
  129. data/docs/rdoc/files/examples/hacking_rb.html +129 -0
  130. data/docs/rdoc/files/examples/local_search_rb.html +129 -0
  131. data/docs/rdoc/files/examples/max_ones_rb.html +129 -0
  132. data/docs/rdoc/files/examples/partition_rb.html +131 -0
  133. data/docs/rdoc/files/examples/spk_rb.html +129 -0
  134. data/docs/rdoc/files/examples/tsp_rb.html +131 -0
  135. data/docs/rdoc/files/lib/evosynth/core/array_genome_rb.html +119 -0
  136. data/docs/rdoc/files/lib/evosynth/core/binary_genome_rb.html +119 -0
  137. data/docs/rdoc/files/lib/evosynth/core/evaluator_rb.html +129 -0
  138. data/docs/rdoc/files/lib/evosynth/core/individual_rb.html +119 -0
  139. data/docs/rdoc/files/lib/evosynth/core/maximizing_individual_rb.html +119 -0
  140. data/docs/rdoc/files/lib/evosynth/core/minimizing_individual_rb.html +119 -0
  141. data/docs/rdoc/files/lib/evosynth/core/population_rb.html +119 -0
  142. data/docs/rdoc/files/lib/evosynth/core/profile_rb.html +119 -0
  143. data/docs/rdoc/files/lib/evosynth/core/randomizer_rb.html +119 -0
  144. data/docs/rdoc/files/lib/evosynth/core_rb.html +145 -0
  145. data/docs/rdoc/files/lib/evosynth/decoder/binary_to_real_rb.html +119 -0
  146. data/docs/rdoc/files/lib/evosynth/decoder/gray_rb.html +119 -0
  147. data/docs/rdoc/files/lib/evosynth/decoder_rb.html +131 -0
  148. data/docs/rdoc/files/lib/evosynth/evolvers/basic/genetic_algorithm_rb.html +119 -0
  149. data/docs/rdoc/files/lib/evosynth/evolvers/basic/hillclimber_rb.html +119 -0
  150. data/docs/rdoc/files/lib/evosynth/evolvers/basic/memetic_algorithm_rb.html +119 -0
  151. data/docs/rdoc/files/lib/evosynth/evolvers/basic/population_hillclimber_rb.html +119 -0
  152. data/docs/rdoc/files/lib/evosynth/evolvers/basic/steady_state_ga_rb.html +119 -0
  153. data/docs/rdoc/files/lib/evosynth/evolvers/coevolutionary/balanced_coevolutionary_rb.html +119 -0
  154. data/docs/rdoc/files/lib/evosynth/evolvers/coevolutionary/round_robin_coevolutionary_rb.html +119 -0
  155. data/docs/rdoc/files/lib/evosynth/evolvers/elitism_rb.html +119 -0
  156. data/docs/rdoc/files/lib/evosynth/evolvers/evolution_strategies/adaptive_es_rb.html +129 -0
  157. data/docs/rdoc/files/lib/evosynth/evolvers/evolution_strategies/derandomized_es_rb.html +129 -0
  158. data/docs/rdoc/files/lib/evosynth/evolvers/evolution_strategies/selfadaptive_es_rb.html +119 -0
  159. data/docs/rdoc/files/lib/evosynth/evolvers/evolver_rb.html +131 -0
  160. data/docs/rdoc/files/lib/evosynth/evolvers/local_search/acceptance_great_deluge_rb.html +119 -0
  161. data/docs/rdoc/files/lib/evosynth/evolvers/local_search/acceptance_hillclimber_rb.html +119 -0
  162. data/docs/rdoc/files/lib/evosynth/evolvers/local_search/acceptance_record_to_record_rb.html +119 -0
  163. data/docs/rdoc/files/lib/evosynth/evolvers/local_search/acceptance_simulated_annealing_rb.html +119 -0
  164. data/docs/rdoc/files/lib/evosynth/evolvers/local_search/acceptance_threshold_rb.html +119 -0
  165. data/docs/rdoc/files/lib/evosynth/evolvers/local_search/local_search_rb.html +137 -0
  166. data/docs/rdoc/files/lib/evosynth/evolvers/profile_using_evolver_rb.html +119 -0
  167. data/docs/rdoc/files/lib/evosynth/evolvers/runnable_evolver_rb.html +129 -0
  168. data/docs/rdoc/files/lib/evosynth/evolvers_rb.html +153 -0
  169. data/docs/rdoc/files/lib/evosynth/operators/adjustments/adaptive_adjustment_rb.html +119 -0
  170. data/docs/rdoc/files/lib/evosynth/operators/adjustments/predefined_adjustment_rb.html +119 -0
  171. data/docs/rdoc/files/lib/evosynth/operators/adjustments_rb.html +131 -0
  172. data/docs/rdoc/files/lib/evosynth/operators/global_recombinations/global_arithmetic_crossover_rb.html +119 -0
  173. data/docs/rdoc/files/lib/evosynth/operators/global_recombinations/global_uniform_crossover_rb.html +119 -0
  174. data/docs/rdoc/files/lib/evosynth/operators/global_recombinations_rb.html +131 -0
  175. data/docs/rdoc/files/lib/evosynth/operators/meta_operators/conditional_combined_operator_rb.html +119 -0
  176. data/docs/rdoc/files/lib/evosynth/operators/meta_operators/proportional_combined_operator_rb.html +119 -0
  177. data/docs/rdoc/files/lib/evosynth/operators/meta_operators/sequential_combined_operator_rb.html +119 -0
  178. data/docs/rdoc/files/lib/evosynth/operators/meta_operators_rb.html +133 -0
  179. data/docs/rdoc/files/lib/evosynth/operators/mutations/binary_mutation_rb.html +119 -0
  180. data/docs/rdoc/files/lib/evosynth/operators/mutations/efficient_binary_mutation_rb.html +119 -0
  181. data/docs/rdoc/files/lib/evosynth/operators/mutations/exchange_mutation_rb.html +119 -0
  182. data/docs/rdoc/files/lib/evosynth/operators/mutations/flip_functions_rb.html +119 -0
  183. data/docs/rdoc/files/lib/evosynth/operators/mutations/gauss_mutation_rb.html +119 -0
  184. data/docs/rdoc/files/lib/evosynth/operators/mutations/identity_rb.html +119 -0
  185. data/docs/rdoc/files/lib/evosynth/operators/mutations/inversion_mutation_rb.html +119 -0
  186. data/docs/rdoc/files/lib/evosynth/operators/mutations/mixing_mutation_rb.html +119 -0
  187. data/docs/rdoc/files/lib/evosynth/operators/mutations/one_gene_flipping_rb.html +119 -0
  188. data/docs/rdoc/files/lib/evosynth/operators/mutations/self_adaptive_gauss_mutation_rb.html +119 -0
  189. data/docs/rdoc/files/lib/evosynth/operators/mutations/shifting_mutation_rb.html +119 -0
  190. data/docs/rdoc/files/lib/evosynth/operators/mutations/uniform_real_mutation_rb.html +119 -0
  191. data/docs/rdoc/files/lib/evosynth/operators/mutations_rb.html +151 -0
  192. data/docs/rdoc/files/lib/evosynth/operators/recombinations/arithmetic_crossover_rb.html +119 -0
  193. data/docs/rdoc/files/lib/evosynth/operators/recombinations/edge_recombination_rb.html +129 -0
  194. data/docs/rdoc/files/lib/evosynth/operators/recombinations/identity_rb.html +119 -0
  195. data/docs/rdoc/files/lib/evosynth/operators/recombinations/k_point_crossover_rb.html +119 -0
  196. data/docs/rdoc/files/lib/evosynth/operators/recombinations/one_point_crossover_rb.html +119 -0
  197. data/docs/rdoc/files/lib/evosynth/operators/recombinations/ordered_recombination_rb.html +129 -0
  198. data/docs/rdoc/files/lib/evosynth/operators/recombinations/partially_mapped_crossover_rb.html +129 -0
  199. data/docs/rdoc/files/lib/evosynth/operators/recombinations/uniform_crossover_rb.html +119 -0
  200. data/docs/rdoc/files/lib/evosynth/operators/recombinations_rb.html +143 -0
  201. data/docs/rdoc/files/lib/evosynth/operators/selections/best_selection_rb.html +119 -0
  202. data/docs/rdoc/files/lib/evosynth/operators/selections/fitness_proportional_selection_rb.html +119 -0
  203. data/docs/rdoc/files/lib/evosynth/operators/selections/identity_rb.html +119 -0
  204. data/docs/rdoc/files/lib/evosynth/operators/selections/n_stage_tournament_selection_rb.html +119 -0
  205. data/docs/rdoc/files/lib/evosynth/operators/selections/random_selection_rb.html +119 -0
  206. data/docs/rdoc/files/lib/evosynth/operators/selections/roulette_wheel_selection_rb.html +119 -0
  207. data/docs/rdoc/files/lib/evosynth/operators/selections/tournament_selection_rb.html +119 -0
  208. data/docs/rdoc/files/lib/evosynth/operators/selections_rb.html +141 -0
  209. data/docs/rdoc/files/lib/evosynth/operators_rb.html +139 -0
  210. data/docs/rdoc/files/lib/evosynth/output/console_writer_rb.html +129 -0
  211. data/docs/rdoc/files/lib/evosynth/output/exporter/csv_exporter_rb.html +129 -0
  212. data/docs/rdoc/files/lib/evosynth/output/exporter/gnuplot_exporter_rb.html +131 -0
  213. data/docs/rdoc/files/lib/evosynth/output/exporter/gruff_exporter_rb.html +131 -0
  214. data/docs/rdoc/files/lib/evosynth/output/exporter_rb.html +133 -0
  215. data/docs/rdoc/files/lib/evosynth/output/factory_rb.html +129 -0
  216. data/docs/rdoc/files/lib/evosynth/output/logger_rb.html +119 -0
  217. data/docs/rdoc/files/lib/evosynth/output_rb.html +135 -0
  218. data/docs/rdoc/files/lib/evosynth/problems/binary_benchmark_functions_rb.html +119 -0
  219. data/docs/rdoc/files/lib/evosynth/problems/float_benchmark_functions_rb.html +1630 -0
  220. data/docs/rdoc/files/lib/evosynth/problems/graph_colouring_rb.html +129 -0
  221. data/docs/rdoc/files/lib/evosynth/problems/tsp_rb.html +129 -0
  222. data/docs/rdoc/files/lib/evosynth/problems_rb.html +135 -0
  223. data/docs/rdoc/files/lib/evosynth_rb.html +139 -0
  224. data/docs/rdoc/fr_class_index.html +245 -0
  225. data/docs/rdoc/fr_file_index.html +233 -0
  226. data/docs/rdoc/fr_method_index.html +661 -0
  227. data/docs/rdoc/index.html +21 -0
  228. data/docs/rdoc/rdoc-style.css +299 -0
  229. data/examples/ants.rb +237 -0
  230. data/examples/ccga_example.rb +150 -0
  231. data/examples/cmb_example.rb +117 -0
  232. data/examples/evolution_strategies.rb +84 -0
  233. data/examples/exporter.rb +90 -0
  234. data/examples/graph_colouring.rb +72 -0
  235. data/examples/hacking.rb +62 -0
  236. data/examples/local_search.rb +109 -0
  237. data/examples/max_ones.rb +83 -0
  238. data/examples/partition.rb +172 -0
  239. data/examples/spk.rb +106 -0
  240. data/examples/tsp.rb +83 -0
  241. data/lib/evosynth.rb +32 -0
  242. data/lib/evosynth/core.rb +33 -0
  243. data/lib/evosynth/core/array_genome.rb +77 -0
  244. data/lib/evosynth/core/binary_genome.rb +156 -0
  245. data/lib/evosynth/core/evaluator.rb +109 -0
  246. data/lib/evosynth/core/individual.rb +92 -0
  247. data/lib/evosynth/core/maximizing_individual.rb +71 -0
  248. data/lib/evosynth/core/minimizing_individual.rb +71 -0
  249. data/lib/evosynth/core/population.rb +120 -0
  250. data/lib/evosynth/core/profile.rb +110 -0
  251. data/lib/evosynth/core/randomizer.rb +73 -0
  252. data/lib/evosynth/decoder.rb +33 -0
  253. data/lib/evosynth/decoder/binary_to_real.rb +57 -0
  254. data/lib/evosynth/decoder/gray.rb +54 -0
  255. data/lib/evosynth/evolvers.rb +41 -0
  256. data/lib/evosynth/evolvers/basic/genetic_algorithm.rb +92 -0
  257. data/lib/evosynth/evolvers/basic/hillclimber.rb +64 -0
  258. data/lib/evosynth/evolvers/basic/memetic_algorithm.rb +111 -0
  259. data/lib/evosynth/evolvers/basic/population_hillclimber.rb +69 -0
  260. data/lib/evosynth/evolvers/basic/steady_state_ga.rb +85 -0
  261. data/lib/evosynth/evolvers/coevolutionary/balanced_coevolutionary.rb +125 -0
  262. data/lib/evosynth/evolvers/coevolutionary/round_robin_coevolutionary.rb +87 -0
  263. data/lib/evosynth/evolvers/elitism.rb +108 -0
  264. data/lib/evosynth/evolvers/evolution_strategies/adaptive_es.rb +104 -0
  265. data/lib/evosynth/evolvers/evolution_strategies/derandomized_es.rb +120 -0
  266. data/lib/evosynth/evolvers/evolution_strategies/selfadaptive_es.rb +82 -0
  267. data/lib/evosynth/evolvers/evolver.rb +43 -0
  268. data/lib/evosynth/evolvers/local_search/acceptance_great_deluge.rb +60 -0
  269. data/lib/evosynth/evolvers/local_search/acceptance_hillclimber.rb +47 -0
  270. data/lib/evosynth/evolvers/local_search/acceptance_record_to_record.rb +69 -0
  271. data/lib/evosynth/evolvers/local_search/acceptance_simulated_annealing.rb +59 -0
  272. data/lib/evosynth/evolvers/local_search/acceptance_threshold.rb +60 -0
  273. data/lib/evosynth/evolvers/local_search/local_search.rb +74 -0
  274. data/lib/evosynth/evolvers/profile_using_evolver.rb +77 -0
  275. data/lib/evosynth/evolvers/runnable_evolver.rb +89 -0
  276. data/lib/evosynth/operators.rb +30 -0
  277. data/lib/evosynth/operators/adjustments.rb +26 -0
  278. data/lib/evosynth/operators/adjustments/adaptive_adjustment.rb +55 -0
  279. data/lib/evosynth/operators/adjustments/predefined_adjustment.rb +46 -0
  280. data/lib/evosynth/operators/global_recombinations.rb +26 -0
  281. data/lib/evosynth/operators/global_recombinations/global_arithmetic_crossover.rb +50 -0
  282. data/lib/evosynth/operators/global_recombinations/global_uniform_crossover.rb +49 -0
  283. data/lib/evosynth/operators/meta_operators.rb +36 -0
  284. data/lib/evosynth/operators/meta_operators/conditional_combined_operator.rb +65 -0
  285. data/lib/evosynth/operators/meta_operators/proportional_combined_operator.rb +84 -0
  286. data/lib/evosynth/operators/meta_operators/sequential_combined_operator.rb +73 -0
  287. data/lib/evosynth/operators/mutations.rb +47 -0
  288. data/lib/evosynth/operators/mutations/binary_mutation.rb +100 -0
  289. data/lib/evosynth/operators/mutations/efficient_binary_mutation.rb +105 -0
  290. data/lib/evosynth/operators/mutations/exchange_mutation.rb +107 -0
  291. data/lib/evosynth/operators/mutations/flip_functions.rb +45 -0
  292. data/lib/evosynth/operators/mutations/gauss_mutation.rb +65 -0
  293. data/lib/evosynth/operators/mutations/identity.rb +62 -0
  294. data/lib/evosynth/operators/mutations/inversion_mutation.rb +73 -0
  295. data/lib/evosynth/operators/mutations/mixing_mutation.rb +75 -0
  296. data/lib/evosynth/operators/mutations/one_gene_flipping.rb +89 -0
  297. data/lib/evosynth/operators/mutations/self_adaptive_gauss_mutation.rb +73 -0
  298. data/lib/evosynth/operators/mutations/shifting_mutation.rb +88 -0
  299. data/lib/evosynth/operators/mutations/uniform_real_mutation.rb +59 -0
  300. data/lib/evosynth/operators/recombinations.rb +48 -0
  301. data/lib/evosynth/operators/recombinations/arithmetic_crossover.rb +67 -0
  302. data/lib/evosynth/operators/recombinations/edge_recombination.rb +108 -0
  303. data/lib/evosynth/operators/recombinations/identity.rb +42 -0
  304. data/lib/evosynth/operators/recombinations/k_point_crossover.rb +81 -0
  305. data/lib/evosynth/operators/recombinations/one_point_crossover.rb +56 -0
  306. data/lib/evosynth/operators/recombinations/ordered_recombination.rb +75 -0
  307. data/lib/evosynth/operators/recombinations/partially_mapped_crossover.rb +102 -0
  308. data/lib/evosynth/operators/recombinations/uniform_crossover.rb +54 -0
  309. data/lib/evosynth/operators/selections.rb +31 -0
  310. data/lib/evosynth/operators/selections/best_selection.rb +54 -0
  311. data/lib/evosynth/operators/selections/fitness_proportional_selection.rb +83 -0
  312. data/lib/evosynth/operators/selections/identity.rb +48 -0
  313. data/lib/evosynth/operators/selections/n_stage_tournament_selection.rb +84 -0
  314. data/lib/evosynth/operators/selections/random_selection.rb +44 -0
  315. data/lib/evosynth/operators/selections/roulette_wheel_selection.rb +54 -0
  316. data/lib/evosynth/operators/selections/tournament_selection.rb +71 -0
  317. data/lib/evosynth/output.rb +28 -0
  318. data/lib/evosynth/output/console_writer.rb +45 -0
  319. data/lib/evosynth/output/exporter.rb +27 -0
  320. data/lib/evosynth/output/exporter/csv_exporter.rb +62 -0
  321. data/lib/evosynth/output/exporter/gnuplot_exporter.rb +81 -0
  322. data/lib/evosynth/output/exporter/gruff_exporter.rb +70 -0
  323. data/lib/evosynth/output/factory.rb +38 -0
  324. data/lib/evosynth/output/logger.rb +83 -0
  325. data/lib/evosynth/problems.rb +37 -0
  326. data/lib/evosynth/problems/binary_benchmark_functions.rb +74 -0
  327. data/lib/evosynth/problems/float_benchmark_functions.rb +99 -0
  328. data/lib/evosynth/problems/graph_colouring.rb +89 -0
  329. data/lib/evosynth/problems/tsp.rb +88 -0
  330. data/test/benchmark/decoder_benchmark.rb +75 -0
  331. data/test/benchmark/mutation_benchmark.rb +88 -0
  332. data/test/benchmark/recombination_benchmark.rb +58 -0
  333. data/test/benchmark/selection_benchmark.rb +52 -0
  334. data/test/core/tc_array_genome.rb +154 -0
  335. data/test/core/tc_binary_genome.rb +160 -0
  336. data/test/core/tc_population.rb +154 -0
  337. data/test/core/tc_profile.rb +75 -0
  338. data/test/core/tc_randomizer.rb +165 -0
  339. data/test/coverage.rb +43 -0
  340. data/test/decoder/tc_binary_to_real.rb +52 -0
  341. data/test/decoder/tc_gray.rb +107 -0
  342. data/test/operators/adjustments/tc_adaptive_adjustment.rb +63 -0
  343. data/test/operators/adjustments/tc_predefined_adjustment.rb +49 -0
  344. data/test/operators/global_recombinations/tc_global_arithmetic_crossover.rb +78 -0
  345. data/test/operators/global_recombinations/tc_global_uniform_crossover.rb +90 -0
  346. data/test/operators/meta_operators/tc_conditional_combined_operator.rb +66 -0
  347. data/test/operators/meta_operators/tc_proportional_combined_operator.rb +167 -0
  348. data/test/operators/meta_operators/tc_sequential_combined_operator.rb +98 -0
  349. data/test/operators/mutations/tc_binary_mutation.rb +73 -0
  350. data/test/operators/mutations/tc_efficient_binary_mutation.rb +73 -0
  351. data/test/operators/mutations/tc_exchange_mutation.rb +127 -0
  352. data/test/operators/mutations/tc_gauss_mutation.rb +130 -0
  353. data/test/operators/mutations/tc_identity_mutation.rb +64 -0
  354. data/test/operators/mutations/tc_inversion_mutation.rb +70 -0
  355. data/test/operators/mutations/tc_mixing_mutation.rb +73 -0
  356. data/test/operators/mutations/tc_one_gene_flipping.rb +109 -0
  357. data/test/operators/mutations/tc_self_adaptive_gauss_mutation.rb +72 -0
  358. data/test/operators/mutations/tc_shifting_muation.rb +73 -0
  359. data/test/operators/mutations/tc_uniform_real_mutation.rb +65 -0
  360. data/test/operators/recombinations/tc_arithmetic_crossover.rb +79 -0
  361. data/test/operators/recombinations/tc_edge_recombination.rb +76 -0
  362. data/test/operators/recombinations/tc_identity_recombination.rb +81 -0
  363. data/test/operators/recombinations/tc_k_point_crossover.rb +81 -0
  364. data/test/operators/recombinations/tc_one_point_crossover.rb +80 -0
  365. data/test/operators/recombinations/tc_ordered_recombination.rb +76 -0
  366. data/test/operators/recombinations/tc_partially_mapped_crossover.rb +91 -0
  367. data/test/operators/recombinations/tc_uniform_crossover.rb +84 -0
  368. data/test/operators/selections/tc_best_selection.rb +85 -0
  369. data/test/operators/selections/tc_fitness_proportional_selection.rb +78 -0
  370. data/test/operators/selections/tc_identity.rb +91 -0
  371. data/test/operators/selections/tc_n_stage_tournament.rb +78 -0
  372. data/test/operators/selections/tc_random_selection.rb +70 -0
  373. data/test/operators/selections/tc_roulette_wheel_selection.rb +78 -0
  374. data/test/operators/selections/tc_tournament_selection.rb +83 -0
  375. data/test/problems/tc_binary_benchmark_functions.rb +126 -0
  376. data/test/problems/tc_float_benchmark_functions.rb +100 -0
  377. data/test/test_util/test_helper.rb +128 -0
  378. data/test/ts_adjustments.rb +26 -0
  379. data/test/ts_core.rb +29 -0
  380. data/test/ts_decoder.rb +26 -0
  381. data/test/ts_global_recombinations.rb +26 -0
  382. data/test/ts_meta_operators.rb +27 -0
  383. data/test/ts_mutations.rb +35 -0
  384. data/test/ts_problems.rb +26 -0
  385. data/test/ts_recombinations.rb +32 -0
  386. data/test/ts_selections.rb +31 -0
  387. data/testdata/README +4 -0
  388. data/testdata/bays29.tsp +68 -0
  389. data/testdata/myciel4.col +77 -0
  390. metadata +552 -0
@@ -0,0 +1,65 @@
1
+ # Copyright (c) 2009, 2010 Yves Adler <yves.adler@googlemail.com>
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person
4
+ # obtaining a copy of this software and associated documentation
5
+ # files (the "Software"), to deal in the Software without
6
+ # restriction, including without limitation the rights to use,
7
+ # copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the
9
+ # Software is furnished to do so, subject to the following
10
+ # conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ # OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+
25
+ module EvoSynth
26
+ module Mutations
27
+
28
+ # GAUSS-MUTATION (Weicker page 60)
29
+ #
30
+ # TODO: needs rdoc
31
+
32
+ class GaussMutation
33
+ attr_accessor :sigma, :lower_bound, :upper_bound
34
+
35
+ DEFAULT_SIGMA = 1.0
36
+ DEFAULT_LOWER_BOUND = -1 * Float::MAX
37
+ DEFAULT_UPPER_BOUND = Float::MAX
38
+
39
+ def initialize(sigma = DEFAULT_SIGMA, lower_bound = DEFAULT_LOWER_BOUND, upper_bound = DEFAULT_UPPER_BOUND)
40
+ @sigma = sigma
41
+ @lower_bound = lower_bound
42
+ @upper_bound = upper_bound
43
+ end
44
+
45
+ def mutate(individual)
46
+ mutated = individual.deep_clone
47
+
48
+ mutated.genome.map! do |gene|
49
+ gene += EvoSynth.nrand(0.0, @sigma)
50
+ gene = @lower_bound if gene < @lower_bound
51
+ gene = @upper_bound if gene > @upper_bound
52
+ gene
53
+ end
54
+
55
+ mutated
56
+ end
57
+
58
+ def to_s
59
+ "gauss mutation <sigma: #{@sigma}, lower bound: #{@lower_bound}, upper_bound: #{@upper_bound}>"
60
+ end
61
+
62
+ end
63
+
64
+ end
65
+ end
@@ -0,0 +1,62 @@
1
+ # Copyright (c) 2009, 2010 Yves Adler <yves.adler@googlemail.com>
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person
4
+ # obtaining a copy of this software and associated documentation
5
+ # files (the "Software"), to deal in the Software without
6
+ # restriction, including without limitation the rights to use,
7
+ # copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the
9
+ # Software is furnished to do so, subject to the following
10
+ # conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ # OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+
25
+ module EvoSynth
26
+ module Mutations
27
+
28
+ # The Identity mutation does not change the genome of the given individual, it will return a clone.
29
+ #
30
+ # This mutations does not destroy permutations.
31
+
32
+ class Identity
33
+
34
+ # :call-seq:
35
+ # mutate(Individual) -> Individual
36
+ #
37
+ # Returns a clone of a given individual.
38
+ #
39
+ # m = Identity.new
40
+ # m.mutate(a_individual) #=> a_new_individual
41
+
42
+ def mutate(individual)
43
+ mutated = individual.deep_clone
44
+ mutated
45
+ end
46
+
47
+ # :call-seq:
48
+ # to_s -> string
49
+ #
50
+ # Returns description of this mutation
51
+ #
52
+ # m = Identity.new
53
+ # m.to_s #=> "identity (just clones individual)"
54
+
55
+ def to_s
56
+ "identity (just clones individual)"
57
+ end
58
+
59
+ end
60
+
61
+ end
62
+ end
@@ -0,0 +1,73 @@
1
+ # Copyright (c) 2009, 2010 Yves Adler <yves.adler@googlemail.com>
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person
4
+ # obtaining a copy of this software and associated documentation
5
+ # files (the "Software"), to deal in the Software without
6
+ # restriction, including without limitation the rights to use,
7
+ # copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the
9
+ # Software is furnished to do so, subject to the following
10
+ # conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ # OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+
25
+ module EvoSynth
26
+ module Mutations
27
+
28
+ # The InversionMutation inverts the order of a random range of genes in the genome. It is based on
29
+ # INVERTIERENDE-MUTATION (Weicker 2007, page 28).
30
+ #
31
+ # This mutations does not destroy permutations.
32
+
33
+ class InversionMutation
34
+
35
+ # :call-seq:
36
+ # mutate(Individual) -> Individual
37
+ #
38
+ # Returns a clone of a given individual and inverts the order of a
39
+ # random range of genes in the genome of this clone.
40
+ #
41
+ # m = InversionMutation.new
42
+ # m.mutate(a_individual) #=> a_new_individual
43
+
44
+ def mutate(individual)
45
+ mutated = individual.deep_clone
46
+ genome = mutated.genome
47
+
48
+ index_one = EvoSynth.rand(genome.size)
49
+ index_two = EvoSynth.rand(genome.size)
50
+ index_two = EvoSynth.rand(genome.size) while index_two == index_one
51
+ index_one, index_two = index_two, index_one if index_one > index_two
52
+
53
+ genome[index_one..index_two] = genome[index_one..index_two].reverse
54
+
55
+ mutated
56
+ end
57
+
58
+ # :call-seq:
59
+ # to_s -> string
60
+ #
61
+ # Returns description of this mutation
62
+ #
63
+ # m = Identity.new
64
+ # m.to_s #=> "exchange mutation"
65
+
66
+ def to_s
67
+ "exchange mutation"
68
+ end
69
+
70
+ end
71
+
72
+ end
73
+ end
@@ -0,0 +1,75 @@
1
+ # Copyright (c) 2009, 2010 Yves Adler <yves.adler@googlemail.com>
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person
4
+ # obtaining a copy of this software and associated documentation
5
+ # files (the "Software"), to deal in the Software without
6
+ # restriction, including without limitation the rights to use,
7
+ # copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the
9
+ # Software is furnished to do so, subject to the following
10
+ # conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ # OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+
25
+ module EvoSynth
26
+ module Mutations
27
+
28
+ # The MixingMutation shuffles the order of a random range of genes in the genome. It is based on
29
+ # MISCHENDE-MUTATION (Weicker 2007, page 132).
30
+ #
31
+ # This mutations does not destroy permutations.
32
+
33
+ class MixingMutation
34
+
35
+ # :call-seq:
36
+ # mutate(Individual) -> Individual
37
+ #
38
+ # Returns a clone of a given individual and shuffles the order of a
39
+ # random range of genes in the genome of this clone.
40
+ #
41
+ # m = InversionMutation.new
42
+ # m.mutate(a_individual) #=> a_new_individual
43
+
44
+ def mutate(individual)
45
+ mutated = individual.deep_clone
46
+ genome = mutated.genome
47
+
48
+ index_one = EvoSynth.rand(genome.size)
49
+ index_two = EvoSynth.rand(genome.size)
50
+ index_one, index_two = index_two, index_one if index_one > index_two
51
+ return mutated if index_one == index_two
52
+
53
+ subsection = genome[index_one..index_two]
54
+ subsection.sort! { EvoSynth.rand(2) }
55
+ genome[index_one..index_two] = subsection
56
+
57
+ mutated
58
+ end
59
+
60
+ # :call-seq:
61
+ # to_s -> string
62
+ #
63
+ # Returns description of this mutation
64
+ #
65
+ # m = MixingMutation.new
66
+ # m.to_s #=> "mixing muation"
67
+
68
+ def to_s
69
+ "mixing muation"
70
+ end
71
+
72
+ end
73
+
74
+ end
75
+ end
@@ -0,0 +1,89 @@
1
+ # Copyright (c) 2009, 2010 Yves Adler <yves.adler@googlemail.com>
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person
4
+ # obtaining a copy of this software and associated documentation
5
+ # files (the "Software"), to deal in the Software without
6
+ # restriction, including without limitation the rights to use,
7
+ # copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the
9
+ # Software is furnished to do so, subject to the following
10
+ # conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ # OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+
25
+ module EvoSynth
26
+
27
+ module Mutations
28
+
29
+ # This mutations flips (inverts) one gene in the genome of a given individual using the given flip function
30
+ # (a lambda) and returns a mutated individual. To use this mutation the flip_function has to return the
31
+ # negation/inverse of a given gene. This mutations is based on EIN-BIT-BINAERE-MUTATION (Weicker 2007, page 48).
32
+
33
+ class OneGeneFlipping
34
+
35
+ # This function is used to flip each gene
36
+
37
+ attr_accessor :flip_function
38
+
39
+ # :call-seq:
40
+ # OneGeneFlipping.new(Lambda) -> OneGeneFlipping
41
+ #
42
+ # Returns a new OneGeneFlipping.
43
+ #
44
+ # custom_flip_function = lambda { |gene| EvoSynth.rand(42 * gene) }
45
+ # OneGeneFlipping.new(custom_flip_function)
46
+
47
+ def initialize(flip_function)
48
+ @flip_function = flip_function
49
+ end
50
+
51
+ # :call-seq:
52
+ # mutate(Individual) -> Individual
53
+ #
54
+ # Returns the mutation (one gene will be flipped with the given flip function) of a given individual.
55
+ #
56
+ # m = OneGeneFlipping.new
57
+ # m.mutate(a_individual) #=> a_new_individual
58
+
59
+ def mutate(individual)
60
+ mutated = individual.deep_clone
61
+ genome = mutated.genome
62
+
63
+ rand_index = EvoSynth.rand(genome.size)
64
+ if @flip_function.arity == 1
65
+ genome[rand_index] = @flip_function.call(genome[rand_index])
66
+ else
67
+ genome[rand_index] = @flip_function.call
68
+ end
69
+
70
+ mutated
71
+ end
72
+
73
+ # :call-seq:
74
+ # to_s -> string
75
+ #
76
+ # Returns description of this mutation
77
+ #
78
+ # m = OneGeneFlipping.new
79
+ # m.to_s #=> "one-gene-flipping"
80
+
81
+ def to_s
82
+ "one-gene-flipping"
83
+ end
84
+
85
+ end
86
+
87
+ end
88
+
89
+ end
@@ -0,0 +1,73 @@
1
+ # Copyright (c) 2009, 2010 Yves Adler <yves.adler@googlemail.com>
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person
4
+ # obtaining a copy of this software and associated documentation
5
+ # files (the "Software"), to deal in the Software without
6
+ # restriction, including without limitation the rights to use,
7
+ # copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the
9
+ # Software is furnished to do so, subject to the following
10
+ # conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ # OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+
25
+ module EvoSynth
26
+ module Mutations
27
+
28
+ # SELBSTADAPTIVE-GAUSS-MUTATION (Weicker page 114)
29
+ #
30
+ # TODO: needs rdoc
31
+
32
+ class SelfAdaptiveGaussMutation
33
+ attr_accessor :initial_sigma, :lower_bound, :upper_bound
34
+
35
+ DEFAULT_INITIAL_SIGMA = 1.0
36
+ DEFAULT_LOWER_BOUND = -1 * Float::MAX
37
+ DEFAULT_UPPER_BOUND = Float::MAX
38
+
39
+ def initialize(initial_sigma = DEFAULT_INITIAL_SIGMA, lower_bound = DEFAULT_LOWER_BOUND, upper_bound = DEFAULT_UPPER_BOUND)
40
+ @initial_sigma = initial_sigma
41
+ @lower_bound = lower_bound
42
+ @upper_bound = upper_bound
43
+ end
44
+
45
+ def mutate(individual)
46
+ mutated = individual.deep_clone
47
+ add_sigma(mutated) unless defined? mutated.sigma
48
+
49
+ mutated.sigma *= Math.exp( (1 / Math.sqrt(mutated.genome.size)) * EvoSynth.nrand)
50
+
51
+ mutated.genome.map! do |gene|
52
+ gene += EvoSynth.nrand(0.0, mutated.sigma)
53
+ gene = @lower_bound if gene < @lower_bound
54
+ gene = @upper_bound if gene > @upper_bound
55
+ gene
56
+ end
57
+
58
+ mutated
59
+ end
60
+
61
+ def to_s
62
+ "self adaptive gauss mutation <sigma: #{@sigma}, lower bound: #{@lower_bound}, upper_bound: #{@upper_bound}>"
63
+ end
64
+
65
+ def add_sigma(individual)
66
+ individual.instance_eval("def sigma; @sigma end; def sigma=(value); @sigma = value end")
67
+ individual.sigma = @initial_sigma
68
+ end
69
+
70
+ end
71
+
72
+ end
73
+ end
@@ -0,0 +1,88 @@
1
+ # Copyright (c) 2009, 2010 Yves Adler <yves.adler@googlemail.com>
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person
4
+ # obtaining a copy of this software and associated documentation
5
+ # files (the "Software"), to deal in the Software without
6
+ # restriction, including without limitation the rights to use,
7
+ # copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the
9
+ # Software is furnished to do so, subject to the following
10
+ # conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ # OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+
25
+ module EvoSynth
26
+ module Mutations
27
+
28
+ # The ShiftingMutation shifts a random range of genes by one index in the genome. It is based on
29
+ # VERSCHIEBENDE-MUTATION (Weicker 2007, page 132).
30
+ #
31
+ # This mutations does not destroy permutations.
32
+
33
+ class ShiftingMutation
34
+
35
+ # :call-seq:
36
+ # mutate(Individual) -> Individual
37
+ #
38
+ # Returns a clone of a given individual and shifts a random range of
39
+ # genes by one index in the genome of this clone.
40
+ #
41
+ # m = ShiftingMutation.new
42
+ # m.mutate(a_individual) #=> a_new_individual
43
+
44
+ def mutate(individual)
45
+ mutated = individual.deep_clone
46
+ genome = mutated.genome
47
+
48
+ index_one = EvoSynth.rand(genome.size)
49
+ index_two = EvoSynth.rand(genome.size)
50
+ return mutated if index_one == index_two
51
+
52
+ shift_genome(index_one, index_two, genome)
53
+ mutated
54
+ end
55
+
56
+ # :call-seq:
57
+ # to_s -> string
58
+ #
59
+ # Returns description of this mutation
60
+ #
61
+ # m = ShiftingMutation.new
62
+ # m.to_s #=> "shifting muation"
63
+
64
+ def to_s
65
+ "shifting muation"
66
+ end
67
+
68
+ private
69
+
70
+ # this function does the actual shift (left and right)
71
+
72
+ def shift_genome(index_one, index_two, genome)
73
+ if index_one > index_two
74
+ ## shift right
75
+ shifted_range = genome[index_two..index_one]
76
+ shifted_range = shifted_range << shifted_range.shift
77
+ genome[index_two..index_one] = shifted_range
78
+ else
79
+ ## shift left
80
+ shifted_range = genome[index_one..index_two]
81
+ shifted_range = [shifted_range.pop] + shifted_range
82
+ genome[index_one..index_two] = shifted_range
83
+ end
84
+ end
85
+ end
86
+
87
+ end
88
+ end