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.
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/PKG-INFO +25 -41
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/README.md +24 -40
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyproject.toml +1 -1
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/__init__.py +2 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/models.py +77 -1
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/abstract.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/african_vulture/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/african_vulture/african_vulture_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/african_vulture/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/ant_colony/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/ant_colony/ant_colony_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/ant_colony/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/ant_lion/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/ant_lion/ant_lion_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/ant_lion/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/aquila/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/aquila/aquila_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/aquila/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/archimede/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/archimede/archimede_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/archimede/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bacterial_foraging/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bacterial_foraging/bacterial_foraging_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bacterial_foraging/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bat/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bat/bat_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bat/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bee_colony/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bee_colony/bee_colony_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bee_colony/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/biogeography_based/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/biogeography_based/biogeography_based_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/biogeography_based/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/brain_storm/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/brain_storm/brain_storm_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/brain_storm/improved_brain_storm_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/brain_storm/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/brown_bear/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/brown_bear/brown_bear_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/brown_bear/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/camel_caravan/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/camel_caravan/camel_caravan_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/camel_caravan/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/cat_swarm/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/cat_swarm/cat_swarm_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/cat_swarm/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/chaos_game/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/chaos_game/chaos_game_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/chaos_game/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/chernobyl_disaster/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/chernobyl_disaster/chernobyl_disaster_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/chernobyl_disaster/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coati/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coati/coati_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coati/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coral_reef/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coral_reef/coral_reef_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coral_reef/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coronavirus_herd_immunity/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coronavirus_herd_immunity/coronavirus_herd_immunity_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coronavirus_herd_immunity/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coyotes/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coyotes/coyotes_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coyotes/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/cuckoo_search/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/cuckoo_search/cuckoo_search_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/cuckoo_search/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/dragonfly/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/dragonfly/dragonfly_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/dragonfly/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/dwarf_mongoose/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/dwarf_mongoose/dwarf_mongoose_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/dwarf_mongoose/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/earthworms/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/earthworms/earthworms_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/earthworms/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/egret_swarm/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/egret_swarm/egret_swarm_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/egret_swarm/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/electromagnetic_field/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/electromagnetic_field/electromagnetic_field_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/electromagnetic_field/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/elephant_herd/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/elephant_herd/elephant_herd_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/elephant_herd/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/energy_valley/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/energy_valley/energy_valley_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/energy_valley/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/enums.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/firefly_swarm/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/firefly_swarm/firefly_swarm_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/firefly_swarm/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/firehawk/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/firehawk/firehawk_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/firehawk/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fireworks/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fireworks/fireworks_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fireworks/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fish_school_search/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fish_school_search/fish_school_search_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fish_school_search/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/flower_pollination_algorithm/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/flower_pollination_algorithm/flower_pollination_algorithm_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/flower_pollination_algorithm/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/forensic_based_investigation/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/forensic_based_investigation/forensic_based_investigation_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/forensic_based_investigation/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/forest_algorithm/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/forest_algorithm/forest_optimization_algorithm.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/forest_algorithm/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fox/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fox/fox_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/fox/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/genetic_algorithm/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/genetic_algorithm/classes.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/genetic_algorithm/genetic_algorithm_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/genetic_algorithm/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/germinal_center/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/germinal_center/germinal_center_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/germinal_center/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/giant_trevally/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/giant_trevally/giant_trevally_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/giant_trevally/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/giza_pyramid_construction/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/giza_pyramid_construction/giza_pyramid_construction_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/giza_pyramid_construction/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/golden_jackal/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/golden_jackal/golden_jackal_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/golden_jackal/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/grasshopper/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/grasshopper/grasshopper_optimization_algorithm.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/grasshopper/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/grey_wolf/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/grey_wolf/grey_wolf_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/grey_wolf/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/gridsearchcv.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/harmony_search/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/harmony_search/harmony_search_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/harmony_search/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/helpers.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/imperialist_competitive/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/imperialist_competitive/classes.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/imperialist_competitive/imperialist_competitive_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/imperialist_competitive/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/invasive_weed/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/invasive_weed/invasive_weed_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/invasive_weed/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/krill_herd/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/krill_herd/krill_herd_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/krill_herd/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/levi_jaya_swarm/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/levi_jaya_swarm/levy_flight_jaya_swarm_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/levi_jaya_swarm/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/marine_predators/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/marine_predators/marine_predators_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/marine_predators/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/monarch_butterfly/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/monarch_butterfly/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/monarch_butterfly/monarch_butterfly_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/moth_flame/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/moth_flame/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/moth_flame/moth_flame_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/mountain_gazelle/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/mountain_gazelle/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/mountain_gazelle/mountain_gazelle_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/multitask.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/nuclear_reaction/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/nuclear_reaction/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/nuclear_reaction/nuclear_reaction_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/osprey/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/osprey/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/osprey/osprey_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/particle_swarm/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/particle_swarm/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/particle_swarm/particle_swarm_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/pathfinder_algorithm/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/pathfinder_algorithm/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/pathfinder_algorithm/pathfinder_algorithm_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/pelican/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/pelican/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/pelican/pelican_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/seagull/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/seagull/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/seagull/seagull_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/serval/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/serval/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/serval/serval_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/siberian_tiger/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/siberian_tiger/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/siberian_tiger/siberian_tiger_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/sine_cosine_algorithm/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/sine_cosine_algorithm/classes.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/sine_cosine_algorithm/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/sine_cosine_algorithm/qle_sine_cosine_algorithm_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/sine_cosine_algorithm/sine_cosine_algorithm_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/spotted_hyena/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/spotted_hyena/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/spotted_hyena/spotted_hyena_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/success_history_intelligent/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/success_history_intelligent/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/success_history_intelligent/success_history_intelligent_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/swarm_hill_climbing/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/swarm_hill_climbing/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/swarm_hill_climbing/swarm_hill_climbing_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/tasmanian_devil/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/tasmanian_devil/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/tasmanian_devil/tasmanian_devil_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/tuna_swarm/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/tuna_swarm/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/tuna_swarm/tuna_swarm_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/utils.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/virus_colony_search/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/virus_colony_search/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/virus_colony_search/virus_colony_search_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/walrus/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/walrus/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/walrus/walrus_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/war_strategy/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/war_strategy/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/war_strategy/war_strategy_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/water_cycle/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/water_cycle/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/water_cycle/water_cycle_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/whales/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/whales/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/whales/whales_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/wildebeest_herd/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/wildebeest_herd/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/wildebeest_herd/wildebeest_herd_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/wind_driven/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/wind_driven/models.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/wind_driven/wind_driven_optimization.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/zebra/__init__.py +0 -0
- {pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/zebra/models.py +0 -0
- {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
|
+
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
|
|
97
|
-
|
|
98
|
-
| Continuous
|
|
99
|
-
|
|
|
100
|
-
|
|
|
101
|
-
|
|
|
102
|
-
|
|
|
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
|
|
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=[
|
|
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=
|
|
205
|
-
fitness_error=
|
|
206
|
-
max_cycles=
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
|
68
|
-
|
|
69
|
-
| Continuous
|
|
70
|
-
|
|
|
71
|
-
|
|
|
72
|
-
|
|
|
73
|
-
|
|
|
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
|
|
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=[
|
|
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=
|
|
176
|
-
fitness_error=
|
|
177
|
-
max_cycles=
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
+
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"
|
|
@@ -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
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/ant_colony/ant_colony_optimization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/archimede/archimede_optimization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/bee_colony/bee_colony_optimization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/brain_storm/brain_storm_optimization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/brown_bear/brown_bear_optimization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/cat_swarm/cat_swarm_optimization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/chaos_game/chaos_game_optimization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coral_reef/coral_reef_optimization.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coronavirus_herd_immunity/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/coronavirus_herd_immunity/models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/dragonfly/dragonfly_optimization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/earthworms/earthworms_optimization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyvolutionary-2.3.0 → pyvolutionary-2.4.0}/pyvolutionary/egret_swarm/egret_swarm_optimization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|