pyVolutionary 2.0.0__tar.gz → 2.1.0__tar.gz

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 (302) hide show
  1. pyvolutionary-2.1.0/PKG-INFO +622 -0
  2. pyvolutionary-2.1.0/README.md +596 -0
  3. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyproject.toml +1 -1
  4. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/__init__.py +12 -0
  5. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/abstract.py +33 -5
  6. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/ant_colony/ant_colony_optimization.py +2 -2
  7. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/ant_lion/ant_lion_optimization.py +2 -2
  8. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/archimede/archimede_optimization.py +1 -2
  9. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/bat/models.py +9 -9
  10. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/bee_colony/bee_colony_optimization.py +5 -4
  11. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/biogeography_based/biogeography_based_optimization.py +2 -2
  12. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/biogeography_based/models.py +3 -3
  13. pyvolutionary-2.1.0/pyvolutionary/brain_storm/__init__.py +3 -0
  14. pyvolutionary-2.1.0/pyvolutionary/brain_storm/brain_storm_optimization.py +78 -0
  15. pyvolutionary-2.1.0/pyvolutionary/brain_storm/improved_brain_storm_optimization.py +76 -0
  16. pyvolutionary-2.1.0/pyvolutionary/brain_storm/models.py +54 -0
  17. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/brown_bear/brown_bear_optimization.py +0 -3
  18. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/camel_caravan/camel_caravan_optimization.py +7 -4
  19. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/cat_swarm/cat_swarm_optimization.py +2 -2
  20. pyvolutionary-2.1.0/pyvolutionary/coronavirus_herd_immunity/__init__.py +2 -0
  21. pyvolutionary-2.1.0/pyvolutionary/coronavirus_herd_immunity/coronavirus_herd_immunity_optimization.py +93 -0
  22. pyvolutionary-2.1.0/pyvolutionary/coronavirus_herd_immunity/models.py +38 -0
  23. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/coyotes/coyotes_optimization.py +5 -6
  24. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/dragonfly/dragonfly_optimization.py +4 -4
  25. pyvolutionary-2.1.0/pyvolutionary/dwarf_mongoose/__init__.py +2 -0
  26. pyvolutionary-2.1.0/pyvolutionary/dwarf_mongoose/dwarf_mongoose_optimization.py +94 -0
  27. pyvolutionary-2.1.0/pyvolutionary/dwarf_mongoose/models.py +29 -0
  28. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/earthworms/earthworms_optimization.py +1 -1
  29. pyvolutionary-2.1.0/pyvolutionary/egret_swarm/__init__.py +2 -0
  30. pyvolutionary-2.1.0/pyvolutionary/egret_swarm/egret_swarm_optimization.py +109 -0
  31. pyvolutionary-2.1.0/pyvolutionary/egret_swarm/models.py +28 -0
  32. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/elephant_herd/elephant_herd_optimization.py +3 -4
  33. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/energy_valley/energy_valley_optimization.py +0 -2
  34. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/firehawk/firehawk_optimization.py +1 -1
  35. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/fireworks/fireworks_optimization.py +0 -2
  36. pyvolutionary-2.1.0/pyvolutionary/forensic_based_investigation/__init__.py +2 -0
  37. pyvolutionary-2.1.0/pyvolutionary/forensic_based_investigation/forensic_based_investigation_optimization.py +92 -0
  38. pyvolutionary-2.1.0/pyvolutionary/forensic_based_investigation/models.py +12 -0
  39. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/forest_algorithm/forest_optimization_algorithm.py +1 -1
  40. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/fox/fox_optimization.py +2 -3
  41. pyvolutionary-2.1.0/pyvolutionary/fox/models.py +37 -0
  42. pyvolutionary-2.1.0/pyvolutionary/germinal_center/__init__.py +2 -0
  43. pyvolutionary-2.1.0/pyvolutionary/germinal_center/germinal_center_optimization.py +67 -0
  44. pyvolutionary-2.1.0/pyvolutionary/germinal_center/models.py +35 -0
  45. pyvolutionary-2.1.0/pyvolutionary/giant_trevally/__init__.py +2 -0
  46. pyvolutionary-2.1.0/pyvolutionary/giant_trevally/giant_trevally_optimization.py +73 -0
  47. pyvolutionary-2.1.0/pyvolutionary/giant_trevally/models.py +12 -0
  48. pyvolutionary-2.1.0/pyvolutionary/golden_jackal/__init__.py +2 -0
  49. pyvolutionary-2.1.0/pyvolutionary/golden_jackal/golden_jackal_optimization.py +48 -0
  50. pyvolutionary-2.1.0/pyvolutionary/golden_jackal/models.py +12 -0
  51. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/helpers.py +20 -39
  52. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/invasive_weed/models.py +3 -3
  53. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/krill_herd/krill_herd_optimization.py +3 -4
  54. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/models.py +16 -16
  55. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/monarch_butterfly/monarch_butterfly_optimization.py +1 -1
  56. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/moth_flame/moth_flame_optimization.py +1 -3
  57. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/particle_swarm/particle_swarm_optimization.py +5 -5
  58. pyvolutionary-2.1.0/pyvolutionary/sine_cosine_algorithm/__init__.py +3 -0
  59. pyvolutionary-2.1.0/pyvolutionary/sine_cosine_algorithm/classes.py +32 -0
  60. pyvolutionary-2.1.0/pyvolutionary/sine_cosine_algorithm/models.py +43 -0
  61. pyvolutionary-2.1.0/pyvolutionary/sine_cosine_algorithm/qle_sine_cosine_algorithm_optimization.py +65 -0
  62. pyvolutionary-2.1.0/pyvolutionary/sine_cosine_algorithm/sine_cosine_algorithm_optimization.py +41 -0
  63. pyvolutionary-2.1.0/pyvolutionary/swarm_hill_climbing/__init__.py +2 -0
  64. pyvolutionary-2.1.0/pyvolutionary/swarm_hill_climbing/models.py +21 -0
  65. pyvolutionary-2.1.0/pyvolutionary/swarm_hill_climbing/swarm_hill_climbing_optimization.py +46 -0
  66. pyvolutionary-2.1.0/pyvolutionary/tests/algorithms/test_brain_storm_optimization.py +37 -0
  67. pyvolutionary-2.1.0/pyvolutionary/tests/algorithms/test_coronavirus_herd_immunity_optimization.py +38 -0
  68. pyvolutionary-2.1.0/pyvolutionary/tests/algorithms/test_dwarf_mongoose_optimization.py +33 -0
  69. pyvolutionary-2.1.0/pyvolutionary/tests/algorithms/test_egret_swarm_optimization.py +27 -0
  70. pyvolutionary-2.1.0/pyvolutionary/tests/algorithms/test_forensic_based_investigation_optimization.py +31 -0
  71. pyvolutionary-2.1.0/pyvolutionary/tests/algorithms/test_germinal_center_optimization.py +33 -0
  72. pyvolutionary-2.1.0/pyvolutionary/tests/algorithms/test_giant_trevally_optimization.py +27 -0
  73. pyvolutionary-2.1.0/pyvolutionary/tests/algorithms/test_golden_jackal_optimization.py +27 -0
  74. pyvolutionary-2.1.0/pyvolutionary/tests/algorithms/test_improved_brain_storm_optimization.py +36 -0
  75. pyvolutionary-2.1.0/pyvolutionary/tests/algorithms/test_qle_sine_cosine_algorithm_optimization.py +37 -0
  76. pyvolutionary-2.1.0/pyvolutionary/tests/algorithms/test_sine_cosine_algorithm_optimization.py +27 -0
  77. pyvolutionary-2.1.0/pyvolutionary/tests/algorithms/test_swarm_hill_climbing_optimization.py +29 -0
  78. pyvolutionary-2.1.0/pyvolutionary/tests/algorithms/test_war_strategy_optimization.py +32 -0
  79. pyvolutionary-2.1.0/pyvolutionary/tests/algorithms/test_water_cycle_optimization.py +33 -0
  80. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/utils.py +2 -12
  81. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/virus_colony_search/virus_colony_search_optimization.py +1 -2
  82. pyvolutionary-2.1.0/pyvolutionary/war_strategy/__init__.py +2 -0
  83. pyvolutionary-2.1.0/pyvolutionary/war_strategy/models.py +27 -0
  84. pyvolutionary-2.1.0/pyvolutionary/war_strategy/war_strategy_optimization.py +55 -0
  85. pyvolutionary-2.1.0/pyvolutionary/water_cycle/__init__.py +2 -0
  86. pyvolutionary-2.1.0/pyvolutionary/water_cycle/models.py +29 -0
  87. pyvolutionary-2.1.0/pyvolutionary/water_cycle/water_cycle_optimization.py +87 -0
  88. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/wind_driven/wind_driven_optimization.py +5 -5
  89. pyvolutionary-2.0.0/PKG-INFO +0 -599
  90. pyvolutionary-2.0.0/README.md +0 -573
  91. pyvolutionary-2.0.0/pyvolutionary/fox/models.py +0 -29
  92. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/african_vulture/__init__.py +0 -0
  93. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/african_vulture/african_vulture_optimization.py +0 -0
  94. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/african_vulture/models.py +0 -0
  95. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/ant_colony/__init__.py +0 -0
  96. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/ant_colony/models.py +0 -0
  97. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/ant_lion/__init__.py +0 -0
  98. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/ant_lion/models.py +0 -0
  99. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/aquila/__init__.py +0 -0
  100. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/aquila/aquila_optimization.py +0 -0
  101. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/aquila/models.py +0 -0
  102. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/archimede/__init__.py +0 -0
  103. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/archimede/models.py +0 -0
  104. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/bacterial_foraging/__init__.py +0 -0
  105. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/bacterial_foraging/bacterial_foraging_optimization.py +0 -0
  106. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/bacterial_foraging/models.py +0 -0
  107. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/bat/__init__.py +0 -0
  108. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/bat/bat_optimization.py +0 -0
  109. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/bee_colony/__init__.py +0 -0
  110. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/bee_colony/models.py +0 -0
  111. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/biogeography_based/__init__.py +0 -0
  112. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/brown_bear/__init__.py +0 -0
  113. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/brown_bear/models.py +0 -0
  114. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/camel_caravan/__init__.py +0 -0
  115. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/camel_caravan/models.py +0 -0
  116. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/cat_swarm/__init__.py +0 -0
  117. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/cat_swarm/models.py +0 -0
  118. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/chaos_game/__init__.py +0 -0
  119. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/chaos_game/chaos_game_optimization.py +0 -0
  120. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/chaos_game/models.py +0 -0
  121. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/chernobyl_disaster/__init__.py +0 -0
  122. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/chernobyl_disaster/chernobyl_disaster_optimization.py +0 -0
  123. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/chernobyl_disaster/models.py +0 -0
  124. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/coral_reef/__init__.py +0 -0
  125. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/coral_reef/coral_reef_optimization.py +0 -0
  126. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/coral_reef/models.py +0 -0
  127. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/coyotes/__init__.py +0 -0
  128. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/coyotes/models.py +0 -0
  129. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/cuckoo_search/__init__.py +0 -0
  130. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/cuckoo_search/cuckoo_search_optimization.py +0 -0
  131. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/cuckoo_search/models.py +0 -0
  132. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/dragonfly/__init__.py +0 -0
  133. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/dragonfly/models.py +0 -0
  134. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/earthworms/__init__.py +0 -0
  135. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/earthworms/models.py +0 -0
  136. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/electromagnetic_field/__init__.py +0 -0
  137. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/electromagnetic_field/electromagnetic_field_optimization.py +0 -0
  138. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/electromagnetic_field/models.py +0 -0
  139. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/elephant_herd/__init__.py +0 -0
  140. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/elephant_herd/models.py +0 -0
  141. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/energy_valley/__init__.py +0 -0
  142. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/energy_valley/models.py +0 -0
  143. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/enums.py +0 -0
  144. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/firefly_swarm/__init__.py +0 -0
  145. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/firefly_swarm/firefly_swarm_optimization.py +0 -0
  146. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/firefly_swarm/models.py +0 -0
  147. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/firehawk/__init__.py +0 -0
  148. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/firehawk/models.py +0 -0
  149. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/fireworks/__init__.py +0 -0
  150. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/fireworks/models.py +0 -0
  151. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/fish_school_search/__init__.py +0 -0
  152. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/fish_school_search/fish_school_search_optimization.py +0 -0
  153. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/fish_school_search/models.py +0 -0
  154. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/flower_pollination_algorithm/__init__.py +0 -0
  155. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/flower_pollination_algorithm/flower_pollination_algorithm_optimization.py +0 -0
  156. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/flower_pollination_algorithm/models.py +0 -0
  157. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/forest_algorithm/__init__.py +0 -0
  158. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/forest_algorithm/models.py +0 -0
  159. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/fox/__init__.py +0 -0
  160. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/genetic_algorithm/__init__.py +0 -0
  161. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/genetic_algorithm/classes.py +0 -0
  162. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/genetic_algorithm/genetic_algorithm_optimization.py +0 -0
  163. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/genetic_algorithm/models.py +0 -0
  164. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/giza_pyramid_construction/__init__.py +0 -0
  165. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/giza_pyramid_construction/giza_pyramid_construction_optimization.py +0 -0
  166. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/giza_pyramid_construction/models.py +0 -0
  167. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/grasshopper/__init__.py +0 -0
  168. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/grasshopper/grasshopper_optimization_algorithm.py +0 -0
  169. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/grasshopper/models.py +0 -0
  170. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/grey_wolf/__init__.py +0 -0
  171. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/grey_wolf/grey_wolf_optimization.py +0 -0
  172. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/grey_wolf/models.py +0 -0
  173. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/harmony_search/__init__.py +0 -0
  174. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/harmony_search/harmony_search_optimization.py +0 -0
  175. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/harmony_search/models.py +0 -0
  176. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/imperialist_competitive/__init__.py +0 -0
  177. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/imperialist_competitive/classes.py +0 -0
  178. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/imperialist_competitive/imperialist_competitive_optimization.py +0 -0
  179. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/imperialist_competitive/models.py +0 -0
  180. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/invasive_weed/__init__.py +0 -0
  181. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/invasive_weed/invasive_weed_optimization.py +0 -0
  182. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/krill_herd/__init__.py +0 -0
  183. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/krill_herd/models.py +0 -0
  184. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/levi_jaya_swarm/__init__.py +0 -0
  185. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/levi_jaya_swarm/levy_flight_jaya_swarm_optimization.py +0 -0
  186. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/levi_jaya_swarm/models.py +0 -0
  187. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/monarch_butterfly/__init__.py +0 -0
  188. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/monarch_butterfly/models.py +0 -0
  189. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/moth_flame/__init__.py +0 -0
  190. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/moth_flame/models.py +0 -0
  191. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/mountain_gazelle/__init__.py +0 -0
  192. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/mountain_gazelle/models.py +0 -0
  193. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/mountain_gazelle/mountain_gazelle_optimization.py +0 -0
  194. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/nuclear_reaction/__init__.py +0 -0
  195. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/nuclear_reaction/models.py +0 -0
  196. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/nuclear_reaction/nuclear_reaction_optimization.py +0 -0
  197. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/osprey/__init__.py +0 -0
  198. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/osprey/models.py +0 -0
  199. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/osprey/osprey_optimization.py +0 -0
  200. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/particle_swarm/__init__.py +0 -0
  201. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/particle_swarm/models.py +0 -0
  202. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/pathfinder_algorithm/__init__.py +0 -0
  203. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/pathfinder_algorithm/models.py +0 -0
  204. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/pathfinder_algorithm/pathfinder_algorithm_optimization.py +0 -0
  205. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/pelican/__init__.py +0 -0
  206. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/pelican/models.py +0 -0
  207. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/pelican/pelican_optimization.py +0 -0
  208. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/seagull/__init__.py +0 -0
  209. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/seagull/models.py +0 -0
  210. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/seagull/seagull_optimization.py +0 -0
  211. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/siberian_tiger/__init__.py +0 -0
  212. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/siberian_tiger/models.py +0 -0
  213. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/siberian_tiger/siberian_tiger_optimization.py +0 -0
  214. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/spotted_hyena/__init__.py +0 -0
  215. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/spotted_hyena/models.py +0 -0
  216. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/spotted_hyena/spotted_hyena_optimization.py +0 -0
  217. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tasmanian_devil/__init__.py +0 -0
  218. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tasmanian_devil/models.py +0 -0
  219. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tasmanian_devil/tasmanian_devil_optimization.py +0 -0
  220. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_african_vulture_optimization.py +0 -0
  221. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_ant_colony_optimization.py +0 -0
  222. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_ant_lion_optimization.py +0 -0
  223. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_aquila_optimization.py +0 -0
  224. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_archimede_optimization.py +0 -0
  225. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_bacterial_foraging_optimization.py +0 -0
  226. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_bat_optimization.py +0 -0
  227. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_bee_colony_optimization.py +0 -0
  228. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_biogeography_based_optimization.py +0 -0
  229. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_brown_bear_optimization.py +0 -0
  230. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_camel_caravan_optimization.py +0 -0
  231. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_cat_swarm_optimization.py +0 -0
  232. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_chaos_game_optimization.py +0 -0
  233. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_chernobyl_disaster_optimization.py +0 -0
  234. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_coral_reef_optimization.py +0 -0
  235. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_coyotes_optimization.py +0 -0
  236. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_cuckoo_search_optimization.py +0 -0
  237. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_dragonfly_optimization.py +0 -0
  238. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_earthworms_optimization.py +0 -0
  239. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_electromagnetic_field_optimization.py +0 -0
  240. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_elephant_herd_optimization.py +0 -0
  241. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_energy_valley_optimization.py +0 -0
  242. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_firefly_swarm_optimization.py +0 -0
  243. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_firehawk_optimization.py +0 -0
  244. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_fireworks_algorithm_optimization.py +0 -0
  245. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_fish_school_search_optimization.py +0 -0
  246. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_flower_pollination_algorithm_optimization.py +0 -0
  247. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_forest_algorithm_optimization.py +0 -0
  248. /pyvolutionary-2.0.0/pyvolutionary/tests/algorithms/test_foxes_optimization.py → /pyvolutionary-2.1.0/pyvolutionary/tests/algorithms/test_fox_optimization.py +0 -0
  249. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_genetic_algorithm_optimization.py +0 -0
  250. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_giza_pyramid_construction_optimization.py +0 -0
  251. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_grasshopper_optimization_algorithm.py +0 -0
  252. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_grey_wolf_optimization.py +0 -0
  253. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_harmony_search_optimization.py +0 -0
  254. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_imperialist_competitive_optimization.py +0 -0
  255. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_invasive_weed_optimization.py +0 -0
  256. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_krill_herd_optimization.py +0 -0
  257. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_levy_flight_jaya_swarm_optimization.py +0 -0
  258. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_monarch_butterfly_optimization.py +0 -0
  259. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_moth_flame_optimization.py +0 -0
  260. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_mountain_gazelle_optimization.py +0 -0
  261. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_nuclear_reaction_optimization.py +0 -0
  262. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_osprey_optimization.py +0 -0
  263. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_particle_swarm_optimization.py +0 -0
  264. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_pathfinder_algorithm_optimization.py +0 -0
  265. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_pelican_optimization.py +0 -0
  266. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_seagull_optimization.py +0 -0
  267. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_siberian_tiger_optimization.py +0 -0
  268. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_spotted_hyena_optimization.py +0 -0
  269. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_tasmanian_devil_optimization.py +0 -0
  270. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_tuna_swarm_optimization.py +0 -0
  271. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_virus_colony_search_optimization.py +0 -0
  272. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_walrus_optimization.py +0 -0
  273. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_whales_optimization.py +0 -0
  274. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_wildebeest_herd_optimization.py +0 -0
  275. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_wind_driven_optimization.py +0 -0
  276. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/algorithms/test_zebra_optimization.py +0 -0
  277. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/fixtures.py +0 -0
  278. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/test_combinatorial_problem.py +0 -0
  279. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/test_constrained_problem.py +0 -0
  280. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/test_multiobjective_problem.py +0 -0
  281. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/test_optimization_max.py +0 -0
  282. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/test_task_bounds.py +0 -0
  283. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tests/test_utils.py +0 -0
  284. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tuna_swarm/__init__.py +0 -0
  285. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tuna_swarm/models.py +0 -0
  286. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/tuna_swarm/tuna_swarm_optimization.py +0 -0
  287. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/virus_colony_search/__init__.py +0 -0
  288. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/virus_colony_search/models.py +0 -0
  289. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/walrus/__init__.py +0 -0
  290. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/walrus/models.py +0 -0
  291. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/walrus/walrus_optimization.py +0 -0
  292. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/whales/__init__.py +0 -0
  293. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/whales/models.py +0 -0
  294. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/whales/whales_optimization.py +0 -0
  295. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/wildebeest_herd/__init__.py +0 -0
  296. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/wildebeest_herd/models.py +0 -0
  297. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/wildebeest_herd/wildebeest_herd_optimization.py +0 -0
  298. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/wind_driven/__init__.py +0 -0
  299. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/wind_driven/models.py +0 -0
  300. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/zebra/__init__.py +0 -0
  301. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/zebra/models.py +0 -0
  302. {pyvolutionary-2.0.0 → pyvolutionary-2.1.0}/pyvolutionary/zebra/zebra_optimization.py +0 -0
