pyVolutionary 2.3.0__tar.gz → 2.4.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 (235) hide show
  1. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/PKG-INFO +25 -41
  2. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/README.md +24 -40
  3. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyproject.toml +1 -1
  4. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/__init__.py +2 -0
  5. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/models.py +77 -1
  6. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/abstract.py +0 -0
  7. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/african_vulture/__init__.py +0 -0
  8. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/african_vulture/african_vulture_optimization.py +0 -0
  9. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/african_vulture/models.py +0 -0
  10. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/ant_colony/__init__.py +0 -0
  11. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/ant_colony/ant_colony_optimization.py +0 -0
  12. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/ant_colony/models.py +0 -0
  13. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/ant_lion/__init__.py +0 -0
  14. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/ant_lion/ant_lion_optimization.py +0 -0
  15. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/ant_lion/models.py +0 -0
  16. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/aquila/__init__.py +0 -0
  17. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/aquila/aquila_optimization.py +0 -0
  18. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/aquila/models.py +0 -0
  19. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/archimede/__init__.py +0 -0
  20. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/archimede/archimede_optimization.py +0 -0
  21. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/archimede/models.py +0 -0
  22. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bacterial_foraging/__init__.py +0 -0
  23. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bacterial_foraging/bacterial_foraging_optimization.py +0 -0
  24. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bacterial_foraging/models.py +0 -0
  25. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bat/__init__.py +0 -0
  26. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bat/bat_optimization.py +0 -0
  27. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bat/models.py +0 -0
  28. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bee_colony/__init__.py +0 -0
  29. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bee_colony/bee_colony_optimization.py +0 -0
  30. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bee_colony/models.py +0 -0
  31. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/biogeography_based/__init__.py +0 -0
  32. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/biogeography_based/biogeography_based_optimization.py +0 -0
  33. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/biogeography_based/models.py +0 -0
  34. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/brain_storm/__init__.py +0 -0
  35. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/brain_storm/brain_storm_optimization.py +0 -0
  36. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/brain_storm/improved_brain_storm_optimization.py +0 -0
  37. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/brain_storm/models.py +0 -0
  38. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/brown_bear/__init__.py +0 -0
  39. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/brown_bear/brown_bear_optimization.py +0 -0
  40. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/brown_bear/models.py +0 -0
  41. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/camel_caravan/__init__.py +0 -0
  42. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/camel_caravan/camel_caravan_optimization.py +0 -0
  43. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/camel_caravan/models.py +0 -0
  44. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/cat_swarm/__init__.py +0 -0
  45. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/cat_swarm/cat_swarm_optimization.py +0 -0
  46. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/cat_swarm/models.py +0 -0
  47. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/chaos_game/__init__.py +0 -0
  48. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/chaos_game/chaos_game_optimization.py +0 -0
  49. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/chaos_game/models.py +0 -0
  50. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/chernobyl_disaster/__init__.py +0 -0
  51. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/chernobyl_disaster/chernobyl_disaster_optimization.py +0 -0
  52. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/chernobyl_disaster/models.py +0 -0
  53. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coati/__init__.py +0 -0
  54. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coati/coati_optimization.py +0 -0
  55. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coati/models.py +0 -0
  56. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coral_reef/__init__.py +0 -0
  57. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coral_reef/coral_reef_optimization.py +0 -0
  58. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coral_reef/models.py +0 -0
  59. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coronavirus_herd_immunity/__init__.py +0 -0
  60. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coronavirus_herd_immunity/coronavirus_herd_immunity_optimization.py +0 -0
  61. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coronavirus_herd_immunity/models.py +0 -0
  62. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coyotes/__init__.py +0 -0
  63. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coyotes/coyotes_optimization.py +0 -0
  64. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coyotes/models.py +0 -0
  65. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/cuckoo_search/__init__.py +0 -0
  66. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/cuckoo_search/cuckoo_search_optimization.py +0 -0
  67. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/cuckoo_search/models.py +0 -0
  68. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/dragonfly/__init__.py +0 -0
  69. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/dragonfly/dragonfly_optimization.py +0 -0
  70. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/dragonfly/models.py +0 -0
  71. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/dwarf_mongoose/__init__.py +0 -0
  72. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/dwarf_mongoose/dwarf_mongoose_optimization.py +0 -0
  73. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/dwarf_mongoose/models.py +0 -0
  74. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/earthworms/__init__.py +0 -0
  75. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/earthworms/earthworms_optimization.py +0 -0
  76. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/earthworms/models.py +0 -0
  77. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/egret_swarm/__init__.py +0 -0
  78. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/egret_swarm/egret_swarm_optimization.py +0 -0
  79. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/egret_swarm/models.py +0 -0
  80. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/electromagnetic_field/__init__.py +0 -0
  81. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/electromagnetic_field/electromagnetic_field_optimization.py +0 -0
  82. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/electromagnetic_field/models.py +0 -0
  83. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/elephant_herd/__init__.py +0 -0
  84. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/elephant_herd/elephant_herd_optimization.py +0 -0
  85. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/elephant_herd/models.py +0 -0
  86. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/energy_valley/__init__.py +0 -0
  87. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/energy_valley/energy_valley_optimization.py +0 -0
  88. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/energy_valley/models.py +0 -0
  89. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/enums.py +0 -0
  90. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/firefly_swarm/__init__.py +0 -0
  91. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/firefly_swarm/firefly_swarm_optimization.py +0 -0
  92. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/firefly_swarm/models.py +0 -0
  93. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/firehawk/__init__.py +0 -0
  94. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/firehawk/firehawk_optimization.py +0 -0
  95. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/firehawk/models.py +0 -0
  96. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fireworks/__init__.py +0 -0
  97. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fireworks/fireworks_optimization.py +0 -0
  98. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fireworks/models.py +0 -0
  99. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fish_school_search/__init__.py +0 -0
  100. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fish_school_search/fish_school_search_optimization.py +0 -0
  101. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fish_school_search/models.py +0 -0
  102. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/flower_pollination_algorithm/__init__.py +0 -0
  103. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/flower_pollination_algorithm/flower_pollination_algorithm_optimization.py +0 -0
  104. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/flower_pollination_algorithm/models.py +0 -0
  105. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/forensic_based_investigation/__init__.py +0 -0
  106. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/forensic_based_investigation/forensic_based_investigation_optimization.py +0 -0
  107. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/forensic_based_investigation/models.py +0 -0
  108. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/forest_algorithm/__init__.py +0 -0
  109. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/forest_algorithm/forest_optimization_algorithm.py +0 -0
  110. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/forest_algorithm/models.py +0 -0
  111. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fox/__init__.py +0 -0
  112. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fox/fox_optimization.py +0 -0
  113. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fox/models.py +0 -0
  114. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/genetic_algorithm/__init__.py +0 -0
  115. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/genetic_algorithm/classes.py +0 -0
  116. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/genetic_algorithm/genetic_algorithm_optimization.py +0 -0
  117. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/genetic_algorithm/models.py +0 -0
  118. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/germinal_center/__init__.py +0 -0
  119. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/germinal_center/germinal_center_optimization.py +0 -0
  120. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/germinal_center/models.py +0 -0
  121. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/giant_trevally/__init__.py +0 -0
  122. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/giant_trevally/giant_trevally_optimization.py +0 -0
  123. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/giant_trevally/models.py +0 -0
  124. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/giza_pyramid_construction/__init__.py +0 -0
  125. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/giza_pyramid_construction/giza_pyramid_construction_optimization.py +0 -0
  126. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/giza_pyramid_construction/models.py +0 -0
  127. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/golden_jackal/__init__.py +0 -0
  128. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/golden_jackal/golden_jackal_optimization.py +0 -0
  129. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/golden_jackal/models.py +0 -0
  130. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/grasshopper/__init__.py +0 -0
  131. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/grasshopper/grasshopper_optimization_algorithm.py +0 -0
  132. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/grasshopper/models.py +0 -0
  133. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/grey_wolf/__init__.py +0 -0
  134. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/grey_wolf/grey_wolf_optimization.py +0 -0
  135. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/grey_wolf/models.py +0 -0
  136. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/gridsearchcv.py +0 -0
  137. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/harmony_search/__init__.py +0 -0
  138. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/harmony_search/harmony_search_optimization.py +0 -0
  139. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/harmony_search/models.py +0 -0
  140. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/helpers.py +0 -0
  141. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/imperialist_competitive/__init__.py +0 -0
  142. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/imperialist_competitive/classes.py +0 -0
  143. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/imperialist_competitive/imperialist_competitive_optimization.py +0 -0
  144. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/imperialist_competitive/models.py +0 -0
  145. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/invasive_weed/__init__.py +0 -0
  146. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/invasive_weed/invasive_weed_optimization.py +0 -0
  147. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/invasive_weed/models.py +0 -0
  148. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/krill_herd/__init__.py +0 -0
  149. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/krill_herd/krill_herd_optimization.py +0 -0
  150. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/krill_herd/models.py +0 -0
  151. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/levi_jaya_swarm/__init__.py +0 -0
  152. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/levi_jaya_swarm/levy_flight_jaya_swarm_optimization.py +0 -0
  153. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/levi_jaya_swarm/models.py +0 -0
  154. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/marine_predators/__init__.py +0 -0
  155. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/marine_predators/marine_predators_optimization.py +0 -0
  156. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/marine_predators/models.py +0 -0
  157. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/monarch_butterfly/__init__.py +0 -0
  158. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/monarch_butterfly/models.py +0 -0
  159. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/monarch_butterfly/monarch_butterfly_optimization.py +0 -0
  160. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/moth_flame/__init__.py +0 -0
  161. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/moth_flame/models.py +0 -0
  162. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/moth_flame/moth_flame_optimization.py +0 -0
  163. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/mountain_gazelle/__init__.py +0 -0
  164. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/mountain_gazelle/models.py +0 -0
  165. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/mountain_gazelle/mountain_gazelle_optimization.py +0 -0
  166. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/multitask.py +0 -0
  167. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/nuclear_reaction/__init__.py +0 -0
  168. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/nuclear_reaction/models.py +0 -0
  169. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/nuclear_reaction/nuclear_reaction_optimization.py +0 -0
  170. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/osprey/__init__.py +0 -0
  171. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/osprey/models.py +0 -0
  172. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/osprey/osprey_optimization.py +0 -0
  173. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/particle_swarm/__init__.py +0 -0
  174. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/particle_swarm/models.py +0 -0
  175. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/particle_swarm/particle_swarm_optimization.py +0 -0
  176. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/pathfinder_algorithm/__init__.py +0 -0
  177. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/pathfinder_algorithm/models.py +0 -0
  178. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/pathfinder_algorithm/pathfinder_algorithm_optimization.py +0 -0
  179. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/pelican/__init__.py +0 -0
  180. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/pelican/models.py +0 -0
  181. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/pelican/pelican_optimization.py +0 -0
  182. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/seagull/__init__.py +0 -0
  183. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/seagull/models.py +0 -0
  184. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/seagull/seagull_optimization.py +0 -0
  185. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/serval/__init__.py +0 -0
  186. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/serval/models.py +0 -0
  187. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/serval/serval_optimization.py +0 -0
  188. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/siberian_tiger/__init__.py +0 -0
  189. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/siberian_tiger/models.py +0 -0
  190. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/siberian_tiger/siberian_tiger_optimization.py +0 -0
  191. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/sine_cosine_algorithm/__init__.py +0 -0
  192. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/sine_cosine_algorithm/classes.py +0 -0
  193. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/sine_cosine_algorithm/models.py +0 -0
  194. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/sine_cosine_algorithm/qle_sine_cosine_algorithm_optimization.py +0 -0
  195. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/sine_cosine_algorithm/sine_cosine_algorithm_optimization.py +0 -0
  196. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/spotted_hyena/__init__.py +0 -0
  197. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/spotted_hyena/models.py +0 -0
  198. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/spotted_hyena/spotted_hyena_optimization.py +0 -0
  199. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/success_history_intelligent/__init__.py +0 -0
  200. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/success_history_intelligent/models.py +0 -0
  201. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/success_history_intelligent/success_history_intelligent_optimization.py +0 -0
  202. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/swarm_hill_climbing/__init__.py +0 -0
  203. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/swarm_hill_climbing/models.py +0 -0
  204. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/swarm_hill_climbing/swarm_hill_climbing_optimization.py +0 -0
  205. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/tasmanian_devil/__init__.py +0 -0
  206. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/tasmanian_devil/models.py +0 -0
  207. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/tasmanian_devil/tasmanian_devil_optimization.py +0 -0
  208. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/tuna_swarm/__init__.py +0 -0
  209. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/tuna_swarm/models.py +0 -0
  210. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/tuna_swarm/tuna_swarm_optimization.py +0 -0
  211. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/utils.py +0 -0
  212. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/virus_colony_search/__init__.py +0 -0
  213. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/virus_colony_search/models.py +0 -0
  214. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/virus_colony_search/virus_colony_search_optimization.py +0 -0
  215. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/walrus/__init__.py +0 -0
  216. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/walrus/models.py +0 -0
  217. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/walrus/walrus_optimization.py +0 -0
  218. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/war_strategy/__init__.py +0 -0
  219. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/war_strategy/models.py +0 -0
  220. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/war_strategy/war_strategy_optimization.py +0 -0
  221. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/water_cycle/__init__.py +0 -0
  222. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/water_cycle/models.py +0 -0
  223. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/water_cycle/water_cycle_optimization.py +0 -0
  224. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/whales/__init__.py +0 -0
  225. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/whales/models.py +0 -0
  226. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/whales/whales_optimization.py +0 -0
  227. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/wildebeest_herd/__init__.py +0 -0
  228. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/wildebeest_herd/models.py +0 -0
  229. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/wildebeest_herd/wildebeest_herd_optimization.py +0 -0
  230. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/wind_driven/__init__.py +0 -0
  231. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/wind_driven/models.py +0 -0
  232. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/wind_driven/wind_driven_optimization.py +0 -0
  233. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/zebra/__init__.py +0 -0
  234. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/zebra/models.py +0 -0
  235. {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/zebra/zebra_optimization.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyVolutionary
3
- Version: 2.3.0
3
+ Version: 2.4.0
4
4
  Summary: pyVolutionary is a package collecting metaheuristic algorithms, available for free usage and able to solve a wide range of optimization problems.
5
5
  Home-page: https://github.com/matteocacciola/pyvolutionary
6
6
  License: MIT
@@ -93,13 +93,15 @@ continuous and discrete variables. In order to do so, you need to define a `Task
93
93
  `Task` class of the library. The list of variables in the problem must be specified in the constructor of the class
94
94
  inheriting from `Task`. The following table describes the types of variables currently implemented in the library.
95
95
 
96
- | Variable type | Class name | Description | Example |
97
- |-----------------|--------------------------|----------------------------------------------------------------|------------------------------------------------------------------------------------|
98
- | Continuous | `ContinuousVariable` | A continuous variable | `ContinuousVariable(name="x0", lower_bound=-100.0, upper_bound=100.0)` |
99
- | Discrete | `DiscreteVariable` | A discrete variable | `DiscreteVariable(choices=["scale", "auto", 0.01, 0.1, 0.5, 1.0], name="gamma")` |
100
- | Permutation | `PermutationVariable` | A permutation of the specified choices | `PermutationVariable(items=[[60, 200], [180, 200], [80, 180]], name="routes")` |
101
- | Binary | `BinaryVariable` | A type of variable used for problems where the data are binary | `BinaryVariable(name="x", n_vars=10)` |
102
- | Multi-objective | `MultiObjectiveVariable` | A type of variable used for multi-objective problems | `MultiObjectiveVariable(name="x", lower_bounds=(-10, -10), upper_bounds=(10, 10))` |
96
+ | Variable type | Class name | Description | Example |
97
+ |------------------|---------------------------|----------------------------------------------------------------|----------------------------------------------------------------------------------------------------------|
98
+ | Continuous | `ContinuousVariable` | A continuous variable | `ContinuousVariable(name="x0", lower_bound=-100.0, upper_bound=100.0)` |
99
+ | Continuous (set) | `ContinuousMultiVariable` | A set of continuous variables | `ContinuousMultiVariable(name="x0", lower_bounds=[-100.0, -200.0], upper_bounds=[100.0, 50.0])` |
100
+ | Discrete | `DiscreteVariable` | A discrete variable | `DiscreteVariable(choices=["scale", "auto", 0.01, 0.1, 0.5, 1.0], name="gamma")` |
101
+ | Discrete (set) | `DiscreteMultiVariable` | A set of discrete variables | `DiscreteMultiVariable(choices=[[0.1, 10, 100], ["scale", "auto", 0.01, 0.1, 0.5, 1.0]], name="params")` |
102
+ | Permutation | `PermutationVariable` | A permutation of the specified choices | `PermutationVariable(items=[[60, 200], [180, 200], [80, 180]], name="routes")` |
103
+ | Binary | `BinaryVariable` | A type of variable used for problems where the data are binary | `BinaryVariable(name="x", n_vars=10)` |
104
+ | Multi-objective | `MultiObjectiveVariable` | A type of variable used for multi-objective problems | `MultiObjectiveVariable(name="x", lower_bounds=(-10, -10), upper_bounds=(10, 10))` |
103
105
 
104
106
  An example of a custom `Task` class is the following:
105
107
 
@@ -176,7 +178,7 @@ task = Sphere(
176
178
  For example, let us inspect how you can solve the continuous _sphere_ problem with the Particle Swarm Optimization algorithm.
177
179
 
178
180
  ```python
179
- from pyvolutionary import ContinuousVariable, ParticleSwarmOptimization, ParticleSwarmOptimizationConfig, Task
181
+ from pyvolutionary import ContinuousMultiVariable, ParticleSwarmOptimization, ParticleSwarmOptimizationConfig, Task
180
182
 
181
183
  # Define the problem, you can replace the following class with your custom problem to optimize
182
184
  class Sphere(Task):
@@ -188,22 +190,14 @@ class Sphere(Task):
188
190
 
189
191
 
190
192
  # Define the task with the bounds and the configuration of the optimizer
191
- population = 200
192
- dimension = 2
193
- position_min = -100.0
194
- position_max = 100.0
195
- generation = 400
196
- fitness_error = 10e-4
197
193
  task = Sphere(
198
- variables=[ContinuousVariable(
199
- name=f"x{i}", lower_bound=position_min, upper_bound=position_max
200
- ) for i in range(dimension)],
194
+ variables=[ContinuousMultiVariable(name="x", lower_bounds=[-100.0, -100.0], upper_bound=[100.0, 100.0])],
201
195
  )
202
196
 
203
197
  configuration = ParticleSwarmOptimizationConfig(
204
- population_size=population,
205
- fitness_error=fitness_error,
206
- max_cycles=generation,
198
+ population_size=200,
199
+ fitness_error=10e-4,
200
+ max_cycles=400,
207
201
  c1=0.1,
208
202
  c2=0.1,
209
203
  w=[0.35, 1],
@@ -438,7 +432,7 @@ implemented in the library):
438
432
 
439
433
  ```python
440
434
  import numpy as np
441
- from pyvolutionary import Task, ContinuousVariable, AntLionOptimization, AntLionOptimizationConfig
435
+ from pyvolutionary import Task, ContinuousMultiVariable, AntLionOptimization, AntLionOptimizationConfig
442
436
 
443
437
  ## Link: https://onlinelibrary.wiley.com/doi/pdf/10.1002/9781119136507.app2
444
438
  class ConstrainedBenchmark(Task):
@@ -482,12 +476,10 @@ class ConstrainedBenchmark(Task):
482
476
 
483
477
 
484
478
  # Define the task with the bounds and the configuration of the optimizer
479
+ lower_bounds = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
480
+ upper_bounds = [1, 1, 1, 1, 1, 1, 1, 1, 1, 100, 100, 100, 1]
485
481
  task = ConstrainedBenchmark(
486
- variables=(
487
- [ContinuousVariable(name=f"x{i}", lower_bound=0, upper_bound=1) for i in range(9)] + [
488
- ContinuousVariable(name=f"x{i}", lower_bound=0, upper_bound=100) for i in range(9, 12)
489
- ] + [ContinuousVariable(name=f"x12", lower_bound=0, upper_bound=1)]
490
- )
482
+ variables=([ContinuousMultiVariable(name="x", lower_bounds=lower_bounds, upper_bounds=upper_bounds)])
491
483
  )
492
484
 
493
485
  configuration = AntLionOptimizationConfig(population_size=200, fitness_error=10e-4, max_cycles=400)
@@ -533,7 +525,7 @@ but it uses the algorithms implemented in the library to perform the search. The
533
525
  ```python
534
526
  from opfunu.cec_based.cec2017 import F52017
535
527
 
536
- from pyvolutionary import ContinuousVariable, Task, BiogeographyBasedOptimization, GridSearchCV
528
+ from pyvolutionary import ContinuousMultiVariable, Task, BiogeographyBasedOptimization, GridSearchCV
537
529
 
538
530
  f1 = F52017(30, f_bias=0)
539
531
 
@@ -546,9 +538,7 @@ class Problem(Task):
546
538
 
547
539
  # Define the task with the bounds and the configuration of the optimizer
548
540
  task = Problem(
549
- variables=[
550
- ContinuousVariable(name=f"x{i}", lower_bound=f1.lb[i], upper_bound=f1.ub[i]) for i in range(0, f1.ndim)
551
- ],
541
+ variables=[ContinuousMultiVariable(name="x", lower_bounds=f1.lb, upper_bounds=f1.ub)],
552
542
  )
553
543
 
554
544
  params_bbo_grid = {
@@ -587,7 +577,7 @@ to use the `Multitask` class:
587
577
  from opfunu.cec_based.cec2017 import F52017, F102017, F292017
588
578
 
589
579
  from pyvolutionary import (
590
- ContinuousVariable,
580
+ ContinuousMultiVariable,
591
581
  Task,
592
582
  NuclearReactionOptimization,
593
583
  Multitask,
@@ -621,19 +611,13 @@ class Problem3(Task):
621
611
 
622
612
 
623
613
  task1 = Problem1(
624
- variables=[
625
- ContinuousVariable(name=f"x{i}", lower_bound=f1.lb[i], upper_bound=f1.ub[i]) for i in range(0, f1.ndim)
626
- ],
614
+ variables=[ContinuousMultiVariable(name="x", lower_bounds=f1.lb, upper_bounds=f1.ub)],
627
615
  )
628
616
  task2 = Problem2(
629
- variables=[
630
- ContinuousVariable(name=f"x{i}", lower_bound=f2.lb[i], upper_bound=f2.ub[i]) for i in range(0, f2.ndim)
631
- ],
617
+ variables=[ContinuousMultiVariable(name="x", lower_bounds=f2.lb, upper_bounds=f2.ub)],
632
618
  )
633
619
  task3 = Problem3(
634
- variables=[
635
- ContinuousVariable(name=f"x{i}", lower_bound=f3.lb[i], upper_bound=f3.ub[i]) for i in range(0, f3.ndim)
636
- ],
620
+ variables=[ContinuousMultiVariable(name="x", lower_bounds=f3.lb, upper_bounds=f3.ub)],
637
621
  )
638
622
 
639
623
  model1 = NuclearReactionOptimization(
@@ -64,13 +64,15 @@ continuous and discrete variables. In order to do so, you need to define a `Task
64
64
  `Task` class of the library. The list of variables in the problem must be specified in the constructor of the class
65
65
  inheriting from `Task`. The following table describes the types of variables currently implemented in the library.
66
66
 
67
- | Variable type | Class name | Description | Example |
68
- |-----------------|--------------------------|----------------------------------------------------------------|------------------------------------------------------------------------------------|
69
- | Continuous | `ContinuousVariable` | A continuous variable | `ContinuousVariable(name="x0", lower_bound=-100.0, upper_bound=100.0)` |
70
- | Discrete | `DiscreteVariable` | A discrete variable | `DiscreteVariable(choices=["scale", "auto", 0.01, 0.1, 0.5, 1.0], name="gamma")` |
71
- | Permutation | `PermutationVariable` | A permutation of the specified choices | `PermutationVariable(items=[[60, 200], [180, 200], [80, 180]], name="routes")` |
72
- | Binary | `BinaryVariable` | A type of variable used for problems where the data are binary | `BinaryVariable(name="x", n_vars=10)` |
73
- | Multi-objective | `MultiObjectiveVariable` | A type of variable used for multi-objective problems | `MultiObjectiveVariable(name="x", lower_bounds=(-10, -10), upper_bounds=(10, 10))` |
67
+ | Variable type | Class name | Description | Example |
68
+ |------------------|---------------------------|----------------------------------------------------------------|----------------------------------------------------------------------------------------------------------|
69
+ | Continuous | `ContinuousVariable` | A continuous variable | `ContinuousVariable(name="x0", lower_bound=-100.0, upper_bound=100.0)` |
70
+ | Continuous (set) | `ContinuousMultiVariable` | A set of continuous variables | `ContinuousMultiVariable(name="x0", lower_bounds=[-100.0, -200.0], upper_bounds=[100.0, 50.0])` |
71
+ | Discrete | `DiscreteVariable` | A discrete variable | `DiscreteVariable(choices=["scale", "auto", 0.01, 0.1, 0.5, 1.0], name="gamma")` |
72
+ | Discrete (set) | `DiscreteMultiVariable` | A set of discrete variables | `DiscreteMultiVariable(choices=[[0.1, 10, 100], ["scale", "auto", 0.01, 0.1, 0.5, 1.0]], name="params")` |
73
+ | Permutation | `PermutationVariable` | A permutation of the specified choices | `PermutationVariable(items=[[60, 200], [180, 200], [80, 180]], name="routes")` |
74
+ | Binary | `BinaryVariable` | A type of variable used for problems where the data are binary | `BinaryVariable(name="x", n_vars=10)` |
75
+ | Multi-objective | `MultiObjectiveVariable` | A type of variable used for multi-objective problems | `MultiObjectiveVariable(name="x", lower_bounds=(-10, -10), upper_bounds=(10, 10))` |
74
76
 
75
77
  An example of a custom `Task` class is the following:
76
78
 
@@ -147,7 +149,7 @@ task = Sphere(
147
149
  For example, let us inspect how you can solve the continuous _sphere_ problem with the Particle Swarm Optimization algorithm.
148
150
 
149
151
  ```python
150
- from pyvolutionary import ContinuousVariable, ParticleSwarmOptimization, ParticleSwarmOptimizationConfig, Task
152
+ from pyvolutionary import ContinuousMultiVariable, ParticleSwarmOptimization, ParticleSwarmOptimizationConfig, Task
151
153
 
152
154
  # Define the problem, you can replace the following class with your custom problem to optimize
153
155
  class Sphere(Task):
@@ -159,22 +161,14 @@ class Sphere(Task):
159
161
 
160
162
 
161
163
  # Define the task with the bounds and the configuration of the optimizer
162
- population = 200
163
- dimension = 2
164
- position_min = -100.0
165
- position_max = 100.0
166
- generation = 400
167
- fitness_error = 10e-4
168
164
  task = Sphere(
169
- variables=[ContinuousVariable(
170
- name=f"x{i}", lower_bound=position_min, upper_bound=position_max
171
- ) for i in range(dimension)],
165
+ variables=[ContinuousMultiVariable(name="x", lower_bounds=[-100.0, -100.0], upper_bound=[100.0, 100.0])],
172
166
  )
173
167
 
174
168
  configuration = ParticleSwarmOptimizationConfig(
175
- population_size=population,
176
- fitness_error=fitness_error,
177
- max_cycles=generation,
169
+ population_size=200,
170
+ fitness_error=10e-4,
171
+ max_cycles=400,
178
172
  c1=0.1,
179
173
  c2=0.1,
180
174
  w=[0.35, 1],
@@ -409,7 +403,7 @@ implemented in the library):
409
403
 
410
404
  ```python
411
405
  import numpy as np
412
- from pyvolutionary import Task, ContinuousVariable, AntLionOptimization, AntLionOptimizationConfig
406
+ from pyvolutionary import Task, ContinuousMultiVariable, AntLionOptimization, AntLionOptimizationConfig
413
407
 
414
408
  ## Link: https://onlinelibrary.wiley.com/doi/pdf/10.1002/9781119136507.app2
415
409
  class ConstrainedBenchmark(Task):
@@ -453,12 +447,10 @@ class ConstrainedBenchmark(Task):
453
447
 
454
448
 
455
449
  # Define the task with the bounds and the configuration of the optimizer
450
+ lower_bounds = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
451
+ upper_bounds = [1, 1, 1, 1, 1, 1, 1, 1, 1, 100, 100, 100, 1]
456
452
  task = ConstrainedBenchmark(
457
- variables=(
458
- [ContinuousVariable(name=f"x{i}", lower_bound=0, upper_bound=1) for i in range(9)] + [
459
- ContinuousVariable(name=f"x{i}", lower_bound=0, upper_bound=100) for i in range(9, 12)
460
- ] + [ContinuousVariable(name=f"x12", lower_bound=0, upper_bound=1)]
461
- )
453
+ variables=([ContinuousMultiVariable(name="x", lower_bounds=lower_bounds, upper_bounds=upper_bounds)])
462
454
  )
463
455
 
464
456
  configuration = AntLionOptimizationConfig(population_size=200, fitness_error=10e-4, max_cycles=400)
@@ -504,7 +496,7 @@ but it uses the algorithms implemented in the library to perform the search. The
504
496
  ```python
505
497
  from opfunu.cec_based.cec2017 import F52017
506
498
 
507
- from pyvolutionary import ContinuousVariable, Task, BiogeographyBasedOptimization, GridSearchCV
499
+ from pyvolutionary import ContinuousMultiVariable, Task, BiogeographyBasedOptimization, GridSearchCV
508
500
 
509
501
  f1 = F52017(30, f_bias=0)
510
502
 
@@ -517,9 +509,7 @@ class Problem(Task):
517
509
 
518
510
  # Define the task with the bounds and the configuration of the optimizer
519
511
  task = Problem(
520
- variables=[
521
- ContinuousVariable(name=f"x{i}", lower_bound=f1.lb[i], upper_bound=f1.ub[i]) for i in range(0, f1.ndim)
522
- ],
512
+ variables=[ContinuousMultiVariable(name="x", lower_bounds=f1.lb, upper_bounds=f1.ub)],
523
513
  )
524
514
 
525
515
  params_bbo_grid = {
@@ -558,7 +548,7 @@ to use the `Multitask` class:
558
548
  from opfunu.cec_based.cec2017 import F52017, F102017, F292017
559
549
 
560
550
  from pyvolutionary import (
561
- ContinuousVariable,
551
+ ContinuousMultiVariable,
562
552
  Task,
563
553
  NuclearReactionOptimization,
564
554
  Multitask,
@@ -592,19 +582,13 @@ class Problem3(Task):
592
582
 
593
583
 
594
584
  task1 = Problem1(
595
- variables=[
596
- ContinuousVariable(name=f"x{i}", lower_bound=f1.lb[i], upper_bound=f1.ub[i]) for i in range(0, f1.ndim)
597
- ],
585
+ variables=[ContinuousMultiVariable(name="x", lower_bounds=f1.lb, upper_bounds=f1.ub)],
598
586
  )
599
587
  task2 = Problem2(
600
- variables=[
601
- ContinuousVariable(name=f"x{i}", lower_bound=f2.lb[i], upper_bound=f2.ub[i]) for i in range(0, f2.ndim)
602
- ],
588
+ variables=[ContinuousMultiVariable(name="x", lower_bounds=f2.lb, upper_bounds=f2.ub)],
603
589
  )
604
590
  task3 = Problem3(
605
- variables=[
606
- ContinuousVariable(name=f"x{i}", lower_bound=f3.lb[i], upper_bound=f3.ub[i]) for i in range(0, f3.ndim)
607
- ],
591
+ variables=[ContinuousMultiVariable(name="x", lower_bounds=f3.lb, upper_bounds=f3.ub)],
608
592
  )
609
593
 
610
594
  model1 = NuclearReactionOptimization(
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pyVolutionary"
3
- version = "2.3.0"
3
+ version = "2.4.0"
4
4
  description = "pyVolutionary is a package collecting metaheuristic algorithms, available for free usage and able to solve a wide range of optimization problems."
5
5
  authors = ["Matteo Cacciola <matteo.cacciola@gmail.com>"]
6
6
  license = "MIT"
@@ -80,7 +80,9 @@ from .models import (
80
80
  Agent,
81
81
  Task,
82
82
  ContinuousVariable,
83
+ ContinuousMultiVariable,
83
84
  DiscreteVariable,
85
+ DiscreteMultiVariable,
84
86
  PermutationVariable,
85
87
  MultiObjectiveVariable,
86
88
  BinaryVariable,
@@ -1,6 +1,6 @@
1
1
  from abc import ABC, abstractmethod
2
2
  from dataclasses import field
3
- from typing import TypeVar
3
+ from typing import TypeVar, List, Tuple
4
4
  from typing import Any
5
5
  import numpy as np
6
6
  from pydantic import BaseModel, field_validator, model_validator, ConfigDict, PrivateAttr
@@ -198,6 +198,49 @@ class ContinuousVariable(Variable):
198
198
  return False
199
199
 
200
200
 
201
+ class ContinuousMultiVariable(Variable):
202
+ lower_bounds: list[float]
203
+ upper_bounds: list[float]
204
+
205
+ _children: list[ContinuousVariable] = PrivateAttr()
206
+
207
+ def __init__(self, **kwargs: Any):
208
+ super().__init__(**kwargs)
209
+ lower_bounds, upper_bounds = self.get_bounds()
210
+ self._children = [ContinuousVariable(
211
+ name=f"{self.name}{i}", lower_bound=lb, upper_bound=ub
212
+ ) for i, (lb, ub) in enumerate(zip(lower_bounds, upper_bounds))]
213
+
214
+ @model_validator(mode="after")
215
+ def validate_bounds(self) -> "ContinuousMultiVariable":
216
+ if len(self.lower_bounds) != len(self.upper_bounds):
217
+ raise ValueError("Lower and upper bounds must have the same length")
218
+ if np.any(np.array([ub <= lb for lb, ub in zip(self.lower_bounds, self.upper_bounds)])):
219
+ raise ValueError("Upper bound must be greater than lower bound")
220
+ return self
221
+
222
+ def get(self) -> list["ContinuousVariable"]:
223
+ return self._children
224
+
225
+ def randomize(self):
226
+ return [v.randomize() for v in self._children]
227
+
228
+ def get_bounds(self) -> tuple[tuple[float] | list[float], tuple[float] | list[float]]:
229
+ return self.lower_bounds, self.upper_bounds
230
+
231
+ def correct(self, value: list):
232
+ return [v.correct(value[idx]) for idx, v in enumerate(self._children)]
233
+
234
+ def decode(self, value: list) -> list:
235
+ return [v.decode(value[idx]) for idx, v in enumerate(self._children)]
236
+
237
+ def size(self) -> int:
238
+ return len(self.lower_bounds)
239
+
240
+ def has_children(self) -> bool:
241
+ return True
242
+
243
+
201
244
  class DiscreteVariable(Variable):
202
245
  choices: list[Any]
203
246
 
@@ -224,6 +267,39 @@ class DiscreteVariable(Variable):
224
267
  return False
225
268
 
226
269
 
270
+ class DiscreteMultiVariable(Variable):
271
+ choices: list[list[Any]]
272
+
273
+ _children: list[DiscreteVariable] = PrivateAttr()
274
+
275
+ def __init__(self, **kwargs: Any):
276
+ super().__init__(**kwargs)
277
+ self._children = [
278
+ DiscreteVariable(name=f"{self.name}{i}", choices=self.choices[i]) for i in range(len(self.choices))
279
+ ]
280
+
281
+ def get(self) -> list["DiscreteVariable"]:
282
+ return self._children
283
+
284
+ def randomize(self):
285
+ return [v.randomize() for v in self._children]
286
+
287
+ def get_bounds(self) -> list[tuple[int, int]]:
288
+ return [v.get_bounds() for v in self._children]
289
+
290
+ def correct(self, value: list):
291
+ return [v.correct(value[idx]) for idx, v in enumerate(self._children)]
292
+
293
+ def decode(self, value: list) -> list:
294
+ return [v.decode(value[idx]) for idx, v in enumerate(self._children)]
295
+
296
+ def size(self) -> int:
297
+ return len(self.choices)
298
+
299
+ def has_children(self) -> bool:
300
+ return True
301
+
302
+
227
303
  class PermutationVariable(Variable):
228
304
  items: list[Any]
229
305