
Security News
The Changelog Podcast: Practical Steps to Stay Safe on npm
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.
MEALPY is the world's largest Python library, offering a comprehensive collection of cutting-edge meta-heuristic algorithms. These include nature-inspired algorithms, bio-inspired algorithms, black-box optimization, global search optimizers, iterative learning algorithms, continuous optimization, derivative-free optimization, gradient-free optimization, zeroth-order optimization, stochastic search optimization, and random search optimization. All these methods fall under the category of population-based metaheuristics (PBMs), which are among the most popular algorithms in the field of approximate optimization. For detailed updates in each new version, please refer to the ChangeLog file.
Our goals are to implement all classical as well as the state-of-the-art nature-inspired algorithms, create a simple interface that helps researchers access optimization algorithms as quickly as possible, and share knowledge of the optimization field with everyone without a fee. What you can do with mealpy:
Please include these citations if you plan to use this library:
@article{van2023mealpy,
title={MEALPY: An open-source library for latest meta-heuristic algorithms in Python},
author={Van Thieu, Nguyen and Mirjalili, Seyedali},
journal={Journal of Systems Architecture},
year={2023},
publisher={Elsevier},
doi={10.1016/j.sysarc.2023.102871}
}
@article{van2023groundwater,
title={Groundwater level modeling using Augmented Artificial Ecosystem Optimization},
author={Van Thieu, Nguyen and Barma, Surajit Deb and Van Lam, To and Kisi, Ozgur and Mahesha, Amai},
journal={Journal of Hydrology},
volume={617},
pages={129034},
year={2023},
publisher={Elsevier},
doi={https://doi.org/10.1016/j.jhydrol.2022.129034}
}
@article{ahmed2021comprehensive,
title={A comprehensive comparison of recent developed meta-heuristic algorithms for streamflow time series forecasting problem},
author={Ahmed, Ali Najah and Van Lam, To and Hung, Nguyen Duy and Van Thieu, Nguyen and Kisi, Ozgur and El-Shafie, Ahmed},
journal={Applied Soft Computing},
volume={105},
pages={107282},
year={2021},
publisher={Elsevier},
doi={10.1016/j.asoc.2021.107282}
}
$ pip install mealpy --upgrade
$ pip install mealpy==2.5.4a6
$ git clone https://github.com/thieu1995/mealpy.git
$ cd mealpy
$ python setup.py install
$ pip install git+https://github.com/thieu1995/mealpy
After installation, check the version to ensure successful installation:
$ python
>>> import mealpy
>>> mealpy.__version__
>>> print(mealpy.get_all_optimizers())
>>> model = mealpy.get_optimizer_by_name("OriginalWOA")(epoch=100, pop_size=50)
Before we dive into some examples, let's briefly consider the type of problem you're aiming to solve with MEALPY. Understanding your specific problem and its desired solution can help you select the most appropriate approach.
To assist you in choosing the right tools, refer to the table below. It outlines different types of decision variables available in MEALPY, along with their syntax and common problem applications. This will guide you in defining your search space effectively.
| Class | Syntax | Problem Types |
|---|---|---|
| FloatVar | FloatVar(lb=(-10., )*7, ub=(10., )*7, name="delta") | Continuous Problem |
| IntegerVar | IntegerVar(lb=(-10., )*7, ub=(10., )*7, name="delta") | LP, IP, NLP, QP, MIP |
| StringVar | StringVar(valid_sets=(("auto", "backward", "forward"), ("leaf", "branch", "root")), name="delta") | ML, AI-optimize |
| BinaryVar | BinaryVar(n_vars=11, name="delta") | Networks |
| BoolVar | BoolVar(n_vars=11, name="delta") | ML, AI-optimize |
| PermutationVar | PermutationVar(valid_set=(-10, -4, 10, 6, -2), name="delta") | Combinatorial Optimization |
| CategoricalVar | CategoricalVar(valid_sets=(("auto", 2, 3, "backward", True), (0, "tournament", "round-robin")), name="delta") | MIP, MILP |
| SequenceVar | SequenceVar(valid_sets=((1, ), {2, 3}, [3, 5, 1]), return_type=list, name='delta') | Hyper-parameter tuning |
| TransferBoolVar | TransferBoolVar(n_vars=11, name="delta", tf_func="sstf_02") | ML, AI-optimize, Feature |
| TransferBinaryVar | TransferBinaryVar(n_vars=11, name="delta", tf_func="vstf_04") | Networks, Feature Selection |

** For newbie, we recommend to read the paper of algorithms which difficulty is "easy" or "medium" difficulty level.
| Group | Name | Module | Class | Year | Paras | Difficulty |
|---|---|---|---|---|---|---|
| Evolutionary | Evolutionary Programming | EP | OriginalEP | 1964 | 3 | easy |
| Evolutionary | * | * | LevyEP | * | 3 | easy |
| Evolutionary | Evolution Strategies | ES | OriginalES | 1971 | 3 | easy |
| Evolutionary | * | * | LevyES | * | 3 | easy |
| Evolutionary | * | * | CMA_ES | 2003 | 2 | hard |
| Evolutionary | * | * | Simple_CMA_ES | 2023 | 2 | medium |
| Evolutionary | Memetic Algorithm | MA | OriginalMA | 1989 | 7 | easy |
| Evolutionary | Genetic Algorithm | GA | BaseGA | 1992 | 4 | easy |
| Evolutionary | * | * | SingleGA | * | 7 | easy |
| Evolutionary | * | * | MultiGA | * | 7 | easy |
| Evolutionary | * | * | EliteSingleGA | * | 10 | easy |
| Evolutionary | * | * | EliteMultiGA | * | 10 | easy |
| Evolutionary | Differential Evolution | DE | BaseDE | 1997 | 5 | easy |
| Evolutionary | * | * | JADE | 2009 | 6 | medium |
| Evolutionary | * | * | SADE | 2005 | 2 | medium |
| Evolutionary | * | * | SAP_DE | 2006 | 3 | medium |
| Evolutionary | Success-History Adaptation Differential Evolution | SHADE | OriginalSHADE | 2013 | 4 | medium |
| Evolutionary | * | * | L_SHADE | 2014 | 4 | medium |
| Evolutionary | Flower Pollination Algorithm | FPA | OriginalFPA | 2014 | 4 | medium |
| Evolutionary | Coral Reefs Optimization | CRO | OriginalCRO | 2014 | 11 | medium |
| Evolutionary | * | * | OCRO | 2019 | 12 | medium |
| *** | *** | *** | *** | *** | *** | *** |
| Swarm | Particle Swarm Optimization | PSO | OriginalPSO | 1995 | 6 | easy |
| Swarm | * | * | PPSO | 2019 | 2 | medium |
| Swarm | * | * | HPSO_TVAC | 2017 | 4 | medium |
| Swarm | * | * | C_PSO | 2015 | 6 | medium |
| Swarm | * | * | CL_PSO | 2006 | 6 | medium |
| Swarm | Bacterial Foraging Optimization | BFO | OriginalBFO | 2002 | 10 | hard |
| Swarm | * | * | ABFO | 2019 | 8 | medium |
| Swarm | Bees Algorithm | BeesA | OriginalBeesA | 2005 | 8 | medium |
| Swarm | * | * | ProbBeesA | 2015 | 5 | medium |
| Swarm | * | * | CleverBookBeesA | 2006 | 8 | medium |
| Swarm | Cat Swarm Optimization | CSO | OriginalCSO | 2006 | 11 | hard |
| Swarm | Artificial Bee Colony | ABC | OriginalABC | 2007 | 8 | medium |
| Swarm | Ant Colony Optimization | ACOR | OriginalACOR | 2008 | 5 | easy |
| Swarm | Cuckoo Search Algorithm | CSA | OriginalCSA | 2009 | 3 | medium |
| Swarm | Firefly Algorithm | FFA | OriginalFFA | 2009 | 8 | easy |
| Swarm | Fireworks Algorithm | FA | OriginalFA | 2010 | 7 | medium |
| Swarm | Bat Algorithm | BA | OriginalBA | 2010 | 6 | medium |
| Swarm | * | * | AdaptiveBA | 2010 | 8 | medium |
| Swarm | * | * | ModifiedBA | * | 5 | medium |
| Swarm | Fruit-fly Optimization Algorithm | FOA | OriginalFOA | 2012 | 2 | easy |
| Swarm | * | * | BaseFOA | * | 2 | easy |
| Swarm | * | * | WhaleFOA | 2020 | 2 | medium |
| Swarm | Social Spider Optimization | SSpiderO | OriginalSSpiderO | 2018 | 4 | hard* |
| Swarm | Spider Monkey Optimization | SMO | DevSMO | 2014 | 4 | hard |
| Swarm | Grey Wolf Optimizer | GWO | OriginalGWO | 2014 | 2 | easy |
| Swarm | * | * | RW_GWO | 2019 | 2 | easy |
| Swarm | * | * | GWO_WOA | 2022 | 2 | easy |
| Swarm | * | * | IGWO | 2018 | 4 | easy |
| Swarm | * | * | ChaoticGWO | 2018 | 4 | easy |
| Swarm | * | * | FuzzyGWO | 2017 | 3 | medium |
| Swarm | * | * | IncrementalGWO | 2021 | 3 | medium |
| Swarm | * | * | ExGWO | 2021 | 2 | medium |
| Swarm | * | * | DS_GWO | 2022 | 4 | medium |
| Swarm | * | * | IOBL_GWO | 2021 | 2 | medium |
| Swarm | * | * | OGWO | 2021 | 4 | medium |
| Swarm | * | * | ER_GWO | 2020 | 5 | medium |
| Swarm | * | * | CG_GWO | 2022 | 2 | hard |
| Swarm | Social Spider Algorithm | SSpiderA | OriginalSSpiderA | 2015 | 5 | medium |
| Swarm | Ant Lion Optimizer | ALO | OriginalALO | 2015 | 2 | easy |
| Swarm | * | * | BaseALO | * | 2 | easy |
| Swarm | Moth Flame Optimization | MFO | OriginalMFO | 2015 | 2 | easy |
| Swarm | * | * | BaseMFO | * | 2 | easy |
| Swarm | Elephant Herding Optimization | EHO | OriginalEHO | 2015 | 5 | easy |
| Swarm | Jaya Algorithm | JA | OriginalJA | 2016 | 2 | easy |
| Swarm | * | * | BaseJA | * | 2 | easy |
| Swarm | * | * | LevyJA | 2021 | 2 | easy |
| Swarm | Whale Optimization Algorithm | WOA | OriginalWOA | 2016 | 2 | medium |
| Swarm | * | * | HI_WOA | 2019 | 3 | medium |
| Swarm | Dragonfly Optimization | DO | OriginalDO | 2016 | 2 | medium |
| Swarm | Bird Swarm Algorithm | BSA | OriginalBSA | 2016 | 9 | medium |
| Swarm | Spotted Hyena Optimizer | SHO | OriginalSHO | 2017 | 4 | medium |
| Swarm | Salp Swarm Optimization | SSO | OriginalSSO | 2017 | 2 | easy |
| Swarm | Swarm Robotics Search And Rescue | SRSR | OriginalSRSR | 2017 | 2 | hard* |
| Swarm | Grasshopper Optimisation Algorithm | GOA | OriginalGOA | 2017 | 4 | easy |
| Swarm | Coyote Optimization Algorithm | COA | OriginalCOA | 2018 | 3 | medium |
| Swarm | Moth Search Algorithm | MSA | OriginalMSA | 2018 | 5 | easy |
| Swarm | Squirrel Search Algorithm | SquirrelSA | OriginalSquirrelSA | 2019 | 7 | medium |
| Swarm | Fitness Dependent Optimizer | FDO | OriginalFDO | 2019 | 3 | medium |
| Swarm | Sea Lion Optimization | SLO | OriginalSLO | 2019 | 2 | medium |
| Swarm | * | * | ModifiedSLO | * | 2 | medium |
| Swarm | * | * | ImprovedSLO | 2022 | 4 | medium |
| Swarm | Emperor Penguins Colony/td> | EPC | DevEPC | 2019 | 6 | hard |
| Swarm | Nake Mole*Rat Algorithm | NMRA | OriginalNMRA | 2019 | 3 | easy |
| Swarm | * | * | ImprovedNMRA | * | 4 | medium |
| Swarm | Pathfinder Algorithm | PFA | OriginalPFA | 2019 | 2 | medium |
| Swarm | Sailfish Optimizer | SFO | OriginalSFO | 2019 | 5 | easy |
| Swarm | * | * | ImprovedSFO | * | 3 | medium |
| Swarm | Harris Hawks Optimization | HHO | OriginalHHO | 2019 | 2 | medium |
| Swarm | Manta Ray Foraging Optimization | MRFO | OriginalMRFO | 2020 | 3 | medium |
| Swarm | Bald Eagle Search | BES | OriginalBES | 2020 | 7 | easy |
| Swarm | Sparrow Search Algorithm | SSA | OriginalSSA | 2020 | 5 | medium |
| Swarm | * | * | BaseSSA | * | 5 | medium |
| Swarm | Hunger Games Search | HGS | OriginalHGS | 2021 | 4 | medium |
| Swarm | Aquila Optimizer | AO | OriginalAO | 2021 | 2 | easy |
| Swarm | * | * | AAO | 2024 | 4 | easy |
| Swarm | Hybrid Grey Wolf * Whale Optimization Algorithm | GWO | GWO_WOA | 2022 | 2 | easy |
| Swarm | Marine Predators Algorithm | MPA | OriginalMPA | 2020 | 2 | medium |
| Swarm | Honey Badger Algorithm | HBA | OriginalHBA | 2022 | 2 | easy |
| Swarm | Sand Cat Swarm Optimization | SCSO | OriginalSCSO | 2022 | 2 | easy |
| Swarm | Tuna Swarm Optimization | TSO | OriginalTSO | 2021 | 2 | medium |
| Swarm | African Vultures Optimization Algorithm | AVOA | OriginalAVOA | 2022 | 7 | medium |
| Swarm | Artificial Gorilla Troops Optimization | AGTO | OriginalAGTO | 2021 | 5 | medium |
| Swarm | * | * | MGTO | 2023 | 3 | medium |
| Swarm | Artificial Rabbits Optimization | ARO | OriginalARO | 2022 | 2 | easy |
| Swarm | * | * | LARO | 2022 | 2 | easy |
| Swarm | * | * | IARO | 2022 | 2 | easy |
| Swarm | Egret Swarm Optimization Algorithm | ESOA | OriginalESOA | 2022 | 2 | medium |
| Swarm | Fox Optimizer | FOX | OriginalFOX | 2023 | 4 | easy |
| Swarm | Golden Jackal Optimization | GJO | OriginalGJO | 2022 | 2 | easy |
| Swarm | Giant Trevally Optimization | GTO | OriginalGTO | 2022 | 4 | medium |
| Swarm | * | * | Matlab101GTO | 2022 | 2 | medium |
| Swarm | * | * | Matlab102GTO | 2023 | 2 | hard |
| Swarm | Mountain Gazelle Optimizer | MGO | OriginalMGO | 2022 | 2 | easy |
| Swarm | Sea-Horse Optimization | SeaHO | OriginalSeaHO | 2022 | 2 | medium |
| *** | *** | *** | *** | *** | *** | *** |
| Physics | Simulated Annealling | SA | OriginalSA | 1983 | 9 | medium |
| Physics | * | * | GaussianSA | * | 5 | medium |
| Physics | * | * | SwarmSA | 1987 | 9 | medium |
| Physics | Wind Driven Optimization | WDO | OriginalWDO | 2013 | 7 | easy |
| Physics | Multi*Verse Optimizer | MVO | OriginalMVO | 2016 | 4 | easy |
| Physics | * | * | BaseMVO | * | 4 | easy |
| Physics | Tug of War Optimization | TWO | OriginalTWO | 2016 | 2 | easy |
| Physics | * | * | OppoTWO | * | 2 | medium |
| Physics | * | * | LevyTWO | * | 2 | medium |
| Physics | * | * | EnhancedTWO | 2020 | 2 | medium |
| Physics | Electromagnetic Field Optimization | EFO | OriginalEFO | 2016 | 6 | easy |
| Physics | * | * | BaseEFO | * | 6 | medium |
| Physics | Nuclear Reaction Optimization | NRO | OriginalNRO | 2019 | 2 | hard* |
| Physics | Henry Gas Solubility Optimization | HGSO | OriginalHGSO | 2019 | 3 | medium |
| Physics | Atom Search Optimization | ASO | OriginalASO | 2019 | 4 | medium |
| Physics | Equilibrium Optimizer | EO | OriginalEO | 2019 | 2 | easy |
| Physics | * | * | ModifiedEO | 2020 | 2 | medium |
| Physics | * | * | AdaptiveEO | 2020 | 2 | medium |
| Physics | Archimedes Optimization Algorithm | ArchOA | OriginalArchOA | 2021 | 8 | medium |
| Physics | Chernobyl Disaster Optimization | CDO | OriginalCDO | 2023 | 2 | easy |
| Physics | Energy Valley Optimization | EVO | OriginalEVO | 2023 | 2 | medium |
| Physics | Fick's Law Algorithm | FLA | OriginalFLA | 2023 | 8 | hard |
| Physics | Physical Phenomenon of RIME-ice | RIME | OriginalRIME | 2023 | 3 | easy |
| Physics | Electrical Storm Optimization | ESO | OriginalESO | 2025 | 2 | hard |
| *** | *** | *** | *** | *** | *** | *** |
| Human | Culture Algorithm | CA | OriginalCA | 1994 | 3 | easy |
| Human | Imperialist Competitive Algorithm | ICA | OriginalICA | 2007 | 8 | hard* |
| Human | Teaching Learning*based Optimization | TLO | OriginalTLO | 2011 | 2 | easy |
| Human | * | * | BaseTLO | 2012 | 2 | easy |
| Human | * | * | ITLO | 2013 | 3 | medium |
| Human | Brain Storm Optimization | BSO | OriginalBSO | 2011 | 8 | medium |
| Human | * | * | ImprovedBSO | 2017 | 7 | medium |
| Human | Queuing Search Algorithm | QSA | OriginalQSA | 2019 | 2 | hard |
| Human | * | * | BaseQSA | * | 2 | hard |
| Human | * | * | OppoQSA | * | 2 | hard |
| Human | * | * | LevyQSA | * | 2 | hard |
| Human | * | * | ImprovedQSA | 2021 | 2 | hard |
| Human | Search And Rescue Optimization | SARO | OriginalSARO | 2019 | 4 | medium |
| Human | * | * | BaseSARO | * | 4 | medium |
| Human | Life Choice*Based Optimization | LCO | OriginalLCO | 2019 | 3 | easy |
| Human | * | * | BaseLCO | * | 3 | easy |
| Human | * | * | ImprovedLCO | * | 2 | easy |
| Human | Social Ski*Driver Optimization | SSDO | OriginalSSDO | 2019 | 2 | easy |
| Human | Gaining Sharing Knowledge*based Algorithm | GSKA | OriginalGSKA | 2019 | 6 | medium |
| Human | * | * | BaseGSKA | * | 4 | medium |
| Human | Coronavirus Herd Immunity Optimization | CHIO | OriginalCHIO | 2020 | 4 | medium |
| Human | * | * | BaseCHIO | * | 4 | medium |
| Human | Forensic*Based Investigation Optimization | FBIO | OriginalFBIO | 2020 | 2 | medium |
| Human | * | * | BaseFBIO | * | 2 | medium |
| Human | Battle Royale Optimization | BRO | OriginalBRO | 2020 | 3 | medium |
| Human | * | * | BaseBRO | * | 3 | medium |
| Human | Student Psychology Based Optimization | SPBO | OriginalSPBO | 2020 | 2 | medium |
| Human | * | * | DevSPBO | * | 2 | medium |
| Human | Heap-based Optimization | HBO | OriginalHBO | 2020 | 3 | medium |
| Human | Human Conception Optimization | HCO | OriginalHCO | 2022 | 6 | medium |
| Human | Ali baba and the Forty Thieves | AFT | OriginalAFT | 2022 | 2 | easy |
| Human | Child Drawing Development Optimization | CDDO | OriginalCDDO | 2022 | 4 | easy |
| Human | Dwarf Mongoose Optimization Algorithm | DMOA | OriginalDMOA | 2022 | 4 | medium |
| Human | * | * | DevDMOA | * | 3 | medium |
| Human | War Strategy Optimization | WarSO | OriginalWarSO | 2022 | 3 | easy |
| *** | *** | *** | *** | *** | *** | *** |
| Bio | Invasive Weed Optimization | IWO | OriginalIWO | 2006 | 7 | easy |
| Bio | Biogeography*Based Optimization | BBO | OriginalBBO | 2008 | 4 | easy |
| Bio | * | * | BaseBBO | * | 4 | easy |
| Bio | Virus Colony Search | VCS | OriginalVCS | 2016 | 4 | hard* |
| Bio | * | * | BaseVCS | * | 4 | hard* |
| Bio | Satin Bowerbird Optimizer | SBO | OriginalSBO | 2017 | 5 | easy |
| Bio | * | * | BaseSBO | * | 5 | easy |
| Bio | Earthworm Optimisation Algorithm | EOA | OriginalEOA | 2018 | 8 | medium |
| Bio | Wildebeest Herd Optimization | WHO | OriginalWHO | 2019 | 12 | hard |
| Bio | Slime Mould Algorithm | SMA | OriginalSMA | 2020 | 3 | easy |
| Bio | * | * | BaseSMA | * | 3 | easy |
| Bio | Barnacles Mating Optimizer | BMO | OriginalBMO | 2018 | 3 | easy |
| Bio | Tunicate Swarm Algorithm | TSA | OriginalTSA | 2020 | 2 | easy |
| Bio | Symbiotic Organisms Search | SOS | OriginalSOS | 2014 | 2 | medium |
| Bio | Seagull Optimization Algorithm | SOA | OriginalSOA | 2019 | 3 | easy |
| Bio | * | * | DevSOA | * | 3 | easy |
| Bio | Brown-Bear Optimization Algorithm | BBOA | OriginalBBOA | 2023 | 2 | medium |
| Bio | Tree Physiology Optimization | TPO | OriginalTPO | 2017 | 5 | medium |
| *** | *** | *** | *** | *** | *** | *** |
| System | Germinal Center Optimization | GCO | OriginalGCO | 2018 | 4 | medium |
| System | * | * | BaseGCO | * | 4 | medium |
| System | Water Cycle Algorithm | WCA | OriginalWCA | 2012 | 5 | medium |
| System | Artificial Ecosystem*based Optimization | AEO | OriginalAEO | 2019 | 2 | easy |
| System | * | * | EnhancedAEO | 2020 | 2 | medium |
| System | * | * | ModifiedAEO | 2020 | 2 | medium |
| System | * | * | ImprovedAEO | 2021 | 2 | medium |
| System | * | * | AugmentedAEO | 2022 | 2 | medium |
| *** | *** | *** | *** | *** | *** | *** |
| Math | Hill Climbing | HC | OriginalHC | 1993 | 3 | easy |
| Math | * | * | SwarmHC | * | 3 | easy |
| Math | Cross-Entropy Method | CEM | OriginalCEM | 1997 | 4 | easy |
| Math | Tabu Search | TS | OriginalTS | 2004 | 5 | easy |
| Math | Sine Cosine Algorithm | SCA | OriginalSCA | 2016 | 2 | easy |
| Math | * | * | BaseSCA | * | 2 | easy |
| Math | * | * | QLE-SCA | 2022 | 4 | hard |
| Math | Gradient-Based Optimizer | GBO | OriginalGBO | 2020 | 5 | medium |
| Math | Arithmetic Optimization Algorithm | AOA | OrginalAOA | 2021 | 6 | easy |
| Math | Chaos Game Optimization | CGO | OriginalCGO | 2021 | 2 | easy |
| Math | Pareto-like Sequential Sampling | PSS | OriginalPSS | 2021 | 4 | medium |
| Math | weIghted meaN oF vectOrs | INFO | OriginalINFO | 2022 | 2 | medium |
| Math | RUNge Kutta optimizer | RUN | OriginalRUN | 2021 | 2 | hard |
| Math | Circle Search Algorithm | CircleSA | OriginalCircleSA | 2022 | 3 | easy |
| Math | Success History Intelligent Optimization | SHIO | OriginalSHIO | 2022 | 2 | easy |
| *** | *** | *** | *** | *** | *** | *** |
| Music | Harmony Search | HS | OriginalHS | 2001 | 4 | easy |
| Music | * | * | BaseHS | * | 4 | easy |
| SOTA | Ensemble sinusoidal differential covariance matrix adaptation with Euclidean neighborhood | LSHADEcnEpSin | OriginalLSHADEcnEpSin | 2017 | 9 | hard |
| SOTA | Improved Multi-operator Differential Evolution Algorithm | IMODE | OriginalIMODE | 2020 | 4 | hard |
During our implementation and classification of metaheuristic optimization algorithms, we identified a set of methods that raise serious concerns regarding scientific integrity and originality. These algorithms are typically published under different names, but they appear to share:
For these reasons, we strongly advise the exclusion of the following algorithms from scientific benchmarking, comparative studies, or any applications unless their originality is transparently validated.
I have personally implemented these algorithms, which is why I can confidently say that they are nearly identical and likely cases of plagiarism. For this reason, I will no longer spend time coding such algorithms in the future. This warning is intended to help others avoid using or relying on these methods in their work.
| Group | Name | Module | Class | Year | Paras | Difficulty |
|---|---|---|---|---|---|---|
| Swarm | Coati Optimization Algorithm | CoatiOA | OriginalCoatiOA | 2023 | 2 | easy |
| Swarm | Fennec For Optimization | FFO | OriginalFFO | 2022 | 2 | easy |
| Swarm | Northern Goshawk Optimization | NGO | OriginalNGO | 2021 | 2 | easy |
| Swarm | Osprey Optimization Algorithm | OOA | OriginalOOA | 2023 | 2 | easy |
| Swarm | Pelican Optimization Algorithm | POA | OriginalPOA | 2023 | 2 | easy |
| Swarm | Serval Optimization Algorithm | ServalOA | OriginalServalOA | 2022 | 2 | easy |
| Swarm | Siberian Tiger Optimization | STO | OriginalSTO | 2022 | 2 | easy |
| Swarm | Tasmanian Devil Optimization | TDO | OriginalTDO | 2022 | 2 | easy |
| Swarm | Walrus Optimization Algorithm | WaOA | OriginalWaOA | 2022 | 2 | easy |
| Swarm | Zebra Optimization Algorithm | ZOA | OriginalZOA | 2022 | 2 | easy |
| Human | Teamwork Optimization Algorithm | TOA | OriginalTOA | 2021 | 2 | easy |
Researchers and students are urged to exercise caution when referencing or applying the algorithms listed above. Using unoriginal or unethical work can compromise the scientific credibility of any downstream research and introduce misleading experimental results.
đ Check PubPeer1 and PubPeer2 to find ongoing discussions and critiques from the academic community.
from mealpy import (StringVar, FloatVar, BoolVar, PermutationVar, CategoricalVar, IntegerVar, BinaryVar,
TransferBinaryVar, TransferBoolVar)
from mealpy import Tuner, Multitask, Problem, Optimizer, Termination, ParameterGrid
from mealpy import get_all_optimizers, get_optimizer_by_name
from mealpy import BBO, PSO, GA, ALO, AO, ARO, AVOA, BA, BBOA, BMO, EOA, IWO
from mealpy import GJO, FOX, FOA, FFO, FFA, FA, ESOA, EHO, DO, DMOA, CSO, CSA, CoatiOA, COA, BSA
from mealpy import HCO, ICA, LCO, WarSO, TOA, TLO, SSDO, SPBO, SARO, QSA, ArchOA, ASO, CDO, EFO, EO, EVO, FLA
from mealpy import HGSO, MVO, NRO, RIME, SA, WDO, TWO, ABC, ACOR, AGTO, BeesA, BES, BFO, ZOA, WOA, WaOA, TSO
from mealpy import PFA, OOA, NGO, NMRA, MSA, MRFO, MPA, MGO, MFO, JA, HHO, HGS, HBA, GWO, GTO, GOA
from mealpy import SBO, SMA, SOA, SOS, TPO, TSA, VCS, WHO, AOA, CEM, CGO, CircleSA, GBO, HC, INFO, PSS, RUN, SCA
from mealpy import SHIO, TS, HS, AEO, GCO, WCA, CRO, DE, EP, ES, FPA, MA, SHADE, BRO, BSO, CA, CHIO, FBIO, GSKA, HBO
from mealpy import TDO, STO, SSpiderO, SSpiderA, SSO, SSA, SRSR, SLO, SHO, SFO, ServalOA, SeaHO, SCSO, POA
## Newly added module in version 3.0.3
from mealpy import ESO, EPC, SMO, AFT, CDDO, SquirrelSA, FDO, LSHADEcnEpSin, IMODE
if __name__ == "__main__":
model = BBO.OriginalBBO(epoch=10, pop_size=30, p_m=0.01, n_elites=2)
model = PSO.OriginalPSO(epoch=100, pop_size=50, c1=2.05, c2=20.5, w=0.4)
model = PSO.LDW_PSO(epoch=100, pop_size=50, c1=2.05, c2=20.5, w_min=0.4, w_max=0.9)
model = PSO.AIW_PSO(epoch=100, pop_size=50, c1=2.05, c2=20.5, alpha=0.4)
model = PSO.P_PSO(epoch=100, pop_size=50)
model = PSO.HPSO_TVAC(epoch=100, pop_size=50, ci=0.5, cf=0.1)
model = PSO.C_PSO(epoch=100, pop_size=50, c1=2.05, c2=2.05, w_min=0.4, w_max=0.9)
model = PSO.CL_PSO(epoch=100, pop_size=50, c_local=1.2, w_min=0.4, w_max=0.9, max_flag=7)
model = GA.BaseGA(epoch=100, pop_size=50, pc=0.9, pm=0.05, selection="tournament", k_way=0.4, crossover="multi_points", mutation="swap")
model = GA.SingleGA(epoch=100, pop_size=50, pc=0.9, pm=0.8, selection="tournament", k_way=0.4, crossover="multi_points", mutation="swap")
model = GA.MultiGA(epoch=100, pop_size=50, pc=0.9, pm=0.8, selection="tournament", k_way=0.4, crossover="multi_points", mutation="swap")
model = GA.EliteSingleGA(epoch=100, pop_size=50, pc=0.95, pm=0.8, selection="roulette", crossover="uniform", mutation="swap", k_way=0.2, elite_best=0.1,
elite_worst=0.3, strategy=0)
model = GA.EliteMultiGA(epoch=100, pop_size=50, pc=0.95, pm=0.8, selection="roulette", crossover="uniform", mutation="swap", k_way=0.2, elite_best=0.1,
elite_worst=0.3, strategy=0)
model = ABC.OriginalABC(epoch=1000, pop_size=50, n_limits=50)
model = ACOR.OriginalACOR(epoch=1000, pop_size=50, sample_count=25, intent_factor=0.5, zeta=1.0)
model = AGTO.OriginalAGTO(epoch=1000, pop_size=50, p1=0.03, p2=0.8, beta=3.0)
model = AGTO.MGTO(epoch=1000, pop_size=50, pp=0.03)
model = ALO.OriginalALO(epoch=100, pop_size=50)
model = ALO.DevALO(epoch=100, pop_size=50)
model = AO.OriginalAO(epoch=100, pop_size=50)
model = ARO.OriginalARO(epoch=100, pop_size=50)
model = ARO.LARO(epoch=100, pop_size=50)
model = ARO.IARO(epoch=100, pop_size=50)
model = AVOA.OriginalAVOA(epoch=100, pop_size=50, p1=0.6, p2=0.4, p3=0.6, alpha=0.8, gama=2.5)
model = BA.OriginalBA(epoch=100, pop_size=50, loudness=0.8, pulse_rate=0.95, pf_min=0.1, pf_max=10.0)
model = BA.AdaptiveBA(epoch=100, pop_size=50, loudness_min=1.0, loudness_max=2.0, pr_min=-2.5, pr_max=0.85, pf_min=0.1, pf_max=10.)
model = BA.DevBA(epoch=100, pop_size=50, pulse_rate=0.95, pf_min=0., pf_max=10.)
model = BBOA.OriginalBBOA(epoch=100, pop_size=50)
model = BMO.OriginalBMO(epoch=100, pop_size=50, pl=4)
model = EOA.OriginalEOA(epoch=100, pop_size=50, p_c=0.9, p_m=0.01, n_best=2, alpha=0.98, beta=0.9, gama=0.9)
model = IWO.OriginalIWO(epoch=100, pop_size=50, seed_min=3, seed_max=9, exponent=3, sigma_start=0.6, sigma_end=0.01)
model = SBO.DevSBO(epoch=100, pop_size=50, alpha=0.9, p_m=0.05, psw=0.02)
model = SBO.OriginalSBO(epoch=100, pop_size=50, alpha=0.9, p_m=0.05, psw=0.02)
model = SMA.OriginalSMA(epoch=100, pop_size=50, p_t=0.03)
model = SMA.DevSMA(epoch=100, pop_size=50, p_t=0.03)
model = SOA.OriginalSOA(epoch=100, pop_size=50, fc=2)
model = SOA.DevSOA(epoch=100, pop_size=50, fc=2)
model = SOS.OriginalSOS(epoch=100, pop_size=50)
model = TPO.DevTPO(epoch=100, pop_size=50, alpha=0.3, beta=50., theta=0.9)
model = TSA.OriginalTSA(epoch=100, pop_size=50)
model = VCS.OriginalVCS(epoch=100, pop_size=50, lamda=0.5, sigma=0.3)
model = VCS.DevVCS(epoch=100, pop_size=50, lamda=0.5, sigma=0.3)
model = WHO.OriginalWHO(epoch=100, pop_size=50, n_explore_step=3, n_exploit_step=3, eta=0.15, p_hi=0.9, local_alpha=0.9, local_beta=0.3, global_alpha=0.2,
global_beta=0.8, delta_w=2.0, delta_c=2.0)
model = AOA.OriginalAOA(epoch=100, pop_size=50, alpha=5, miu=0.5, moa_min=0.2, moa_max=0.9)
model = CEM.OriginalCEM(epoch=100, pop_size=50, n_best=20, alpha=0.7)
model = CGO.OriginalCGO(epoch=100, pop_size=50)
model = CircleSA.OriginalCircleSA(epoch=100, pop_size=50, c_factor=0.8)
model = GBO.OriginalGBO(epoch=100, pop_size=50, pr=0.5, beta_min=0.2, beta_max=1.2)
model = HC.OriginalHC(epoch=100, pop_size=50, neighbour_size=50)
model = HC.SwarmHC(epoch=100, pop_size=50, neighbour_size=10)
model = INFO.OriginalINFO(epoch=100, pop_size=50)
model = PSS.OriginalPSS(epoch=100, pop_size=50, acceptance_rate=0.8, sampling_method="LHS")
model = RUN.OriginalRUN(epoch=100, pop_size=50)
model = SCA.OriginalSCA(epoch=100, pop_size=50)
model = SCA.DevSCA(epoch=100, pop_size=50)
model = SCA.QleSCA(epoch=100, pop_size=50, alpha=0.1, gama=0.9)
model = SHIO.OriginalSHIO(epoch=100, pop_size=50)
model = TS.OriginalTS(epoch=100, pop_size=50, tabu_size=5, neighbour_size=20, perturbation_scale=0.05)
model = HS.OriginalHS(epoch=100, pop_size=50, c_r=0.95, pa_r=0.05)
model = HS.DevHS(epoch=100, pop_size=50, c_r=0.95, pa_r=0.05)
model = AEO.OriginalAEO(epoch=100, pop_size=50)
model = AEO.EnhancedAEO(epoch=100, pop_size=50)
model = AEO.ModifiedAEO(epoch=100, pop_size=50)
model = AEO.ImprovedAEO(epoch=100, pop_size=50)
model = AEO.AugmentedAEO(epoch=100, pop_size=50)
model = GCO.OriginalGCO(epoch=100, pop_size=50, cr=0.7, wf=1.25)
model = GCO.DevGCO(epoch=100, pop_size=50, cr=0.7, wf=1.25)
model = WCA.OriginalWCA(epoch=100, pop_size=50, nsr=4, wc=2.0, dmax=1e-6)
model = CRO.OriginalCRO(epoch=100, pop_size=50, po=0.4, Fb=0.9, Fa=0.1, Fd=0.1, Pd=0.5, GCR=0.1, gamma_min=0.02, gamma_max=0.2, n_trials=5)
model = CRO.OCRO(epoch=100, pop_size=50, po=0.4, Fb=0.9, Fa=0.1, Fd=0.1, Pd=0.5, GCR=0.1, gamma_min=0.02, gamma_max=0.2, n_trials=5, restart_count=50)
model = DE.OriginalDE(epoch=100, pop_size=50, wf=0.7, cr=0.9, strategy=0)
model = DE.JADE(epoch=100, pop_size=50, miu_f=0.5, miu_cr=0.5, pt=0.1, ap=0.1)
model = DE.SADE(epoch=100, pop_size=50)
model = DE.SAP_DE(epoch=100, pop_size=50, branch="ABS")
model = EP.OriginalEP(epoch=100, pop_size=50, bout_size=0.05)
model = EP.LevyEP(epoch=100, pop_size=50, bout_size=0.05)
model = ES.OriginalES(epoch=100, pop_size=50, lamda=0.75)
model = ES.LevyES(epoch=100, pop_size=50, lamda=0.75)
model = ES.CMA_ES(epoch=100, pop_size=50)
model = ES.Simple_CMA_ES(epoch=100, pop_size=50)
model = FPA.OriginalFPA(epoch=100, pop_size=50, p_s=0.8, levy_multiplier=0.2)
model = MA.OriginalMA(epoch=100, pop_size=50, pc=0.85, pm=0.15, p_local=0.5, max_local_gens=10, bits_per_param=4)
model = SHADE.OriginalSHADE(epoch=100, pop_size=50, miu_f=0.5, miu_cr=0.5)
model = SHADE.L_SHADE(epoch=100, pop_size=50, miu_f=0.5, miu_cr=0.5)
model = BRO.OriginalBRO(epoch=100, pop_size=50, threshold=3)
model = BRO.DevBRO(epoch=100, pop_size=50, threshold=3)
model = BSO.OriginalBSO(epoch=100, pop_size=50, m_clusters=5, p1=0.2, p2=0.8, p3=0.4, p4=0.5, slope=20)
model = BSO.ImprovedBSO(epoch=100, pop_size=50, m_clusters=5, p1=0.25, p2=0.5, p3=0.75, p4=0.6)
model = CA.OriginalCA(epoch=100, pop_size=50, accepted_rate=0.15)
model = CHIO.OriginalCHIO(epoch=100, pop_size=50, brr=0.15, max_age=10)
model = CHIO.DevCHIO(epoch=100, pop_size=50, brr=0.15, max_age=10)
model = FBIO.OriginalFBIO(epoch=100, pop_size=50)
model = FBIO.DevFBIO(epoch=100, pop_size=50)
model = GSKA.OriginalGSKA(epoch=100, pop_size=50, pb=0.1, kf=0.5, kr=0.9, kg=5)
model = GSKA.DevGSKA(epoch=100, pop_size=50, pb=0.1, kr=0.9)
model = HBO.OriginalHBO(epoch=100, pop_size=50, degree=3)
model = HCO.OriginalHCO(epoch=100, pop_size=50, wfp=0.65, wfv=0.05, c1=1.4, c2=1.4)
model = ICA.OriginalICA(epoch=100, pop_size=50, empire_count=5, assimilation_coeff=1.5, revolution_prob=0.05, revolution_rate=0.1, revolution_step_size=0.1,
zeta=0.1)
model = LCO.OriginalLCO(epoch=100, pop_size=50, r1=2.35)
model = LCO.ImprovedLCO(epoch=100, pop_size=50)
model = LCO.DevLCO(epoch=100, pop_size=50, r1=2.35)
model = WarSO.OriginalWarSO(epoch=100, pop_size=50, rr=0.1)
model = TOA.OriginalTOA(epoch=100, pop_size=50)
model = TLO.OriginalTLO(epoch=100, pop_size=50)
model = TLO.ImprovedTLO(epoch=100, pop_size=50, n_teachers=5)
model = TLO.DevTLO(epoch=100, pop_size=50)
model = SSDO.OriginalSSDO(epoch=100, pop_size=50)
model = SPBO.OriginalSPBO(epoch=100, pop_size=50)
model = SPBO.DevSPBO(epoch=100, pop_size=50)
model = SARO.OriginalSARO(epoch=100, pop_size=50, se=0.5, mu=50)
model = SARO.DevSARO(epoch=100, pop_size=50, se=0.5, mu=50)
model = QSA.OriginalQSA(epoch=100, pop_size=50)
model = QSA.DevQSA(epoch=100, pop_size=50)
model = QSA.OppoQSA(epoch=100, pop_size=50)
model = QSA.LevyQSA(epoch=100, pop_size=50)
model = QSA.ImprovedQSA(epoch=100, pop_size=50)
model = ArchOA.OriginalArchOA(epoch=100, pop_size=50, c1=2, c2=5, c3=2, c4=0.5, acc_max=0.9, acc_min=0.1)
model = ASO.OriginalASO(epoch=100, pop_size=50, alpha=50, beta=0.2)
model = CDO.OriginalCDO(epoch=100, pop_size=50)
model = EFO.OriginalEFO(epoch=100, pop_size=50, r_rate=0.3, ps_rate=0.85, p_field=0.1, n_field=0.45)
model = EFO.DevEFO(epoch=100, pop_size=50, r_rate=0.3, ps_rate=0.85, p_field=0.1, n_field=0.45)
model = EO.OriginalEO(epoch=100, pop_size=50)
model = EO.AdaptiveEO(epoch=100, pop_size=50)
model = EO.ModifiedEO(epoch=100, pop_size=50)
model = EVO.OriginalEVO(epoch=100, pop_size=50)
model = FLA.OriginalFLA(epoch=100, pop_size=50, C1=0.5, C2=2.0, C3=0.1, C4=0.2, C5=2.0, DD=0.01)
model = HGSO.OriginalHGSO(epoch=100, pop_size=50, n_clusters=3)
model = MVO.OriginalMVO(epoch=100, pop_size=50, wep_min=0.2, wep_max=1.0)
model = MVO.DevMVO(epoch=100, pop_size=50, wep_min=0.2, wep_max=1.0)
model = NRO.OriginalNRO(epoch=100, pop_size=50)
model = RIME.OriginalRIME(epoch=100, pop_size=50, sr=5.0)
model = SA.OriginalSA(epoch=100, pop_size=50, temp_init=100, step_size=0.1)
model = SA.GaussianSA(epoch=100, pop_size=50, temp_init=100, cooling_rate=0.99, scale=0.1)
model = SA.SwarmSA(epoch=100, pop_size=50, max_sub_iter=5, t0=1000, t1=1, move_count=5, mutation_rate=0.1, mutation_step_size=0.1,
mutation_step_size_damp=0.99)
model = WDO.OriginalWDO(epoch=100, pop_size=50, RT=3, g_c=0.2, alp=0.4, c_e=0.4, max_v=0.3)
model = TWO.OriginalTWO(epoch=100, pop_size=50)
model = TWO.EnhancedTWO(epoch=100, pop_size=50)
model = TWO.OppoTWO(epoch=100, pop_size=50)
model = TWO.LevyTWO(epoch=100, pop_size=50)
model = ABC.OriginalABC(epoch=100, pop_size=50, n_limits=50)
model = ACOR.OriginalACOR(epoch=100, pop_size=50, sample_count=25, intent_factor=0.5, zeta=1.0)
model = AGTO.OriginalAGTO(epoch=100, pop_size=50, p1=0.03, p2=0.8, beta=3.0)
model = AGTO.MGTO(epoch=100, pop_size=50, pp=0.03)
model = BeesA.OriginalBeesA(epoch=100, pop_size=50, selected_site_ratio=0.5, elite_site_ratio=0.4, selected_site_bee_ratio=0.1, elite_site_bee_ratio=2.0,
dance_radius=0.1, dance_reduction=0.99)
model = BeesA.CleverBookBeesA(epoch=100, pop_size=50, n_elites=16, n_others=4, patch_size=5.0, patch_reduction=0.985, n_sites=3, n_elite_sites=1)
model = BeesA.ProbBeesA(epoch=100, pop_size=50, recruited_bee_ratio=0.1, dance_radius=0.1, dance_reduction=0.99)
model = BES.OriginalBES(epoch=100, pop_size=50, a_factor=10, R_factor=1.5, alpha=2.0, c1=2.0, c2=2.0)
model = BFO.OriginalBFO(epoch=100, pop_size=50, Ci=0.01, Ped=0.25, Nc=5, Ns=4, d_attract=0.1, w_attract=0.2, h_repels=0.1, w_repels=10)
model = BFO.ABFO(epoch=100, pop_size=50, C_s=0.1, C_e=0.001, Ped=0.01, Ns=4, N_adapt=2, N_split=40)
model = ZOA.OriginalZOA(epoch=100, pop_size=50)
model = WOA.OriginalWOA(epoch=100, pop_size=50)
model = WOA.HI_WOA(epoch=100, pop_size=50, feedback_max=10)
model = WaOA.OriginalWaOA(epoch=100, pop_size=50)
model = TSO.OriginalTSO(epoch=100, pop_size=50)
model = TDO.OriginalTDO(epoch=100, pop_size=50)
model = STO.OriginalSTO(epoch=100, pop_size=50)
model = SSpiderO.OriginalSSpiderO(epoch=100, pop_size=50, fp_min=0.65, fp_max=0.9)
model = SSpiderA.OriginalSSpiderA(epoch=100, pop_size=50, r_a=1.0, p_c=0.7, p_m=0.1)
model = SSO.OriginalSSO(epoch=100, pop_size=50)
model = SSA.OriginalSSA(epoch=100, pop_size=50, ST=0.8, PD=0.2, SD=0.1)
model = SSA.DevSSA(epoch=100, pop_size=50, ST=0.8, PD=0.2, SD=0.1)
model = SRSR.OriginalSRSR(epoch=100, pop_size=50)
model = SLO.OriginalSLO(epoch=100, pop_size=50)
model = SLO.ModifiedSLO(epoch=100, pop_size=50)
model = SLO.ImprovedSLO(epoch=100, pop_size=50, c1=1.2, c2=1.5)
model = SHO.OriginalSHO(epoch=100, pop_size=50, h_factor=5.0, n_trials=10)
model = SFO.OriginalSFO(epoch=100, pop_size=50, pp=0.1, AP=4.0, epsilon=0.0001)
model = SFO.ImprovedSFO(epoch=100, pop_size=50, pp=0.1)
model = ServalOA.OriginalServalOA(epoch=100, pop_size=50)
model = SeaHO.OriginalSeaHO(epoch=100, pop_size=50)
model = SCSO.OriginalSCSO(epoch=100, pop_size=50)
model = POA.OriginalPOA(epoch=100, pop_size=50)
model = PFA.OriginalPFA(epoch=100, pop_size=50)
model = OOA.OriginalOOA(epoch=100, pop_size=50)
model = NGO.OriginalNGO(epoch=100, pop_size=50)
model = NMRA.OriginalNMRA(epoch=100, pop_size=50, pb=0.75)
model = NMRA.ImprovedNMRA(epoch=100, pop_size=50, pb=0.75, pm=0.01)
model = MSA.OriginalMSA(epoch=100, pop_size=50, n_best=5, partition=0.5, max_step_size=1.0)
model = MRFO.OriginalMRFO(epoch=100, pop_size=50, somersault_range=2.0)
model = MRFO.WMQIMRFO(epoch=100, pop_size=50, somersault_range=2.0, pm=0.5)
model = MPA.OriginalMPA(epoch=100, pop_size=50)
model = MGO.OriginalMGO(epoch=100, pop_size=50)
model = MFO.OriginalMFO(epoch=100, pop_size=50)
model = JA.OriginalJA(epoch=100, pop_size=50)
model = JA.LevyJA(epoch=100, pop_size=50)
model = JA.DevJA(epoch=100, pop_size=50)
model = HHO.OriginalHHO(epoch=100, pop_size=50)
model = HGS.OriginalHGS(epoch=100, pop_size=50, PUP=0.08, LH=10000)
model = HBA.OriginalHBA(epoch=100, pop_size=50)
model = GWO.OriginalGWO(epoch=100, pop_size=50)
model = GWO.RW_GWO(epoch=100, pop_size=50)
model = GTO.OriginalGTO(epoch=100, pop_size=50, A=0.4, H=2.0)
model = GTO.Matlab101GTO(epoch=100, pop_size=50)
model = GTO.Matlab102GTO(epoch=100, pop_size=50)
model = GOA.OriginalGOA(epoch=100, pop_size=50, c_min=0.00004, c_max=1.0)
model = GJO.OriginalGJO(epoch=100, pop_size=50)
model = FOX.OriginalFOX(epoch=100, pop_size=50, c1=0.18, c2=0.82)
model = FOA.OriginalFOA(epoch=100, pop_size=50)
model = FOA.WhaleFOA(epoch=100, pop_size=50)
model = FOA.DevFOA(epoch=100, pop_size=50)
model = FFO.OriginalFFO(epoch=100, pop_size=50)
model = FFA.OriginalFFA(epoch=100, pop_size=50, gamma=0.001, beta_base=2, alpha=0.2, alpha_damp=0.99, delta=0.05, exponent=2)
model = FA.OriginalFA(epoch=100, pop_size=50, max_sparks=50, p_a=0.04, p_b=0.8, max_ea=40, m_sparks=50)
model = ESOA.OriginalESOA(epoch=100, pop_size=50)
model = EHO.OriginalEHO(epoch=100, pop_size=50, alpha=0.5, beta=0.5, n_clans=5)
model = DO.OriginalDO(epoch=100, pop_size=50)
model = DMOA.OriginalDMOA(epoch=100, pop_size=50, n_baby_sitter=3, peep=2)
model = DMOA.DevDMOA(epoch=100, pop_size=50, peep=2)
model = CSO.OriginalCSO(epoch=100, pop_size=50, mixture_ratio=0.15, smp=5, spc=False, cdc=0.8, srd=0.15, c1=0.4, w_min=0.4, w_max=0.9)
model = CSA.OriginalCSA(epoch=100, pop_size=50, p_a=0.3)
model = CoatiOA.OriginalCoatiOA(epoch=100, pop_size=50)
model = COA.OriginalCOA(epoch=100, pop_size=50, n_coyotes=5)
model = BSA.OriginalBSA(epoch=100, pop_size=50, ff=10, pff=0.8, c1=1.5, c2=1.5, a1=1.0, a2=1.0, fc=0.5)
## Newly added algorithms in version 3.0.3
model = GWO.GWO_WOA(epoch=100, pop_size=50)
model = GWO.IGWO(epoch=1000, pop_size=50, a_min = 0.02, a_max = 2.2)
model = GWO.ChaoticGWO(epoch=1000, pop_size=50, chaotic_name="chebyshev", initial_chaotic_value=0.7)
model = GWO.FuzzyGWO(epoch=1000, pop_size=50, fuzzy_name="increase")
model = GWO.IncrementalGWO(epoch=1000, pop_size=50, explore_factor=1.5)
model = GWO.ExGWO(epoch=1000, pop_size=50)
model = GWO.DS_GWO(epoch=1000, pop_size=50, explore_ratio=0.4, n_groups=5)
model = GWO.IOBL_GWO(epoch=1000, pop_size=50)
model = GWO.OGWO(epoch=1000, pop_size=50, miu_factor=2.0, jumping_rate=0.05)
model = GWO.ER_GWO(epoch=1000, pop_size=50, a_initial=2.0, a_final=0.0, miu_factor=1.0001)
model = GWO.CG_GWO(epoch=1000, pop_size=50)
model = ESO.OriginalESO(epoch=1000, pop_size=50)
model = AO.AAO(epoch=1000, pop_size=50, sharpness=10.0, sigmoid_midpoint=0.5)
model = EPC.DevEPC(epoch=1000, pop_size=50, heat_damping_factor=0.95, mutation_factor=0.1, spiral_a=1.0, spiral_b=0.5)
model = SMO.DevSMO(epoch=1000, pop_size=50, max_groups = 5, perturbation_rate = 0.7)
model = SquirrelSA.OriginalSquirrelSA(epoch=1000, pop_size=50, n_food_sources=4, predator_prob=0.1, gliding_constant=1.9, scaling_factor=18, beta=1.5)
model = AFT.OriginalAFT(epoch=1000, pop_size=50)
model = CDDO.OriginalCDDO(epoch=1000, pop_size=50, pattern_size=10, creativity_rate=0.1)
model = FDO.OriginalFDO(epoch=1000, pop_size=50, weight_factor=0.1)
model = LSHADEcnEpSin.OriginalLSHADEcnEpSin(epoch=1000, pop_size=50, miu_f = 0.5, miu_cr = 0.5, freq = 0.5, memory_size = 5, ps = 0.5, pc = 0.4, pop_size_min = 10)
model = IMODE.OriginalIMODE(epoch=1000, pop_size=50, memory_size=5, archive_size=20)
MEALPY allows you to define your optimization problem in a couple of ways.
You can quickly define your problem using a Python dictionary. However, this approach is only valid for problems with float decision variables.
from mealpy import FloatVar, SMA
import numpy as np
def objective_function(solution):
return np.sum(solution**2)
problem = {
"obj_func": objective_function,
"bounds": FloatVar(lb=(-100., )*30, ub=(100., )*30),
"minmax": "min",
"log_to": "console",
}
## Run the algorithm
model = SMA.OriginalSMA(epoch=100, pop_size=50, pr=0.03)
g_best = model.solve(problem)
print(f"Best solution: {g_best.solution}, Best fitness: {g_best.target.fitness}")
For more complex scenarios, especially when your decision variables are not exclusively FloatVar,
we recommend defining a custom class that inherits from the Problem class.
Let's demonstrate this with a simple "Squared" class.
In the __init__ method of your custom Problem class (e.g., Squared class), you must set the bounds and minmax attributes of the problem.
bounds: Defines the search space and the type of decision variables (e.g., FloatVar, IntegerVar).
minmax: A string indicating whether the problem is a minimization ("min") or maximization ("max") problem.
After defining the initialization, you must override the abstract method obj_func(). This method is the core of your problem definition:
It takes a single parameter: solution (the encoded solution vector generated by the optimizer).
It must return the objective function value (or fitness) for the given solution.
The resulting code structure for a custom problem class would look similar to the snippet below.
You can include any additional parameters you need in your custom class (like 'data' or 'name' in this example).
from mealpy import Problem, FloatVar, BBO
import numpy as np
# Our custom problem class
class Squared(Problem):
def __init__(self, bounds=None, minmax="min", data=None, **kwargs):
super().__init__(bounds, minmax, **kwargs)
self.data = data # This is additional variable use for passing data to objective function
def obj_func(self, solution):
return np.sum(solution ** 2)
## Now, we define an algorithm, and pass an instance of our *Squared* class as the problem argument.
bound = FloatVar(lb=(-10., )*20, ub=(10., )*20, name="my_var") # The `name` of variable is important when decoding.
problem = Squared(bounds=bound, minmax="min", name="Squared", data="Amazing")
model = BBO.OriginalBBO(epoch=100, pop_size=20)
g_best = model.solve(problem)
## Show some attributes
print(g_best.solution)
print(g_best.target.fitness)
print(g_best.target.objectives)
print(g_best)
print(model.get_parameters())
print(model.get_name())
print(model.get_attributes()["g_best"])
print(model.problem.get_name())
print(model.problem.n_dims)
print(model.problem.bounds)
print(model.problem.lb)
print(model.problem.ub)
We provide many examples for complicated applications that can use Mealpy to solve.
MEALPY is a versatile library capable of solving a wide array of complex optimization problems across various domains. Below are examples showcasing its diverse applications.
These examples demonstrate MEALPY's use in common optimization scenarios.
MEALPY can be effectively used to optimize various aspects of Machine Learning and AI models.
MEALPY excels at solving complex combinatorial problems, which involve finding an optimal object from a finite set of objects.
MEALPY's flexibility allows for integration into more specialized systems and workflows.
Code: Link
MEALPY includes specialized classes to streamline common optimization tasks.
Explore additional advanced examples and dedicated projects showcasing MEALPY's capabilities.
For more usage examples please look at examples folder. More advanced examples can also be found in the Mealpy-examples repository.
All tutorial videos: Link
All code examples: Link
All visualization examples: Link
ABC - Artificial Bee Colony
ACOR - Ant Colony Optimization.
ALO - Ant Lion Optimizer
AEO - Artificial Ecosystem-based Optimization
ASO - Atom Search Optimization
ArchOA - Archimedes Optimization Algorithm
AOA - Arithmetic Optimization Algorithm
AO - Aquila Optimizer
AVOA - African Vultures Optimization Algorithm
AGTO - Artificial Gorilla Troops Optimization
ARO - Artificial Rabbits Optimization:
AFT - Ali baba and the Forty Thieves:
BFO - Bacterial Foraging Optimization
BeesA - Bees Algorithm
BBO - Biogeography-Based Optimization
BA - Bat Algorithm
BSO - Brain Storm Optimization
BSA - Bird Swarm Algorithm
BMO - Barnacles Mating Optimizer:
BES - Bald Eagle Search
BRO - Battle Royale Optimization
CA - Culture Algorithm
CEM - Cross Entropy Method
CSO - Cat Swarm Optimization
CSA - Cuckoo Search Algorithm
CRO - Coral Reefs Optimization
COA - Coyote Optimization Algorithm
CHIO - Coronavirus Herd Immunity Optimization
CGO - Chaos Game Optimization
CSA - Circle Search Algorithm
CDDO - Child Drawing Development Optimization
DE - Differential Evolution
DSA - Differential Search Algorithm (not done)
DO - Dragonfly Optimization
DMOA - Dwarf Mongoose Optimization Algorithm
ES - Evolution Strategies .
EP - Evolutionary programming .
EHO - Elephant Herding Optimization .
EFO - Electromagnetic Field Optimization .
EOA - Earthworm Optimisation Algorithm .
EO - Equilibrium Optimizer .
ESO - Electrical Storm Optimization .
EPC - Emperor Penguins Colony .
FFA - Firefly Algorithm
FA - Fireworks algorithm
FPA - Flower Pollination Algorithm
FOA - Fruit-fly Optimization Algorithm
FDO - Fitness Dependent Optimizer
FBIO - Forensic-Based Investigation Optimization
FHO - Fire Hawk Optimization
GA - Genetic Algorithm
GWO - Grey Wolf Optimizer
GOA - Grasshopper Optimisation Algorithm
GCO - Germinal Center Optimization
GSKA - Gaining Sharing Knowledge-based Algorithm
GBO - Gradient-Based Optimizer
HC - Hill Climbing .
HS - Harmony Search .
HHO - Harris Hawks Optimization .
HGSO - Henry Gas Solubility Optimization .
HGS - Hunger Games Search .
HHOA - Horse Herd Optimization Algorithm (not done) .
HBA - Honey Badger Algorithm:
IWO - Invasive Weed Optimization .
ICA - Imperialist Competitive Algorithm
IMODE - Improved Multi-operator Differential Evolution Algorithm:
INFO - weIghted meaN oF vectOrs:
LSHADEcnEpSin - Ensemble sinusoidal differential covariance matrix adaptation with Euclidean neighborhood
LCO - Life Choice-based Optimization
MA - Memetic Algorithm
MFO - Moth Flame Optimization
MVO - Multi-Verse Optimizer
MSA - Moth Search Algorithm
MRFO - Manta Ray Foraging Optimization
MPA - Marine Predators Algorithm:
NRO - Nuclear Reaction Optimization
NMRA - Nake Mole-Rat Algorithm
PSO - Particle Swarm Optimization
PFA - Pathfinder Algorithm
PSS - Pareto-like Sequential Sampling
SA - Simulated Annealling OriginalSA: Kirkpatrick, S., Gelatt Jr, C. D., & Vecchi, M. P. (1983). Optimization by simulated annealing. science, 220(4598), 671-680. GaussianSA: Van Laarhoven, P. J., Aarts, E. H., van Laarhoven, P. J., & Aarts, E. H. (1987). Simulated annealing (pp. 7-15). Springer Netherlands. SwarmSA: My developed version
SSpiderO - Social Spider Optimization
SMO - Spider Monkey Optimization
SOS - Symbiotic Organisms Search:
SSpiderA - Social Spider Algorithm
SCA - Sine Cosine Algorithm
SRSR - Swarm Robotics Search And Rescue
SBO - Satin Bowerbird Optimizer
SHO - Spotted Hyena Optimizer
SSO - Salp Swarm Optimization
SFO - Sailfish Optimizer
SARO - Search And Rescue Optimization
SSDO - Social Ski-Driver Optimization
SLO - Sea Lion Optimization
Seagull Optimization Algorithm
Squirrel Search Algorithm
SMA - Slime Mould Algorithm
SSA - Sparrow Search Algorithm
SPBO - Student Psychology Based Optimization
SCSO - Sand Cat Swarm Optimization
TLO - Teaching Learning Optimization
TWO - Tug of War Optimization
TSA - Tunicate Swarm Algorithm
TSO - Tuna Swarm Optimization
WCA - Water Cycle Algorithm
WOA - Whale Optimization Algorithm
WHO - Wildebeest Herd Optimization
WDO - Wind Driven Optimization
Developed by: Thieu @ 2022
FAQs
MEALPY: An Open-source Library for Latest Meta-heuristic Algorithms in Python
We found that mealpy demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.

Security News
Experts push back on new claims about AI-driven ransomware, warning that hype and sponsored research are distorting how the threat is understood.

Security News
Ruby's creator Matz assumes control of RubyGems and Bundler repositories while former maintainers agree to step back and transfer all rights to end the dispute.