@@ -0,0 +1,622 @@
1
+ Metadata-Version: 2.1
2
+ Name: pyVolutionary
3
+ Version: 2.1.0
4
+ Summary: pyVolutionary is a package collecting metaheuristic algorithms, available for free usage and able to solve a wide range of optimization problems.
5
+ Home-page: https://github.com/matteocacciola/pyvolutionary
6
+ License: MIT
7
+ Author: Matteo Cacciola
8
+ Author-email: matteo.cacciola@gmail.com
9
+ Requires-Python: >=3.9,<3.13
10
+ Classifier: Development Status :: 5 - Production/Stable
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.9
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Topic :: Scientific/Engineering
17
+ Classifier: Topic :: Software Development
18
+ Requires-Dist: coverage (>=7.3.2,<8.0.0)
19
+ Requires-Dist: install (>=1.3.5,<2.0.0)
20
+ Requires-Dist: matplotlib (>=3.8.1,<4.0.0)
21
+ Requires-Dist: numpy (>=1.26.1,<2.0.0)
22
+ Requires-Dist: pydantic (>=2.4.2,<3.0.0)
23
+ Requires-Dist: sphynx (>=0.0.3,<0.0.4)
24
+ Project-URL: Repository, https://github.com/matteocacciola/pyvolutionary
25
+ Description-Content-Type: text/markdown
26
+
27
+ # pyVolutionary
28
+
29
+ ![GitHub Release](https://img.shields.io/github/v/release/matteocacciola/pyvolutionary)
30
+ ![GitHub commits since latest release](https://img.shields.io/github/commits-since/matteocacciola/pyvolutionary/latest)
31
+ ![GitHub last commit (branch)](https://img.shields.io/github/last-commit/matteocacciola/pyvolutionary/master)
32
+ ![GitHub issues](https://img.shields.io/github/issues/matteocacciola/pyvolutionary)
33
+ [![Wheel](https://img.shields.io/pypi/wheel/gensim.svg)](https://pypi.python.org/pypi/pyvolutionary)
34
+ [![PyPI version](https://badge.fury.io/py/pyvolutionary.svg)](https://badge.fury.io/py/pyvolutionary)
35
+ ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pyvolutionary)
36
+ ![PyPI - Status](https://img.shields.io/pypi/status/pyvolutionary)
37
+ ![PyPI - Downloads](https://img.shields.io/pypi/dm/pyvolutionary.svg)
38
+ [![Downloads](https://static.pepy.tech/badge/pyvolutionary)](https://pepy.tech/project/pyvolutionary)
39
+ ![GitHub Release Date](https://img.shields.io/github/release-date/matteocacciola/pyvolutionary.svg)
40
+ ![GitHub contributors](https://img.shields.io/github/contributors/matteocacciola/pyvolutionary.svg)
41
+ [![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/matteocacciola/pyvolutionary.svg)](http://isitmaintained.com/project/matteocacciola/pyvolutionary "Average time to resolve an issue")
42
+ [![Percentage of issues still open](http://isitmaintained.com/badge/open/matteocacciola/pyvolutionary.svg)](http://isitmaintained.com/project/matteocacciola/pyvolutionary "Percentage of issues still open")
43
+ [![GitTutorial](https://img.shields.io/badge/PR-Welcome-%23FF8300.svg?)](https://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project)
44
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
45
+
46
+ ![GitHub forks](https://img.shields.io/github/forks/matteocacciola/pyvolutionary)
47
+
48
+ ## Introduction
49
+ <img style="width: 200px; background-color: #fff; float: left; margin: 0 15px 0 0;" src="logo.png" alt="pyVolutionary"/>
50
+
51
+ **pyVolutionary** stands as a versatile Python library dedicated to metaheuristic algorithms within the realm of
52
+ evolutionary computation. Engineered for ease of use, flexibility, and speed, it exhibits robustness and efficiency,
53
+ having undergone rigorous testing on large-scale problem instances. The primary objectives encompass the implementation
54
+ of both classical and cutting-edge nature-inspired algorithms. The library is conceived as a user-friendly resource
55
+ facilitating rapid access to optimization algorithms for researchers, fostering the dissemination of optimization
56
+ knowledge to a broad audience without financial barriers.
57
+
58
+ Nature-inspired algorithms constitute a widely embraced tool for addressing optimization challenges. Over the course of
59
+ their evolution, a plethora of variants have emerged ([paper 1](https://arxiv.org/abs/1307.4186),
60
+ [paper 2](https://www.mdpi.com/2076-3417/8/9/1521)), showcasing their adaptability and versatility across diverse domains
61
+ and applications. Noteworthy advancements have been achieved through hybridization, modification, and adaptation of these
62
+ algorithms. However, the implementation of nature-inspired algorithms can often pose a formidable challenge, characterized
63
+ by complexity and tedium. **pyVolutionary** is specifically crafted to surmount this challenge, offering a streamlined and
64
+ expedited approach to leveraging these algorithms without the need for arduous, time-consuming implementations from scratch.
65
+
66
+ The list of algorithms currently implemented in **pyVolutionary** can be consulted in the [Algorithms](#Algorithms) section.
67
+ The library is continuously updated with new algorithms and problems, and contributions are welcome.
68
+
69
+ ## Installation
70
+ **pyVolutionary** is available on [PyPI](https://pypi.org/project/pyvolutionary/), and can be installed via pip:
71
+
72
+ ```bash
73
+ pip install pyvolutionary
74
+ ```
75
+
76
+ ## Usage
77
+ Once installed, **pyVolutionary** can be imported into your Python scripts as follows:
78
+
79
+ ```python
80
+ import pyvolutionary
81
+ ```
82
+
83
+ Now, you can access the algorithms and problems included in the library. With **pyVolutionary**, you can solve both
84
+ continuous and discrete optimization problems. It is also possible to solve mixed problems, i.e., problems with both
85
+ continuous and discrete variables. In order to do so, you need to define a `Task` class, which inherits from the
86
+ `Task` class of the library. The list of variables in the problem must be specified in the constructor of the class
87
+ inheriting from `Task`. The following table describes the types of variables currently implemented in the library.
88
+
89
+ | Variable type | Class name | Description | Example |
90
+ |-----------------|--------------------------|------------------------------------------------------|-----------------------------------------------------------------------------------------------|
91
+ | Continuous | `ContinuousVariable` | A continuous variable | `ContinuousVariable(name="x0", lower_bound=-100.0, upper_bound=100.0)` |
92
+ | Discrete | `DiscreteVariable` | A discrete variable | `DiscreteVariable(choices=["scale", "auto", 0.01, 0.1, 0.5, 1.0], name="gamma")` |
93
+ | Permutation | `PermutationVariable` | A permutation of the specified choices | `PermutationVariable(items=[[60, 200], [180, 200], [80, 180]], name="routes")` |
94
+ | Multi-objective | `MultiObjectiveVariable` | A type of variable used for multi-objective problems | `MultiObjectiveVariable(name="x", lower_bounds=(-10, -10), upper_bounds=(10, 10))` |
95
+
96
+ An example of a custom `Task` class is the following:
97
+
98
+ ```python
99
+ from pyvolutionary import ContinuousVariable, Task
100
+
101
+ class Sphere(Task):
102
+ def objective_function(self, x: list[float]) -> float:
103
+ x1, x2 = x
104
+ f1 = x1 - 2 * x2 + 3
105
+ f2 = 2 * x1 + x2 - 8
106
+ return f1 ** 2 + f2 ** 2
107
+
108
+
109
+ # Define the task with the bounds and the configuration of the optimizer
110
+ task = Sphere(
111
+ variables=[
112
+ ContinuousVariable(name="x1", lower_bound=-100.0, upper_bound=100.0),
113
+ ContinuousVariable(name="x2", lower_bound=-100.0, upper_bound=100.0),
114
+ ],
115
+ )
116
+ ```
117
+
118
+ You can pass the `minmax` parameter to the `Task` class to specify whether you want to minimize or maximize the function.
119
+ Therefore, if you want to maximize the function, you can write:
120
+
121
+ ```python
122
+ from pyvolutionary import ContinuousVariable, Task
123
+
124
+ class Sphere(Task):
125
+ def objective_function(self, x: list[float]) -> float:
126
+ x1, x2 = x
127
+ f1 = x1 - 2 * x2 + 3
128
+ f2 = 2 * x1 + x2 - 8
129
+ return -(f1 ** 2 + f2 ** 2)
130
+
131
+ task = Sphere(
132
+ variables=[
133
+ ContinuousVariable(name="x1", lower_bound=-100.0, upper_bound=100.0),
134
+ ContinuousVariable(name="x2", lower_bound=-100.0, upper_bound=100.0),
135
+ ],
136
+ minmax="max",
137
+ )
138
+ ```
139
+
140
+ By default, the `minmax` parameter is set to `min`. If necessary (e.g., in the implementation of the objective function),
141
+ additional data can be injected into the `Task` class by using the `data` parameter of the constructor. This data can
142
+ be accessed by using the `data` attribute of the `Task` class (see combinatorial example below).
143
+
144
+ Finally, you can also specify the seed of the random number generator by using the `seed` parameter of the definition
145
+ of the `Task`:
146
+
147
+ ```python
148
+ from pyvolutionary import ContinuousVariable, Task
149
+
150
+ class Sphere(Task):
151
+ def objective_function(self, x: list[float]) -> float:
152
+ x1, x2 = x
153
+ f1 = x1 - 2 * x2 + 3
154
+ f2 = 2 * x1 + x2 - 8
155
+ return -(f1 ** 2 + f2 ** 2)
156
+
157
+ task = Sphere(
158
+ variables=[
159
+ ContinuousVariable(name="x1", lower_bound=-100.0, upper_bound=100.0),
160
+ ContinuousVariable(name="x2", lower_bound=-100.0, upper_bound=100.0),
161
+ ],
162
+ minmax="max",
163
+ seed=42,
164
+ )
165
+ ```
166
+
167
+ ### Continuous problems
168
+ For example, let us inspect how you can solve the continuous _sphere_ problem with the Particle Swarm Optimization algorithm.
169
+
170
+ ```python
171
+ from pyvolutionary import ContinuousVariable, ParticleSwarmOptimization, ParticleSwarmOptimizationConfig, Task
172
+
173
+ # Define the problem, you can replace the following class with your custom problem to optimize
174
+ class Sphere(Task):
175
+ def objective_function(self, x: list[float]) -> float:
176
+ x1, x2 = x
177
+ f1 = x1 - 2 * x2 + 3
178
+ f2 = 2 * x1 + x2 - 8
179
+ return f1 ** 2 + f2 ** 2
180
+
181
+
182
+ # Define the task with the bounds and the configuration of the optimizer
183
+ population = 200
184
+ dimension = 2
185
+ position_min = -100.0
186
+ position_max = 100.0
187
+ generation = 400
188
+ fitness_error = 10e-4
189
+ task = Sphere(
190
+ variables=[ContinuousVariable(
191
+ name=f"x{i}", lower_bound=position_min, upper_bound=position_max
192
+ ) for i in range(dimension)],
193
+ )
194
+
195
+ configuration = ParticleSwarmOptimizationConfig(
196
+ population_size=population,
197
+ fitness_error=fitness_error,
198
+ max_cycles=generation,
199
+ c1=0.1,
200
+ c2=0.1,
201
+ w=[0.35, 1],
202
+ )
203
+ optimization_result = ParticleSwarmOptimization(configuration).optimize(task)
204
+ ```
205
+
206
+ You can also specify the mode of the solver by using the `mode` argument of the `optimize` method.
207
+ For instance, if you want to run the Particle Swarm Optimization algorithm in parallel with threads, you can write:
208
+
209
+ ```python
210
+ optimization_result = ParticleSwarmOptimization(configuration).optimize(task, mode="thread")
211
+ ```
212
+
213
+ The possible values of the `mode` parameter are:
214
+ - `serial`: the algorithm is run in serial mode;
215
+ - `process`: the algorithm is run in parallel with processes;
216
+ - `thread`: the algorithm is run in parallel with threads.
217
+
218
+ In case of `process` and `thread` modes, you can also specify the number of processes or threads to use by using the
219
+ `n_jobs` argument of the `optimize` method:
220
+
221
+ ```python
222
+ optimization_result = ParticleSwarmOptimization(configuration).optimize(task, mode="thread", jobs=4)
223
+ ```
224
+
225
+ The optimization result is a dictionary containing the following keys:
226
+ - `evolution`: a list of the agents found at each generation
227
+ - `rates`: a list of the fitness values of the agents found at each generation
228
+ - `best_solution`: the best agent found by the algorithm
229
+
230
+ Explicitly, the `evolution` key contains a list of `Population`, i.e. a dictionary which `agents` key contains a list of
231
+ `Agent`. The latter is a dictionary composed by the following basic keys:
232
+ - `position`: the position of the agent
233
+ - `fitness`: the fitness value of the agent
234
+ - `cost`: the cost of the agent
235
+
236
+ ```python
237
+ from pydantic import BaseModel
238
+
239
+ class Agent(BaseModel):
240
+ position: list[float]
241
+ cost: float
242
+ fitness: float
243
+ ```
244
+
245
+ These are the basic information, but each algorithm can add more information to the agent, such as the velocity in the
246
+ case of PSO.
247
+
248
+ ### Discrete problems
249
+ A typical problem involving discrete variables is the optimization of the hyperparameters of a Machine Learning model,
250
+ such as a Support Vector Classifier (SVC). You can use **pyVolutionary** to accomplish this task. In the following, we
251
+ provide an example using the Particle Swarm Optimization (PSO) as the optimizer.
252
+
253
+ ```python
254
+ from typing import Any
255
+ from sklearn.svm import SVC
256
+ from sklearn.model_selection import train_test_split
257
+ from sklearn.preprocessing import StandardScaler
258
+ from sklearn import datasets, metrics
259
+
260
+ from pyvolutionary import (
261
+ best_agent,
262
+ ContinuousVariable,
263
+ DiscreteVariable,
264
+ ParticleSwarmOptimization,
265
+ ParticleSwarmOptimizationConfig,
266
+ Task,
267
+ )
268
+
269
+ # Load the data set; In this example, the breast cancer dataset is loaded.
270
+ X, y = datasets.load_breast_cancer(return_X_y=True)
271
+
272
+ # Create training and test split
273
+ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1, stratify=y)
274
+
275
+ sc = StandardScaler()
276
+ X_train_std = sc.fit_transform(X_train)
277
+ X_test_std = sc.transform(X_test)
278
+
279
+
280
+ class SvmOptimizedProblem(Task):
281
+ def objective_function(self, x: list[Any]):
282
+ x_transformed = self.transform_position(x)
283
+ C, kernel = x_transformed["C"], x_transformed["kernel"]
284
+ degree, gamma = x_transformed["degree"], x_transformed["gamma"]
285
+
286
+ svc = SVC(C=C, kernel=kernel, degree=degree, gamma=gamma, probability=True, random_state=1)
287
+ svc.fit(X_train_std, y_train)
288
+ y_predict = svc.predict(X_test_std)
289
+ return metrics.accuracy_score(y_test, y_predict)
290
+
291
+
292
+ task = SvmOptimizedProblem(
293
+ variables=[
294
+ ContinuousVariable(lower_bound=0.01, upper_bound=1000., name="C"),
295
+ DiscreteVariable(choices=["linear", "poly", "rbf", "sigmoid"], name="kernel"),
296
+ DiscreteVariable(choices=[*range(1, 6)], name="degree"),
297
+ DiscreteVariable(choices=["scale", "auto", 0.01, 0.05, 0.1, 0.5, 1.0], name="gamma"),
298
+ ],
299
+ minmax="max",
300
+ )
301
+
302
+ configuration = ParticleSwarmOptimizationConfig(
303
+ population_size=200,
304
+ fitness_error=10e-4,
305
+ max_cycles=100,
306
+ c1=0.1,
307
+ c2=0.1,
308
+ w=[0.35, 1],
309
+ )
310
+
311
+ result = ParticleSwarmOptimization(configuration).optimize(task)
312
+ best = best_agent(result.evolution[-1].agents, task.minmax)
313
+
314
+ print(f"Best parameters: {task.transform_position(best.position)}")
315
+ print(f"Best accuracy: {best.cost}")
316
+ ```
317
+
318
+ You can replace the PSO with any other algorithm implemented in the library.
319
+
320
+ ### Combinatorial problems
321
+ Within the framework of **pyVolutionary** for addressing the Traveling Salesman Problem (TSP), a solution is a plausible
322
+ route signifying a tour that encompasses visiting all cities precisely once and returning to the initial city.
323
+ Typically, this solution is articulated as a permutation of the cities, wherein each city features exactly once in the permutation.
324
+
325
+ As an illustration, consider a TSP scenario involving 5 cities denoted as A, B, C, D, and E. A potential solution might
326
+ be denoted by the permutation [A, B, D, E, C], illustrating the order in which the cities are visited. This interpretation
327
+ indicates that the tour initiates at city A, proceeds to city B, then D, E, and ultimately C before looping back to city A.
328
+
329
+ The following code snippet illustrates how to solve the TSP with the Virus Colony Search Optimization algorithm.
330
+
331
+ ```python
332
+ from typing import Any
333
+ import numpy as np
334
+ from pyvolutionary import (
335
+ best_agent,
336
+ Task,
337
+ PermutationVariable,
338
+ VirusColonySearchOptimization,
339
+ VirusColonySearchOptimizationConfig,
340
+ )
341
+ from pyvolutionary.helpers import distance
342
+
343
+ class TspProblem(Task):
344
+ def objective_function(self, x: list[Any]) -> float:
345
+ x_transformed = self.transform_position(x)
346
+ routes = x_transformed["routes"]
347
+ city_pos = self.data["city_positions"]
348
+ n_routes = len(routes)
349
+ return np.sum([distance(
350
+ city_pos[route], city_pos[routes[(idx + 1) % n_routes]]
351
+ ) for idx, route in enumerate(routes)])
352
+
353
+
354
+ city_positions = [
355
+ [60, 200], [180, 200], [80, 180], [140, 180], [20, 160],
356
+ [100, 160], [200, 160], [140, 140], [40, 120], [100, 120],
357
+ [180, 100], [60, 80], [120, 80], [180, 60], [20, 40],
358
+ [100, 40], [200, 40], [20, 20], [60, 20], [160, 20]
359
+ ]
360
+ task = TspProblem(
361
+ variables=[PermutationVariable(name="routes", items=list(range(0, len(city_positions))))],
362
+ data={"city_positions": city_positions},
363
+ )
364
+ configuration = VirusColonySearchOptimizationConfig(
365
+ population_size=10,
366
+ fitness_error=0.01,
367
+ max_cycles=100,
368
+ lamda=0.1,
369
+ sigma=2.5,
370
+ )
371
+ result = VirusColonySearchOptimization(configuration).optimize(task)
372
+ best = best_agent(result.evolution[-1].agents, task.minmax)
373
+
374
+ print(f"Best real scheduling: {task.transform_position(best.position)}")
375
+ print(f"Best fitness: {best.cost}")
376
+ ```
377
+
378
+ ### Multi-objective problems
379
+ **pyVolutionary** also supports multi-objective problems. A multi-objective problem is a problem with more than one
380
+ objective function. All the objective functions are then "mixed" together by means of a weight vector. The latter has
381
+ to be specified within the configuration of the `Task` class. The following problem is an example of a multi-objective
382
+ problem solved by **pyVolutionary** with the Forest Optimization Algorithm (the latter can be replaced with any other
383
+ algorithm implemented in the library):
384
+
385
+ ```python
386
+ import numpy as np
387
+ from pyvolutionary import Task, MultiObjectiveVariable, ForestOptimizationAlgorithm, ForestOptimizationAlgorithmConfig
388
+
389
+ class MultiObjectiveBenchmark(Task):
390
+ # Link: https://en.wikipedia.org/wiki/Test_functions_for_optimization
391
+ def objective_function(self, solution):
392
+ def booth(x, y):
393
+ return (x + 2 * y - 7) ** 2 + (2 * x + y - 5) ** 2
394
+
395
+ def bukin(x, y):
396
+ return 100 * np.sqrt(np.abs(y - 0.01 * x ** 2)) + 0.01 * np.abs(x + 10)
397
+
398
+ def matyas(x, y):
399
+ return 0.26 * (x ** 2 + y ** 2) - 0.48 * x * y
400
+
401
+ return [booth(solution[0], solution[1]), bukin(solution[0], solution[1]), matyas(solution[0], solution[1])]
402
+
403
+
404
+ # Define the task with the bounds and the configuration of the optimizer
405
+ task = MultiObjectiveBenchmark(
406
+ variables=MultiObjectiveVariable(name="x", lower_bounds=(-10, -10), upper_bounds=(10, 10)),
407
+ objective_weights=[0.4, 0.1, 0.5],
408
+ )
409
+
410
+ configuration = ForestOptimizationAlgorithmConfig(
411
+ population_size=200,
412
+ fitness_error=10e-4,
413
+ max_cycles=400,
414
+ lifetime=5,
415
+ area_limit=50,
416
+ local_seeding_changes=1,
417
+ global_seeding_changes=2,
418
+ transfer_rate=0.5,
419
+ )
420
+
421
+ optimization_result = ForestOptimizationAlgorithm(configuration).optimize(task)
422
+ ```
423
+
424
+ ### Constrained problems
425
+ **pyVolutionary** also supports constrained problems. They are implemented as usual, but the objective function has to
426
+ specify the constraints, thus returning the cost of the constrained solution. Here is an example of a constrained problem solved
427
+ by **pyVolutionary** with the Ant Lion Optimization algorithm (the latter can be replaced with any other algorithm
428
+ implemented in the library):
429
+
430
+ ```python
431
+ import numpy as np
432
+ from pyvolutionary import Task, ContinuousVariable, AntLionOptimization, AntLionOptimizationConfig
433
+
434
+ ## Link: https://onlinelibrary.wiley.com/doi/pdf/10.1002/9781119136507.app2
435
+ class ConstrainedBenchmark(Task):
436
+ def objective_function(self, solution):
437
+ def g1(x):
438
+ return 2 * x[0] + 2 * x[1] + x[9] + x[10] - 10
439
+
440
+ def g2(x):
441
+ return 2 * x[0] + 2 * x[2] + x[9] + x[10] - 10
442
+
443
+ def g3(x):
444
+ return 2 * x[1] + 2 * x[2] + x[10] + x[11] - 10
445
+
446
+ def g4(x):
447
+ return -8 * x[0] + x[9]
448
+
449
+ def g5(x):
450
+ return -8 * x[1] + x[10]
451
+
452
+ def g6(x):
453
+ return -8 * x[2] + x[11]
454
+
455
+ def g7(x):
456
+ return -2 * x[3] - x[4] + x[9]
457
+
458
+ def g8(x):
459
+ return -2 * x[5] - x[6] + x[10]
460
+
461
+ def g9(x):
462
+ return -2 * x[7] - x[8] + x[11]
463
+
464
+ def violate(value):
465
+ return 0 if value <= 0 else value
466
+
467
+ fx = 5 * np.sum(solution[:4]) - 5 * np.sum(solution[:4] ** 2) - np.sum(solution[4:])
468
+
469
+ fx += violate(g1(solution)) ** 2 + violate(g2(solution)) + violate(g3(solution)) + (
470
+ 2 * violate(g4(solution)) + violate(g5(solution)) + violate(g6(solution))
471
+ ) + violate(g7(solution)) + violate(g8(solution)) + violate(g9(solution))
472
+ return fx
473
+
474
+
475
+ # Define the task with the bounds and the configuration of the optimizer
476
+ task = ConstrainedBenchmark(
477
+ variables=(
478
+ [ContinuousVariable(name=f"x{i}", lower_bound=0, upper_bound=1) for i in range(9)] + [
479
+ ContinuousVariable(name=f"x{i}", lower_bound=0, upper_bound=100) for i in range(9, 12)
480
+ ] + [ContinuousVariable(name=f"x12", lower_bound=0, upper_bound=1)]
481
+ )
482
+ )
483
+
484
+ configuration = AntLionOptimizationConfig(population_size=200, fitness_error=10e-4, max_cycles=400)
485
+ optimization_result = AntLionOptimization(configuration).optimize(task)
486
+ ```
487
+
488
+ A multi-objective constrained problem can be also managed by **pyVolutionary**. In this case, the objective function
489
+ must return a list of costs, and the constraints must be specified in the objective function of the `Task` class as well.
490
+
491
+ ## Extending the library
492
+ **pyVolutionary** is designed to be easily extensible. You can add your own algorithms and problems to the library by
493
+ following the instructions below.
494
+
495
+ ### Adding a new algorithm
496
+ To add a new algorithm, you need to create a new class that inherits from the `OptimizationAbstract` class. The new
497
+ class must implement the `optimization_step` method, where you can implement your new metaheuristic algorithm.
498
+
499
+ The constructor of the new class must accept a `config` parameter, which is a Pydantic model extending the `BaseOptimizationConfig`
500
+ class. This class contains the parameters of the algorithm, such as the population size, the number of generations, etc.
501
+
502
+ ```python
503
+ from pydantic import BaseModel
504
+
505
+ class BaseOptimizationConfig(BaseModel):
506
+ population_size: int
507
+ fitness_error: float | None = None
508
+ max_cycles: int
509
+ ```
510
+
511
+ The examples listed in the following section can be used as a reference for the implementation of a new algorithm.
512
+
513
+ Once you created your new classes, you can run the algorithm by calling the `optimize` method, which takes as input a
514
+ `Task` object and returns a dictionary as above described.
515
+
516
+ ## Utilities
517
+ **pyVolutionary** provides a set of utilities to facilitate the use of the library.
518
+
519
+ ### Agent characteristics
520
+ The characteristics of an agent can be extracted by using two functions:
521
+ - `agent_trend`: it returns the trend of the agent at each iteration
522
+ - `agent_position`: it returns the position of the agent at each iteration
523
+
524
+ ```python
525
+ agent_trend(optimization_result: OptimizationResult, idx: int, iters: list[int] | None = None) -> list[float]
526
+ agent_position(optimization_result: OptimizationResult, idx: int, iters: list[int] | None = None) -> list[list[float]]
527
+ ```
528
+
529
+ where:
530
+ - `optimization_result`: the result from the optimization algorithm
531
+ - `idx`: the index of the agent to consider
532
+ - `iters`: a list of the iterations to consider. If `None`, all the iterations are considered.
533
+
534
+ The two methods return a list of the cost or location in the space search, respectively, of the considered agent at each
535
+ of the specified iterations.
536
+
537
+ ### Best agent characteristics
538
+ Specifically for the best agent, you can use two functions in order to locate its position in the space search and to
539
+ extract the trend of its cost, at each iteration:
540
+
541
+ ```python
542
+ best_agent_trend(optimization_result: OptimizationResult, iters: list[int] | None = None) -> list[float]
543
+ best_agent_position(optimization_result: OptimizationResult, iters: list[int] | None = None) -> list[list[float]]
544
+ ```
545
+
546
+
547
+ ## Algorithms
548
+ The following algorithms are currently implemented in **pyVolutionary**:
549
+
550
+ | Algorithm | Class | Year | Paper | Example |
551
+ |---------------------------------------------|------------------------------------------|------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|
552
+ | African Vulture Optimization | `AfricanVultureOptimization` | 2022 | [paper](https://doi.org/10.1016/j.cie.2021.107408) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/avo.py) |
553
+ | Ant Colony Optimization | `AntColonyOptimization` | 2008 | [paper](https://doi.org/10.1109/MCI.2006.329691) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/aco.py) |
554
+ | Ant Lion Optimization | `AntLionOptimization` | 2015 | [paper](https://dx.doi.org/10.1016/j.advengsoft.2015.01.010) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/alo.py) |
555
+ | Aquila Optimization | `AquilaOptimization` | 2021 | [paper](https://doi.org/10.1016/j.cie.2021.107250) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/ao.py) |
556
+ | Archimede Optimization | `ArchimedeOptimization` | 2021 | [paper](https://doi.org/10.1007/s10489-020-01893-z) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/archo.py) |
557
+ | Artificial Bee Colony Optimization | `BeeColonyOptimization` | 2007 | [paper](https://api.semanticscholar.org/CorpusID:8215393) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/bco.py) |
558
+ | Bacterial Foraging Optimization | `BacterialForagingOptimization` | 2002 | [paper](https://api.semanticscholar.org/CorpusID:108291966) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/bfo.py) |
559
+ | Bat Optimization | `BatOptimization` | 2010 | [paper](https://link.springer.com/chapter/10.1007/978-3-642-12538-6_6) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/bo.py) |
560
+ | Biogeography-Based Optimization | `BiogeographyBasedOptimization` | 2008 | [paper](https://ieeexplore.ieee.org/abstract/document/4475427) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/bgbo.py) |
561
+ | Brain Storm Optimization (Original) | `BrainStormOptimization` | 2011 | [paper](https://doi.org/10.1007/978-3-642-21515-5_36) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/bso.py) |
562
+ | Brain Storm Optimization (Improved) | `ImprovedBrainStormOptimization` | 2017 | [paper](https://doi.org/10.1016/j.swevo.2017.05.001) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/ibso.py) |
563
+ | Brown-Bear Optimization | `BrownBearOptimization` | 2023 | [paper](https://www.taylorfrancis.com/chapters/edit/10.1201/9781003337003-6/novel-brown-bear-optimization-algorithm-solving-economic-dispatch-problem-tapan-prakash-praveen-prakash-singh-vinay-pratap-singh-sri-niwas-singh) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/bbo.py) |
564
+ | Camel Caravan Optimization | `CamelCaravanOptimization` | 2016 | [paper](https://ijeee.edu.iq/Papers/Vol12-Issue2/118375.pdf) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/ccoa.py) |
565
+ | Cat Swarm Optimization | `CatSwarmOptimization` | 2006 | [paper](https://link.springer.com/chapter/10.1007/978-3-540-36668-3_94) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/cso.py) |
566
+ | Chaos Game Optimization | `ChaosGameOptimization` | 2021 | [paper](https://doi.org/10.1007/s10462-020-09867-w) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/cgo.py) |
567
+ | Chernobyl Disaster Optimization | `ChernobylDisasterOptimization` | 2023 | [paper](https://link.springer.com/article/10.1007/s00521-023-08261-1) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/cdo.py) |
568
+ | Coral Reef Optimization | `CoralReefOptimization` | 2014 | [paper](https://www.hindawi.com/journals/tswj/2014/739768/) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/cro.py) |
569
+ | Coyotes Optimization | `CoyotesOptimization` | 2018 | [paper](https://ieeexplore.ieee.org/document/8477769) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/co.py) |
570
+ | Coronavirus Herd Immunity Optimization | `CoronavirusHerdImmunityOptimization` | 2021 | [paper](https://doi.org/10.1007/s00521-020-05296-6) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/chio.py) |
571
+ | Cuckoo Search Optimization | `CuckooSearchOptimization` | 2009 | [paper](https://doi.org/10.1109/NABIC.2009.5393690) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/csoa.py) |
572
+ | Dragonfly Optimization | `DragonflyOptimization` | 2016 | [paper](https://link.springer.com/article/10.1007/s00521-015-1920-1) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/do.py) |
573
+ | Dwarf Mongoose Optimization | `DwarfMongooseOptimization` | 2022 | [paper](https://doi.org/10.1016/j.cma.2022.114570) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/dmo.py) |
574
+ | Earthworms Optimization | `EarthwormsOptimization` | 2015 | [paper](https://www.inderscience.com/info/inarticle.php?artid=93328) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/ewo.py) |
575
+ | Egret Swarm Optimization | `EgretSwarmOptimization` | 2022 | [paper](https://www.mdpi.com/2313-7673/7/4/144) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/eso.py) |
576
+ | Electromagnetic Field Optimization | `ElectromagneticFieldOptimization` | 2016 | [paper](https://doi.org/10.1016/j.swevo.2015.07.002) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/efo.py) |
577
+ | Elephant Herd Optimization | `ElephantHerdOptimization` | 2015 | [paper](https://ieeexplore.ieee.org/document/7383528) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/eho.py) |
578
+ | Energy Valley Optimization | `EnergyValleyOptimization` | 2023 | [paper](https://www.nature.com/articles/s41598-022-27344-y) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/evo.py) |
579
+ | Firefly Swarm Optimization | `FireflySwarmOptimization` | 2009 | [paper](https://doi.org/10.1504/IJBIC.2010.032124) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/fso.py) |
580
+ | Fire Hawk Optimization | `FireHawkOptimization` | 2022 | [paper](https://link.springer.com/article/10.1007/s10462-022-10173-w) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/fho.py) |
581
+ | Fireworks Optimization | `FireworksOptimization` | 2010 | [paper](https://doi.org/10.1504/IJBIC.2010.037285) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/fwa.py) |
582
+ | Fish School Search Optimization | `FishSchoolSearchOptimization` | 2008 | [paper](https://doi.org/10.1109/ICSMC.2008.4811695) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/fsso.py) |
583
+ | Flower Pollination Algorithm Optimization | `FlowerPollinationAlgorithmOptimization` | 2012 | [paper](https://link.springer.com/chapter/10.1007/978-3-642-32894-7_27) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/fpao.py) |
584
+ | Forensic Based Investigation Optimization | `ForensicBasedInvestigationOptimization` | 2020 | [paper](https://doi.org/10.1016/j.asoc.2020.106339) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/fbio.py) |
585
+ | Forest Optimization Algorithm | `ForestOptimizationAlgorithm` | 2014 | [paper](https://doi.org/10.1016/j.eswa.2014.05.009) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/foa.py) |
586
+ | Fox Optimization | `FoxOptimization` | 2023 | [paper](https://link.springer.com/article/10.1007/s10489-022-03533-0) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/fo.py) |
587
+ | Genetic Algorithm Optimization | `GeneticAlgorithmOptimization` | 1989 | [paper](https://www.sciencedirect.com/book/9780128219867/nature-inspired-optimization-algorithms) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/gao.py) |
588
+ | Germinal Center Optimization | `GerminalCenterOptimization` | 2018 | [paper](https://doi.org/10.2991/ijcis.2018.25905179) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/gco.py) |
589
+ | Giant Trevally Optimization | `GiantTrevallyOptimization` | 2022 | [paper](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnu) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/gto.py) |
590
+ | Giza Pyramid Construction Optimization | `GizaPyramidConstructionOptimization` | 2021 | [paper](https://doi.org/10.1007/s12065-020-00451-3) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/gpco.py) |
591
+ | Golden Jackal Optimization | `GoldenJackalOptimization` | 2022 | [paper](https://www.sciencedirect.com/science/article/abs/pii/S095741742200358X) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/gjo.py) |
592
+ | Grasshopper Optimization Algorithm | `GrasshopperOptimization` | 2017 | [paper](https://doi.org/10.1016/j.advengsoft.2017.01.00) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/goa.py) |
593
+ | Grey Wolf Optimization | `GreyWolfOptimization` | 2014 | [paper](https://doi.org/10.1016/j.advengsoft.2013.12.007) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/gwo.py) |
594
+ | Harmony Search Optimization | `HarmonySearchOptimization` | 2001 | [paper](https://doi.org/10.1177/003754970107600201) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/hso.py) |
595
+ | Imperialist Competitive Optimization | `ImperialistCompetitiveOptimization` | 2013 | [paper](https://doi.org/10.1109/ICCKE.2013.6687751) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/ico.py) |
596
+ | Invasive Weed Optimization | `InvasiveWeedOptimization` | 2006 | [paper](https://doi.org/10.1016/j.ecoinf.2006.07.003) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/iwo.py) |
597
+ | Krill Herd Optimization | `KrillHerdOptimization` | 2012 | [paper](https://doi.org/10.1016/j.cnsns.2012.05.010) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/kho.py) |
598
+ | Levy Flight Jaya Swarm Optimization | `LeviFlightJayaSwarmOptimization` | 2021 | [paper](https://doi.org/10.1016/j.eswa.2020.113902) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/lfjso.py) |
599
+ | Monarch Butterfly Optimization | `MonarchButterflyOptimization` | 2019 | [paper](https://link.springer.com/article/10.1007/s00521-015-1923-y) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/mbo.py) |
600
+ | Moth-Flame Optimization | `MothFlameOptimization` | 2015 | [paper](https://doi.org/10.1016/j.knosys.2015.07.006) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/mfo.py) |
601
+ | Mountain Gazelle Optimization | `MountainGazelleOptimization` | 2022 | [paper](https://doi.org/10.1016/j.advengsoft.2022.103282) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/mgo.py) |
602
+ | Nuclear Reaction Optimization | `NuclearReactionOptimization` | 2019 | [paper](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8720256) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/nro.py) |
603
+ | Osprey Optimization | `OspreyOptimization` | 2023 | [paper](https://www.frontiersin.org/articles/10.3389/fmech.2022.1126450/full) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/ooa.py) |
604
+ | Particle Swarm Optimization | `ParticleSwarmOptimization` | 1995 | [paper](https://ieeexplore.ieee.org/document/488968) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/pso.py) |
605
+ | Pathfinder Algorithm Optimization | `PathfinderAlgorithmOptimization` | 2019 | [paper](https://doi.org/10.1016/j.asoc.2019.03.012) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/pfao.py) |
606
+ | Pelican Optimization | `PelicanOptimization` | 2022 | [paper](https://www.mdpi.com/1424-8220/22/3/855) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/poa.py) |
607
+ | Seagull Optimization | `SeagullOptimization` | 2019 | [paper](https://doi.org/10.1016/j.knosys.2018.11.024) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/so.py) |
608
+ | Siberian Tiger Optimization | `SiberianTigerOptimization` | 2022 | [paper](https://ieeexplore.ieee.org/document/9989374) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/stoa.py) |
609
+ | Sine Cosine Algorithm | `SineCosineAlgorithmOptimization` | 2016 | [paper](https://doi.org/10.1016/j.knosys.2015.12.022) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/scao.py) |
610
+ | (Q-learning embedded) Sine Cosine Algorithm | `QleSineCosineAlgorithmOptimization` | 2016 | [paper](https://www.sciencedirect.com/science/article/abs/pii/S0957417421017048) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/qlescao.py) |
611
+ | Spotted Hyena Optimization | `SpottedHyenaOptimization` | 2017 | [paper](https://doi.org/10.1016/j.advengsoft.2017.05.014) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/sho.py) |
612
+ | Swarm Hill Climbing Optimization | `SwarmHillClimbingOptimization` | 1993 | [paper](https://proceedings.neurips.cc/paper/1993/file/ab88b15733f543179858600245108dd8-Paper.pdf) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/hco.py) |
613
+ | Tasmanian Devil Optimization | `TasmanianDevilOptimization` | 2022 | [paper](https://ieeexplore.ieee.org/document/9714388) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/tdo.py) |
614
+ | Tuna Swarm Optimization | `TunaSwarmOptimization` | 2021 | [paper](https://www.hindawi.com/journals/cin/2021/9210050/) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/tso.py) |
615
+ | Virus Colony Search Optimization | `VirusColonySearchOptimization` | 2016 | [paper](https://doi.org/10.1016/j.advengsoft.2015.11.004) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/vcso.py) |
616
+ | Walrus Optimization | `WalrusOptimization` | 2022 | [paper](http://doi.org/10.21203/rs.3.rs-2174098/v1) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/woa.py) |
617
+ | War Strategy Optimization | `WarStrategyOptimization` | 2022 | [paper](https://www.researchgate.net/publication/358806739_War_Strategy_Optimization_Algorithm_A_New_Effective_Metaheuristic_Algorithm_for_Global_Optimization) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/wso.py) |
618
+ | Water Cycle Optimization | `WaterCycleOptimization` | 2012 | [paper](https://doi.org/10.1016/j.compstruc.2012.07.010) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/wco.py) |
619
+ | Whales Optimization | `WhalesOptimization` | 2016 | [paper](https://doi.org/10.1016/j.advengsoft.2016.01.008) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/wo.py) |
620
+ | Wildebeest Herd Optimization | `WildebeestHerdOptimization` | 2019 | [paper](https://content.iospress.com/articles/journal-of-intelligent-and-fuzzy-systems/ifs190495) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/wdo.py) |
621
+ | Wind Driven Optimization | `WindDrivenOptimization` | 2013 | [paper](https://ieeexplore.ieee.org/abstract/document/6407788) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/who.py) |
622
+ | Zebra Optimization | `ZebraOptimization` | 2022 | [paper](https://ieeexplore.ieee.org/document/9768820) | [example](https://github.com/matteocacciola/pyvolutionary/tree/master/demos/zoa.py) |