<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.0 20120330//EN" "JATS-journalpublishing1.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">INFORMATICA</journal-id>
<journal-title-group><journal-title>Informatica</journal-title></journal-title-group>
<issn pub-type="epub">1822-8844</issn><issn pub-type="ppub">0868-4952</issn><issn-l>0868-4952</issn-l>
<publisher>
<publisher-name>Vilnius University</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">INFOR603</article-id>
<article-id pub-id-type="doi">10.15388/25-INFOR603</article-id>
<article-categories><subj-group subj-group-type="heading">
<subject>Research Article</subject></subj-group></article-categories>
<title-group>
<article-title>Performance Comparison of Single-Objective Evolutionary Algorithms Implemented in Different Frameworks</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<contrib-id contrib-id-type="orcid">https://orcid.org/0000-0003-4908-4631</contrib-id>
<name><surname>Ravber</surname><given-names>Miha</given-names></name><email xlink:href="miha.ravber@um.si">miha.ravber@um.si</email><xref ref-type="aff" rid="j_infor603_aff_001"/><xref ref-type="corresp" rid="cor1">∗</xref><bio>
<p><bold>M. Ravber</bold> received his BSc, MSc, and PhD in computer science from the University of Maribor, Maribor, Slovenia, in 2012, 2015, and 2018, respectively. He is currently an assistant professor at the Faculty of Electrical Engineering and Computer Science, University of Maribor, Maribor, Slovenia. He has worked in the Programming Methodologies Laboratory since 2015. His research interests include evolutionary computation, single- and multi-objective optimization, soft computing, and genetic programming.</p></bio>
</contrib>
<contrib contrib-type="author">
<contrib-id contrib-id-type="orcid">https://orcid.org/0009-0001-9099-6416</contrib-id>
<name><surname>Šmid</surname><given-names>Marko</given-names></name><email xlink:href="marko.smid2@um.si">marko.smid2@um.si</email><xref ref-type="aff" rid="j_infor603_aff_001"/><bio>
<p><bold>M. Šmid</bold> received his BSc and MSc degrees in computer science from the University of Maribor, Maribor, Slovenia, in 2020 and 2022, respectively. He is currently pursuing a PhD in computer science and works as a technical assistant at the Faculty of Electrical Engineering and Computer Science, University of Maribor. Since 2022, he has been a member of the Programming Methodologies Laboratory. His research interests include evolutionary computation, genetic algorithms, genetic programming, multi-agent systems, and self-organizing systems.</p></bio>
</contrib>
<contrib contrib-type="author">
<contrib-id contrib-id-type="orcid">https://orcid.org/0000-0003-0756-3300</contrib-id>
<name><surname>Moravec</surname><given-names>Matej</given-names></name><email xlink:href="matej.moravec@um.si">matej.moravec@um.si</email><xref ref-type="aff" rid="j_infor603_aff_001"/><bio>
<p><bold>M. Moravec</bold> received his BSc and MSc degrees in computer science from the University of Maribor, Maribor, Slovenia, in 2017 and 2019, respectively. He is currently pursuing a PhD in computer science and works as a teaching assistant at the Faculty of Electrical Engineering and Computer Science, University of Maribor. Since 2019, he has been a member of the Programming Methodologies Laboratory. His research interests include evolutionary computation and single- and multi-objective dynamic optimization.</p></bio>
</contrib>
<contrib contrib-type="author">
<contrib-id contrib-id-type="orcid">https://orcid.org/0000-0002-2775-0667</contrib-id>
<name><surname>Mernik</surname><given-names>Marjan</given-names></name><email xlink:href="marjan.mernik@um.si">marjan.mernik@um.si</email><xref ref-type="aff" rid="j_infor603_aff_001"/><bio>
<p><bold>M. Mernik</bold> received the MSc and PhD degrees in computer science from the University of Maribor in 1994 and 1998, respectively. He is currently a professor at the University of Maribor, Faculty of Electrical Engineering and Computer Science. He was a visiting professor at the University of Alabama at Birmingham, Department of Computer and Information Sciences. His research interests include programming languages, domain-specific (modelling) languages, grammar and semantic inference, and evolutionary computations. He is the editor-in-chief of the <italic>Journal of Computer Languages</italic>, as well as associate editors of the <italic>Applied Soft Computing Journal</italic>, and <italic>Swarm and Evolutionary Computation Journal</italic>. He has been named a Highly Cited Researcher for years 2017 and 2018. More information about his work is available at <uri>https://lpm.feri.um.si/en/members/mernik/</uri>.</p></bio>
</contrib>
<contrib contrib-type="author">
<contrib-id contrib-id-type="orcid">https://orcid.org/0000-0003-2802-316X</contrib-id>
<name><surname>Črepinšek</surname><given-names>Matej</given-names></name><email xlink:href="matej.crepinsek@um.si">matej.crepinsek@um.si</email><xref ref-type="aff" rid="j_infor603_aff_001"/><bio>
<p><bold>M. Črepinšek</bold> earned his BSc (1999) and PhD (2007) in computer science from the University of Maribor, Slovenia. He currently serves as an associate professor at the Faculty of Electrical Engineering and Computer Science, University of Maribor. His research interests span game development, mobile development, grammar inference, evolutionary computation, single- and multi-objective optimization, as well as computer science education.</p></bio>
</contrib>
<aff id="j_infor603_aff_001"><institution>University of Maribor</institution>, Faculty of Electrical Engineering and Computer Science, Koroška cesta 46, 2000 Maribor, <country>Slovenia</country></aff>
</contrib-group>
<author-notes>
<corresp id="cor1"><label>∗</label>Corresponding author.</corresp>
</author-notes>
<pub-date pub-type="ppub"><year>2025</year></pub-date><pub-date pub-type="epub"><day>16</day><month>9</month><year>2025</year></pub-date><volume>36</volume><issue>3</issue><fpage>677</fpage><lpage>712</lpage><history><date date-type="received"><month>12</month><year>2024</year></date><date date-type="accepted"><month>9</month><year>2025</year></date></history>
<permissions><copyright-statement>© 2025 Vilnius University</copyright-statement><copyright-year>2025</copyright-year>
<license license-type="open-access" xlink:href="http://creativecommons.org/licenses/by/4.0/">
<license-p>Open access article under the <ext-link ext-link-type="uri" xlink:href="http://creativecommons.org/licenses/by/4.0/">CC BY</ext-link> license.</license-p></license></permissions>
<abstract>
<p>Fair comparison with state-of-the-art evolutionary algorithms is crucial, but is obstructed by differences in problems, parameters, and stopping criteria across studies. Metaheuristic frameworks can help, but often lack clarity on algorithm versions, improvements, or deviations. Some also restrict parameter configuration. We analysed source codes and identified inconsistencies between implementations. Performance comparisons across frameworks, even with identical settings, revealed significant differences, sometimes even with the authors’ own code. This questions the validity of comparisons using such frameworks. We provide guidelines to improve open-source metaheuristics, aiming to support more credible and reliable comparative studies.</p>
</abstract>
<kwd-group>
<label>Key words</label>
<kwd>metaheuristics</kwd>
<kwd>evolutionary algorithms</kwd>
<kwd>metaheuristic optimization framework</kwd>
<kwd>algorithm comparison</kwd>
<kwd>benchmarking</kwd>
</kwd-group>
</article-meta>
</front>
<body>
<sec id="j_infor603_s_001">
<label>1</label>
<title>Introduction</title>
<p>Accurate and precise experimentation is critical when comparing evolutionary algorithms, ensuring validity for both researchers and practitioners. Such comparisons are supported by established benchmarking guidelines (Bartz-Beielstein <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_002">2020</xref>; Eiben and Jelasity, <xref ref-type="bibr" rid="j_infor603_ref_018">2002</xref>; LaTorre <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_037">2020</xref>; Črepinšek <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_008">2014</xref>; Ravber <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_054">2016</xref>, <xref ref-type="bibr" rid="j_infor603_ref_056">2022b</xref>). Numerous open-source metaheuristic frameworks have been developed to support research efforts. These provide widely used algorithms and standard test problems, and are implemented in various programming languages to facilitate rapid development and comparison (Molina <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_046">2020</xref>; Silva <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_061">2018</xref>; Parejo <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_051">2012</xref>; Dzalbs, <xref ref-type="bibr" rid="j_infor603_ref_015">2021</xref>; Osaba <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_049">2021</xref>). Consequently, such frameworks have gained significant popularity within the research community.</p>
<p>Framework selection is often driven by the user’s preferred programming language (Oztas and Erdem, <xref ref-type="bibr" rid="j_infor603_ref_050">2021</xref>). However, beyond language, the correctness of algorithm implementations and other framework components is crucial. Variations in implementation can lead to significant differences in performance, even when using identical parameters.</p>
<p>This study addresses the research question: To what extent does the implementation of a metaheuristic affect its problem-solving performance? We investigate this by focusing exclusively on the quality of solutions across multiple frameworks. Computational performance and resource usage have already been examined in prior work (Merelo-Guervós <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_042">2016a</xref>; Villalobos <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_069">2018</xref>). Our analysis includes reviewing the algorithm source codes within each framework to identify deviations from the original implementations, and evaluate whether the observed performance aligns with the intentions of the original algorithm authors. The primary objectives of this work are: 
<list>
<list-item id="j_infor603_li_001">
<label>1.</label>
<p>To compare the performance and functionality of evolutionary algorithms implemented across different frameworks, while excluding other components of the frameworks.</p>
</list-item>
<list-item id="j_infor603_li_002">
<label>2.</label>
<p>To analyse the source code of each implementation to explain the observed performance differences.</p>
</list-item>
</list> 
We selected 13 diverse metaheuristic frameworks (DEAP, EARS, jMetal, MEALPY, MOEA, NiaPY, pagmo2, PlatEMO, YPEA, Nevergrad, metaheuristicOpt, EvoloPy, and pymoo) for comparison, chosen based on their widespread use, as indicated by citations and repository stars. We compared six single-objective algorithms, which were implemented widely across the selected frameworks: Artificial Bee Colony (ABC) (Karaboga and Basturk, <xref ref-type="bibr" rid="j_infor603_ref_034">2007</xref>), Differential Evolution (DE) (Storn and Price, <xref ref-type="bibr" rid="j_infor603_ref_062">1997</xref>), Genetic Algorithm (GA) (Holland, <xref ref-type="bibr" rid="j_infor603_ref_031">1992</xref>), Grey Wolf Optimizer (GWO) (Mirjalili <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_045">2014</xref>), Particle Swarm Optimization (PSO) (Kennedy and Eberhart, <xref ref-type="bibr" rid="j_infor603_ref_035">1995</xref>), and Covariance Matrix Adaptation Evolution Strategy (CMA-ES) (Hansen and Ostermeier, <xref ref-type="bibr" rid="j_infor603_ref_027">2001</xref>). Notably, these algorithms are among the most widely recognized and utilized within the evolutionary computation community, as evidenced by the numerous citations of their original works (Ma <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_040">2023</xref>; Wang <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_072">2021</xref>; Dokeroglu <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_013">2019</xref>; Darwish, <xref ref-type="bibr" rid="j_infor603_ref_009">2018</xref>; Tzanetos and Dounias, <xref ref-type="bibr" rid="j_infor603_ref_064">2020</xref>; Molina <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_046">2020</xref>; Wang <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_071">2025</xref>). Additionally, many new metaheuristics are based on these algorithms (Velasco <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_068">2024</xref>). When possible, we included original implementations published by the algorithm authors; however, for GA and PSO, such official source code was not available.</p>
<p>To ensure fairness in comparison, we validated the implementation of all test problems carefully across all frameworks. A statistical analysis was conducted using the EARS framework, which supports reproducible and unbiased evaluation. We adopted the Chess Rating System for Evolutionary Algorithms (CRS4EAs) (Veček <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_067">2014</xref>), for performance comparison. Additionally, the Comparing Continuous Optimizers (COCO) platform (Hansen <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_030">2021</xref>) was used to plot runtime profiles, specifically, Empirical Cumulative Distribution Functions (ECDF), to analyse algorithm performance further. The main contributions of this work are: 
<list>
<list-item id="j_infor603_li_003">
<label>•</label>
<p>A comprehensive performance comparison of widely used metaheuristic algorithms across 13 frameworks, incorporating the original authors’ implementations when available.</p>
</list-item>
<list-item id="j_infor603_li_004">
<label>•</label>
<p>A detailed analysis of source code discrepancies between the framework implementations and original algorithm descriptions, shedding light on how variations arise.</p>
</list-item>
<list-item id="j_infor603_li_005">
<label>•</label>
<p>A demonstration that even minor differences in implementation can lead to significant performance changes, highlighting the importance of correctness in algorithm comparisons.</p>
</list-item>
<list-item id="j_infor603_li_006">
<label>•</label>
<p>Practical recommendations for improving open-source metaheuristic implementations to support more consistent and trustworthy benchmarking studies.</p>
</list-item>
</list> 
The remainder of this paper is organized as follows. Section <xref rid="j_infor603_s_002">2</xref> provides a literature review on comparative studies of metaheuristic frameworks. Section <xref rid="j_infor603_s_003">3</xref> introduces the selected frameworks. Section <xref rid="j_infor603_s_004">4</xref> outlines the experimental design. The results and analysis are presented in Section <xref rid="j_infor603_s_005">5</xref>. Section <xref rid="j_infor603_s_013">6</xref> concludes the paper and suggests directions for future work.</p>
</sec>
<sec id="j_infor603_s_002">
<label>2</label>
<title>Related Work</title>
<p>Several studies have explored the characteristics of metaheuristic frameworks, focusing on aspects such as code understandability, supported algorithms, parallelization capabilities, platform compatibility, visualization support, tuning options, solution representation, statistical analysis, programming language, and execution speed (Dzalbs, <xref ref-type="bibr" rid="j_infor603_ref_015">2021</xref>; Osaba <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_049">2021</xref>; Parejo <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_051">2012</xref>; Silva <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_061">2018</xref>; Ramírez <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_052">2023</xref>). While these works provide valuable insights into the features and design of metaheuristic frameworks, they do not directly address the performance implications of different algorithm implementations within these frameworks. To address this gap, our study compares implementations of metaheuristic algorithms across multiple frameworks, and the following papers are some of the most relevant to our work.</p>
<p>In Biedrzycki (<xref ref-type="bibr" rid="j_infor603_ref_003">2021</xref>), Biedrzycki compared official implementations of the CMA-ES algorithm, sourced from the author’s homepage, revealing substantial performance differences between versions. These findings highlight that the choice of implementation can impact research outcomes significantly. To enhance research credibility, the study proposes guidelines to improve publication quality and reduce erroneous claims of algorithm superiority. Unlike Biedrzycki’s focus on a single algorithm (CMA-ES) and its versions, our work examines discrepancies in the implementations of six algorithms, including CMA-ES, across 13 metaheuristic frameworks. By comparing CMA-ES implementations across diverse frameworks, we anticipate similar, or even greater performance variations, due to the broader scope of the framework-specific differences, providing a more comprehensive analysis of the implementation impacts.</p>
<p>In the paper Merelo-Guervós <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor603_ref_042">2016a</xref>), the authors compared the performance of various programming languages in implementing basic evolutionary algorithm operations. Typically, compiled languages like Java or C/C++ are favoured for such tasks, but this research explored the speed of both popular and less common languages. The results show that compiled languages generally perform better, but languages like Go and Python can also be fast enough for most purposes. The choice of data structures and code layout impacts performance significantly. There is no one-size-fits-all language, but Java with BitSets or C# tends to perform well. The study suggests exploring hybrid architectures combining languages for optimal performance and prototyping benefits, fostering future research in this direction. The paper emphasizes primarily the execution speed of the algorithms, whereas our article focuses on examining the implementation differences that impact the algorithm’s performance on benchmark problems.</p>
<p>In the paper Merelo-Guervós <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor603_ref_043">2016b</xref>), the authors evaluated the performance of various programming languages in implementing three common genetic algorithm operations: two genetic operators (mutation and crossover) and OneMax, a benchmark used in both practical and theoretical approaches to genetic algorithms. Their aim was to provide insights for practitioners in choosing languages for evolutionary algorithm implementations. Java was generally considered the fastest, but Clojure was able to surpass it in some functions. Functional languages showed remarkable performance, despite their limited popularity in the evolutionary algorithm community. Using a vector of bits instead of bit strings or lists generally yielded better performance, and immutable data structures, common in functional languages, are faster when available. The study suggested future research directions, including hybrid language architectures for improved performance and a multi-language framework. The focus of the paper lies on evaluating programming languages for genetic algorithm operations, shedding light on the language choice for evolutionary algorithm implementations and how it affects efficiency, whereas our work centres on comparing the performance of the same algorithms implemented in different frameworks.</p>
<p>In the paper Alba <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor603_ref_001">2007</xref>), the authors examined the impact of different Java data structure implementations on the performance of an evolutionary algorithm. While most evolutionary algorithm studies focus on abstract data representations, this research delved into how these representations were implemented in programming languages, specifically Java. The study compared six implementations of a steady-state genetic algorithm, divided into two groups, based on population representation (array or vector) and individual representation. The results have shown that the choice of data structure for population representation affects the implementation time significantly, while the gene type had minimal impact. The study emphasized the importance of considering data implementation in EA research, and suggests further exploration in this area. However, the study only considered the efficiency of evolutionary algorithms, which differs from our paper’s primary focus on evaluating their impact on performance.</p>
<p>In the paper Merelo <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor603_ref_041">2011</xref>), the authors highlighted the significance of efficient implementation in evolutionary algorithms, emphasizing that improvements in implementation often have a more substantial impact on performance than changes to the algorithm itself. The study applied standard methodologies for performance enhancement to EAs, and identified implementation options that yielded the best results for specific problem configurations, especially when factors like population or chromosome size increased. The findings demonstrated that applying profilers to identify bottlenecks in EA implementations and then optimizing those code segments through informed programming, can enhance running times significantly without sacrificing algorithmic performance. Additionally, various techniques, like multithreading (Kovačević <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_036">2022</xref>), and message passing, can improve EA performance further, expanding their applicability. The study highlighted the significance of efficient implementation in evolutionary algorithms, concentrating on optimizing the implementation for specific problem configurations, which differs from our paper’s primary objective of benchmarking different implementations on various problems.</p>
</sec>
<sec id="j_infor603_s_003">
<label>3</label>
<title>Metaheuristic Optimization Frameworks</title>
<p>This section presents the characteristics of the frameworks included in our comparison. We reviewed frameworks supporting continuous single-objective optimization problems. Due to the numerous available frameworks, we limited our study to 13 widely used frameworks with publicly available source codes. The selected frameworks and their characteristics, current as of July 2025, are detailed in Table <xref rid="j_infor603_tab_001">1</xref>. The table includes the latest release, repository stars, number of citations of the associated paper (as reported by Google Scholar), number of implemented algorithms (both single- and multi-objective), programming language, and the official publication. When evaluating the popularity of the frameworks, the citation count revealed that the three most well-received frameworks (DEAP, pymoo, and PlatEMO) were featured in the comparative analysis. Furthermore, DEAP, Nevergrad, and pymoo were ranked first, second, and third, respectively, in terms of popularity based on the repository stars.</p>
<p>The algorithms selected for comparison are shown in Table <xref rid="j_infor603_tab_002">2</xref>. Differential Evolution was implemented in all 13 frameworks, whereas the other algorithms varied in availability. Notably, CMA-ES implementations in several frameworks contained errors, such as infinite loops or crashes, likely due to the algorithm’s complexity. Consequently, these flawed CMA-ES implementations were excluded from the comparison.</p>
<table-wrap id="j_infor603_tab_001">
<label>Table 1</label>
<caption>
<p>Selected frameworks with their characteristics.</p>
</caption>
<table>
<thead>
<tr>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Framework</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Latest release</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Repository stars</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Number of citations</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Number of algorithms</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Programming language</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Publication</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Source code</td>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: top; text-align: left">DEAP</td>
<td style="vertical-align: top; text-align: left">1.4.1, Jul, 2023</td>
<td style="vertical-align: top; text-align: left">6137</td>
<td style="vertical-align: top; text-align: left">2830</td>
<td style="vertical-align: top; text-align: left">6</td>
<td style="vertical-align: top; text-align: left">Python</td>
<td style="vertical-align: top; text-align: left">(Fortin <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_021">2012</xref>)</td>
<td style="vertical-align: top; text-align: left"><ext-link ext-link-type="uri" xlink:href="https://github.com/DEAP/deap">github.com/DEAP/deap</ext-link></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">EARS</td>
<td style="vertical-align: top; text-align: left">v4.0.0, Nov, 2024</td>
<td style="vertical-align: top; text-align: left">22</td>
<td style="vertical-align: top; text-align: left">163</td>
<td style="vertical-align: top; text-align: left">56</td>
<td style="vertical-align: top; text-align: left">Java</td>
<td style="vertical-align: top; text-align: left">(Veček <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_067">2014</xref>)</td>
<td style="vertical-align: top; text-align: left"><ext-link ext-link-type="uri" xlink:href="https://github.com/UM-LPM/EARS">github.com/UM-LPM/EARS</ext-link></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">jMetal</td>
<td style="vertical-align: top; text-align: left">jmetal-6.7, May, 2025</td>
<td style="vertical-align: top; text-align: left">535</td>
<td style="vertical-align: top; text-align: left">1460</td>
<td style="vertical-align: top; text-align: left">33</td>
<td style="vertical-align: top; text-align: left">Java</td>
<td style="vertical-align: top; text-align: left">(Durillo and Nebro, <xref ref-type="bibr" rid="j_infor603_ref_014">2011</xref>)</td>
<td style="vertical-align: top; text-align: left"><ext-link ext-link-type="uri" xlink:href="https://github.com/jMetal/jMetal">github.com/jMetal/jMetal</ext-link></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">MEALPY</td>
<td style="vertical-align: top; text-align: left">v3.0.2, May, 2025</td>
<td style="vertical-align: top; text-align: left">1045</td>
<td style="vertical-align: top; text-align: left">204</td>
<td style="vertical-align: top; text-align: left">129</td>
<td style="vertical-align: top; text-align: left">Python</td>
<td style="vertical-align: top; text-align: left">(Van Thieu and Mirjalili, <xref ref-type="bibr" rid="j_infor603_ref_065">2023</xref>)</td>
<td style="vertical-align: top; text-align: left"><ext-link ext-link-type="uri" xlink:href="https://github.com/thieu1995/mealpy">github.com/thieu1995/mealpy</ext-link></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">MOEA</td>
<td style="vertical-align: top; text-align: left">Version 5.1, Jun, 2025</td>
<td style="vertical-align: top; text-align: left">339</td>
<td style="vertical-align: top; text-align: left">101</td>
<td style="vertical-align: top; text-align: left">26</td>
<td style="vertical-align: top; text-align: left">Java</td>
<td style="vertical-align: top; text-align: left">(Hadka, <xref ref-type="bibr" rid="j_infor603_ref_026">2014</xref>)*</td>
<td style="vertical-align: top; text-align: left"><ext-link ext-link-type="uri" xlink:href="https://github.com/MOEAFramework/MOEAFramework">github.com/MOEAFramework/MOEAFramework</ext-link></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">NiaPY</td>
<td style="vertical-align: top; text-align: left">2.5.2, Jan, 2025</td>
<td style="vertical-align: top; text-align: left">267</td>
<td style="vertical-align: top; text-align: left">98</td>
<td style="vertical-align: top; text-align: left">37</td>
<td style="vertical-align: top; text-align: left">Python</td>
<td style="vertical-align: top; text-align: left">(Vrbančič <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_070">2018</xref>)</td>
<td style="vertical-align: top; text-align: left"><ext-link ext-link-type="uri" xlink:href="https://github.com/NiaOrg/NiaPy">github.com/NiaOrg/NiaPy</ext-link></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">pagmo2</td>
<td style="vertical-align: top; text-align: left">pagmo 2.19.1, Aug, 2024</td>
<td style="vertical-align: top; text-align: left">879</td>
<td style="vertical-align: top; text-align: left">325</td>
<td style="vertical-align: top; text-align: left">352</td>
<td style="vertical-align: top; text-align: left">C++</td>
<td style="vertical-align: top; text-align: left">(Biscani and Izzo, <xref ref-type="bibr" rid="j_infor603_ref_004">2020</xref>)</td>
<td style="vertical-align: top; text-align: left"><ext-link ext-link-type="uri" xlink:href="https://github.com/esa/pagmo2">github.com/esa/pagmo2</ext-link></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">PlatEMO</td>
<td style="vertical-align: top; text-align: left">PlatEMO v4.12, Apr, 2025</td>
<td style="vertical-align: top; text-align: left">1872</td>
<td style="vertical-align: top; text-align: left">2391</td>
<td style="vertical-align: top; text-align: left">322</td>
<td style="vertical-align: top; text-align: left">MATLAB</td>
<td style="vertical-align: top; text-align: left">(Tian <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_063">2017</xref>)</td>
<td style="vertical-align: top; text-align: left"><ext-link ext-link-type="uri" xlink:href="https://github.com/BIMK/PlatEMO">github.com/BIMK/PlatEMO</ext-link></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">EvoloPy</td>
<td style="vertical-align: top; text-align: left">N/A</td>
<td style="vertical-align: top; text-align: left">476</td>
<td style="vertical-align: top; text-align: left">130</td>
<td style="vertical-align: top; text-align: left">14</td>
<td style="vertical-align: top; text-align: left">Python</td>
<td style="vertical-align: top; text-align: left">(Faris <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_020">2016</xref>)</td>
<td style="vertical-align: top; text-align: left"><ext-link ext-link-type="uri" xlink:href="https://github.com/7ossam81/EvoloPy">github.com/7ossam81/EvoloPy</ext-link></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">metaheuristicOpt</td>
<td style="vertical-align: top; text-align: left">2.0.0, Jun, 2019</td>
<td style="vertical-align: top; text-align: left">4</td>
<td style="vertical-align: top; text-align: left">17</td>
<td style="vertical-align: top; text-align: left">20</td>
<td style="vertical-align: top; text-align: left">R</td>
<td style="vertical-align: top; text-align: left">(Riza <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_057">2018</xref>)</td>
<td style="vertical-align: top; text-align: left"><ext-link ext-link-type="uri" xlink:href="https://github.com/cran/metaheuristicOpt">github.com/cran/metaheuristicOpt</ext-link></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Nevergrad</td>
<td style="vertical-align: top; text-align: left">1.0.12, Apr, 2025</td>
<td style="vertical-align: top; text-align: left">4094</td>
<td style="vertical-align: top; text-align: left">336</td>
<td style="vertical-align: top; text-align: left">542</td>
<td style="vertical-align: top; text-align: left">Python</td>
<td style="vertical-align: top; text-align: left">(Rapin and Teytaud, <xref ref-type="bibr" rid="j_infor603_ref_053">2018</xref>)*</td>
<td style="vertical-align: top; text-align: left"><ext-link ext-link-type="uri" xlink:href="https://github.com/facebookresearch/nevergrad">github.com/facebookresearch/nevergrad</ext-link></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">pymoo</td>
<td style="vertical-align: top; text-align: left">0.6.1.15, May, 2025</td>
<td style="vertical-align: top; text-align: left">2581</td>
<td style="vertical-align: top; text-align: left">2235</td>
<td style="vertical-align: top; text-align: left">20</td>
<td style="vertical-align: top; text-align: left">Python</td>
<td style="vertical-align: top; text-align: left">(Blank and Deb, <xref ref-type="bibr" rid="j_infor603_ref_005">2020</xref>)</td>
<td style="vertical-align: top; text-align: left"><ext-link ext-link-type="uri" xlink:href="https://github.com/anyoptimization/pymoo">github.com/anyoptimization/pymoo</ext-link></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">YPEA</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">N/A</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">49</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">13</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">15</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">MATLAB</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">(Kalami Heris, <xref ref-type="bibr" rid="j_infor603_ref_033">2019</xref>)*</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><ext-link ext-link-type="uri" xlink:href="https://github.com/smkalami/ypea">github.com/smkalami/ypea</ext-link></td>
</tr>
</tbody>
</table>
<table-wrap-foot>
<p>* No official reference found.</p>
</table-wrap-foot>
</table-wrap>
<table-wrap id="j_infor603_tab_002">
<label>Table 2</label>
<caption>
<p>Implemented optimization algorithms in each framework.</p>
</caption>
<graphic xlink:href="infor603_g001.jpg"/>
</table-wrap>
</sec>
<sec id="j_infor603_s_004">
<label>4</label>
<title>Experimental Methodology</title>
<p>In the experiments, the algorithms shared the same control parameters, as listed in Table <xref rid="j_infor603_tab_003">3</xref>. These control parameters were set based on the authors’ recommendations, and were not subject to optimization. Importantly, the parameter settings were standardized across all the algorithms to ensure that they did not impact the comparison.</p>
<table-wrap id="j_infor603_tab_003">
<label>Table 3</label>
<caption>
<p>Parameter settings of all the algorithms.</p>
</caption>
<table>
<thead>
<tr>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">ABC</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">DE</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">GA</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">GWO</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">PSO</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">CMA-ES</td>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: top; text-align: left">pop_size = 125</td>
<td style="vertical-align: top; text-align: left">pop_size = 50</td>
<td style="vertical-align: top; text-align: left">pop_size = 100</td>
<td style="vertical-align: top; text-align: left">pop_size = 30</td>
<td style="vertical-align: top; text-align: left">pop_size = 30</td>
<td style="vertical-align: top; text-align: left">pop_size = 30</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">L = 100</td>
<td style="vertical-align: top; text-align: left">CR = 0.9</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_001"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0.95</mml:mn></mml:math><tex-math><![CDATA[${p_{c}}=0.95$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"/>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_002"><alternatives><mml:math>
<mml:mi mathvariant="italic">ω</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>0.7</mml:mn></mml:math><tex-math><![CDATA[$\omega =0.7$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_003"><alternatives><mml:math>
<mml:mi mathvariant="italic">σ</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>0.5</mml:mn></mml:math><tex-math><![CDATA[$\sigma =0.5$]]></tex-math></alternatives></inline-formula></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left"/>
<td style="vertical-align: top; text-align: left">F = 0.5</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_004"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0.025</mml:mn></mml:math><tex-math><![CDATA[${p_{m}}=0.025$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"/>
<td style="vertical-align: top; text-align: left">c1 = 2</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_005"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{0}}$]]></tex-math></alternatives></inline-formula> = random position</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"/>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"/>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor603_ineq_006"><alternatives><mml:math>
<mml:mi mathvariant="italic">η</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">η</mml:mi>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>20</mml:mn></mml:math><tex-math><![CDATA[$\eta c=\eta m=20$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"/>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">c2 = 2</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"/>
</tr>
</tbody>
</table>
<table-wrap-foot>
<p><inline-formula id="j_infor603_ineq_007"><alternatives><mml:math>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mi mathvariant="italic">o</mml:mi>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mtext>_</mml:mtext>
<mml:mi mathvariant="italic">s</mml:mi>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">z</mml:mi>
<mml:mi mathvariant="italic">e</mml:mi></mml:math><tex-math><![CDATA[$pop\text{\_}size$]]></tex-math></alternatives></inline-formula> – population size, <italic>L</italic> – stagnation limit, <inline-formula id="j_infor603_ineq_008"><alternatives><mml:math>
<mml:mi mathvariant="italic">C</mml:mi>
<mml:mi mathvariant="italic">R</mml:mi></mml:math><tex-math><![CDATA[$CR$]]></tex-math></alternatives></inline-formula> – crossover probability, <italic>F</italic> – mutation factor, <inline-formula id="j_infor603_ineq_009"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${p_{c}}$]]></tex-math></alternatives></inline-formula> – crossover probability, <inline-formula id="j_infor603_ineq_010"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${p_{m}}$]]></tex-math></alternatives></inline-formula> – mutation factor, <inline-formula id="j_infor603_ineq_011"><alternatives><mml:math>
<mml:mi mathvariant="italic">η</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi></mml:math><tex-math><![CDATA[$\eta c$]]></tex-math></alternatives></inline-formula> – crossover distribution index, <inline-formula id="j_infor603_ineq_012"><alternatives><mml:math>
<mml:mi mathvariant="italic">η</mml:mi>
<mml:mi mathvariant="italic">m</mml:mi></mml:math><tex-math><![CDATA[$\eta m$]]></tex-math></alternatives></inline-formula> – mutation distribution index, <italic>ω</italic> – inertia weight, <inline-formula id="j_infor603_ineq_013"><alternatives><mml:math>
<mml:mi mathvariant="italic">c</mml:mi>
<mml:mn>1</mml:mn></mml:math><tex-math><![CDATA[$c1$]]></tex-math></alternatives></inline-formula> – cognitive coefficient, <inline-formula id="j_infor603_ineq_014"><alternatives><mml:math>
<mml:mi mathvariant="italic">c</mml:mi>
<mml:mn>2</mml:mn></mml:math><tex-math><![CDATA[$c2$]]></tex-math></alternatives></inline-formula> – social coefficient, <italic>σ</italic> – initial Standard Deviation in each coordinate, <inline-formula id="j_infor603_ineq_015"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{0}}$]]></tex-math></alternatives></inline-formula> – initial guess of the minimum solution.</p>
</table-wrap-foot>
</table-wrap>
<p>The DE strategy employed in our study was rand/1/bin. In contrast, GAs lack a standardized strategy but offer flexibility in choosing operators for selection, mutation, and crossover. Not all frameworks supported the same operators. For our comparison, we selected tournament selection, Polynomial Mutation (PM) (Deb and Deb, <xref ref-type="bibr" rid="j_infor603_ref_010">2014</xref>), and Simulated Binary Crossover (SBX) (Deb <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_011">1995</xref>), as they were the most prevalent across the selected frameworks. We omitted five of the 11 frameworks that did not support all chosen operators, as their GA implementations differed significantly and did not represent the same method. These choices were made to try to ensure a consistent and standardized comparison of algorithms across the different frameworks.</p>
<p>During the experiments, we used a set of 12 continuous single-objective problems, detailed in Table <xref rid="j_infor603_tab_004">4</xref>, which are widely recognized benchmarks for evaluating optimization algorithm performance. To ensure sufficient challenge, we employed shifted versions of some problems, to address the centre bias in algorithms like GWO (Morales-Castañeda <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_047">2025</xref>; Camacho Villalón <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_006">2020</xref>; Niu <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_048">2019</xref>).</p>
<table-wrap id="j_infor603_tab_004">
<label>Table 4</label>
<caption>
<p>Continuous single-objective optimization problems, including dimensions, bounds, and global optima.</p>
</caption>
<table>
<thead>
<tr>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Problem function</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">d</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Range</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin"><inline-formula id="j_infor603_ineq_016"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo movablelimits="false">min</mml:mo>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${f_{\min }}$]]></tex-math></alternatives></inline-formula></td>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_017"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo largeop="false" movablelimits="false">∑</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup></mml:math><tex-math><![CDATA[${f_{1}}(x)={\textstyle\sum _{i=1}^{d}}{x_{i}^{2}}$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">60</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_018"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mo>−</mml:mo>
<mml:mn>100</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>100</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$[-100,100]$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">0</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_019"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo largeop="false" movablelimits="false">∑</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup></mml:math><tex-math><![CDATA[${f_{2}}(x)={\textstyle\sum _{i=1}^{d}}i{x_{i}^{2}}$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">60</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_020"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mo>−</mml:mo>
<mml:mn>100</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>100</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$[-100,100]$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">0</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_021"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo largeop="false" movablelimits="false">∑</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mo maxsize="1.61em" minsize="1.61em" fence="true" mathvariant="normal">(</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo largeop="false" movablelimits="false">∑</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo maxsize="1.61em" minsize="1.61em" fence="true" mathvariant="normal">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${f_{3}}(x)={\textstyle\sum _{i=1}^{d}}{\Big({\textstyle\sum _{j=1}^{i}}{x_{i}}\Big)^{2}}$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">60</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_022"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mo>−</mml:mo>
<mml:mn>100</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>100</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$[-100,100]$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">0</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_023"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mn>10</mml:mn>
<mml:mi mathvariant="italic">d</mml:mi>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo largeop="false" movablelimits="false">∑</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true">[</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>−</mml:mo>
<mml:mn>10</mml:mn>
<mml:mo movablelimits="false">cos</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>2</mml:mn>
<mml:mi mathvariant="italic">π</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true">]</mml:mo></mml:math><tex-math><![CDATA[${f_{4}}(x)=10d+{\textstyle\sum _{i=1}^{d}}\big[{x_{i}^{2}}-10\cos (2\pi {x_{i}})\big]$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">60</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_024"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mo>−</mml:mo>
<mml:mn>5.12</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>5.12</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$[-5.12,5.12]$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">0</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_025"><alternatives><mml:math>
<mml:mtable columnspacing="4.0pt 4.0pt" equalrows="false" columnlines="none none" equalcolumns="false" align="axis 1" columnalign="right center left">
<mml:mtr>
<mml:mtd class="array">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>5</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mtd>
<mml:mtd class="array">
<mml:mo>=</mml:mo>
</mml:mtd>
<mml:mtd class="array">
<mml:mo>−</mml:mo>
<mml:mn>20</mml:mn>
<mml:mo movablelimits="false">exp</mml:mo>
<mml:mo maxsize="1.61em" minsize="1.61em" fence="true" mathvariant="normal">(</mml:mo>
<mml:mo>−</mml:mo>
<mml:mn>0.2</mml:mn>
<mml:msqrt>
<mml:mrow>
<mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:msubsup>
<mml:mrow>
<mml:mo largeop="false" movablelimits="false">∑</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:msqrt>
<mml:mo maxsize="1.61em" minsize="1.61em" fence="true" mathvariant="normal">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mo movablelimits="false">exp</mml:mo>
<mml:mo maxsize="1.61em" minsize="1.61em" fence="true" mathvariant="normal">(</mml:mo><mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:msubsup>
<mml:mrow>
<mml:mo largeop="false" movablelimits="false">∑</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo movablelimits="false">cos</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>2</mml:mn>
<mml:mi mathvariant="italic">π</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo maxsize="1.61em" minsize="1.61em" fence="true" mathvariant="normal">)</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="array"/>
<mml:mtd class="array"/>
<mml:mtd class="array">
<mml:mo>+</mml:mo>
<mml:mn>20</mml:mn>
<mml:mo>+</mml:mo>
<mml:mo movablelimits="false">exp</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[$\begin{array}[t]{r@{\hskip4.0pt}c@{\hskip4.0pt}l}{f_{5}}(x)& =& -20\exp \Big(-0.2\sqrt{\frac{1}{d}{\textstyle\sum _{i=1}^{d}}{x_{i}^{2}}}\Big)-\exp \Big(\frac{1}{d}{\textstyle\sum _{i=1}^{d}}\cos (2\pi {x_{i}})\Big)\\ {} & & +20+\exp (1)\end{array}$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">60</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_026"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mo>−</mml:mo>
<mml:mn>32</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>32</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$[-32,32]$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">0</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_027"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo largeop="false" movablelimits="false">∑</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:mrow>
</mml:msubsup><mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mrow>
<mml:mn>4000</mml:mn>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo largeop="false" movablelimits="false">∏</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo movablelimits="false">cos</mml:mo>
<mml:mo maxsize="1.61em" minsize="1.61em" fence="true" mathvariant="normal">(</mml:mo><mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msqrt>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:mo maxsize="1.61em" minsize="1.61em" fence="true" mathvariant="normal">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:math><tex-math><![CDATA[${f_{6}}(x)={\textstyle\sum _{i=1}^{d}}\frac{{x_{i}^{2}}}{4000}-{\textstyle\prod _{i=1}^{d}}\cos \Big(\frac{{x_{i}}}{\sqrt{i}}\Big)+1$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">60</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_028"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mo>−</mml:mo>
<mml:mn>600</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>600</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$[-600,600]$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">0</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_029"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>7</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo largeop="false" movablelimits="false">∑</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">d</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true">[</mml:mo>
<mml:mn>100</mml:mn>
<mml:msup>
<mml:mrow>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true">]</mml:mo></mml:math><tex-math><![CDATA[${f_{7}}(x)={\textstyle\sum _{i=1}^{d-1}}\big[100{\big({x_{i+1}}-{x_{i}^{2}}\big)^{2}}+{({x_{i}}-1)^{2}}\big]$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">60</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_030"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mo>−</mml:mo>
<mml:mn>30</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>30</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$[-30,30]$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">0</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_031"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo maxsize="1.61em" minsize="1.61em" fence="true">[</mml:mo><mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>500</mml:mn>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo largeop="false" movablelimits="false">∑</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>25</mml:mn>
</mml:mrow>
</mml:msubsup><mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo largeop="false" movablelimits="false">∑</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:mo maxsize="1.61em" minsize="1.61em" fence="true">]</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${f_{8}}(x)={\Big[\frac{1}{500}+{\textstyle\sum _{j=1}^{25}}\frac{1}{j+{\textstyle\sum _{i=1}^{2}}{({x_{i}}-{a_{i,j}})^{6}}}\Big]^{-1}}$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">2</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_032"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mo>−</mml:mo>
<mml:mn>65.536</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>65.536</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$[-65.536,65.536]$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">0.998</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_033"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>9</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mn>4</mml:mn>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:mn>4</mml:mn>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>−</mml:mo>
<mml:mn>2.1</mml:mn>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>+</mml:mo>
<mml:mn>4</mml:mn>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>+</mml:mo><mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msubsup></mml:math><tex-math><![CDATA[${f_{9}}(x)=4{x_{1}^{2}}+{x_{1}}{x_{2}}-4{x_{2}^{2}}-2.1{x_{1}^{4}}+4{x_{2}^{4}}+\frac{1}{3}{x_{1}^{6}}$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">2</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_034"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mo>−</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$[-5,5]$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_035"><alternatives><mml:math>
<mml:mo>−</mml:mo>
<mml:mn>1.031</mml:mn></mml:math><tex-math><![CDATA[$-1.031$]]></tex-math></alternatives></inline-formula></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_036"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>10</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
<mml:msup>
<mml:mrow>
<mml:mo maxsize="1.61em" minsize="1.61em" fence="true" mathvariant="normal">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo><mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:mn>5.1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">π</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>+</mml:mo><mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:mn>5</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">π</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:mn>6</mml:mn>
<mml:mo maxsize="1.61em" minsize="1.61em" fence="true" mathvariant="normal">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>+</mml:mo>
<mml:mn>10</mml:mn>
<mml:mo maxsize="1.61em" minsize="1.61em" fence="true" mathvariant="normal">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo><mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>8</mml:mn>
<mml:mi mathvariant="italic">π</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:mo maxsize="1.61em" minsize="1.61em" fence="true" mathvariant="normal">)</mml:mo>
<mml:mo movablelimits="false">cos</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo><mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:mn>5</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">π</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mstyle></mml:math><tex-math><![CDATA[${f_{10}}(x)=1{\Big({x_{2}}-\frac{5.1}{4{\pi ^{2}}}{x_{1}^{2}}+\frac{5}{\pi }{x_{1}}-6\Big)^{2}}+10\Big(1-\frac{1}{(8\pi )}\Big)\cos ({x_{1}})+\frac{5}{\pi }$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">2</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_037"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mo>−</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo>
<mml:mo>×</mml:mo>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mn>10</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>15</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$[-5,0]\times [10,15]$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">0.397</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_038"><alternatives><mml:math>
<mml:mtable columnspacing="4.0pt 4.0pt" equalrows="false" columnlines="none none" equalcolumns="false" align="axis 1" columnalign="right center left">
<mml:mtr>
<mml:mtd class="array">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>11</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mtd>
<mml:mtd class="array">
<mml:mo>=</mml:mo>
</mml:mtd>
<mml:mtd class="array">
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true">[</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">(</mml:mo>
<mml:mn>19</mml:mn>
<mml:mo>−</mml:mo>
<mml:mn>14</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>3</mml:mn>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>−</mml:mo>
<mml:mn>14</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>6</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>3</mml:mn>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">)</mml:mo>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true">]</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="array"/>
<mml:mtd class="array"/>
<mml:mtd class="array">
<mml:mo>×</mml:mo>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true">[</mml:mo>
<mml:mn>30</mml:mn>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:mn>3</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">(</mml:mo>
<mml:mn>18</mml:mn>
<mml:mo>−</mml:mo>
<mml:mn>32</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="array"/>
<mml:mtd class="array"/>
<mml:mtd class="array">
<mml:mo>+</mml:mo>
<mml:mn>12</mml:mn>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>+</mml:mo>
<mml:mn>48</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:mn>36</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>27</mml:mn>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">)</mml:mo>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true">]</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[$\begin{array}[t]{r@{\hskip4.0pt}c@{\hskip4.0pt}l}{f_{11}}(x)& =& \big[1+{({x_{1}}+{x_{2}}+1)^{2}}\big(19-14{x_{1}}+3{x_{1}^{2}}-14{x_{2}}+6{x_{1}}{x_{2}}+3{x_{2}^{2}}\big)\big]\\ {} & & \times \big[30+{(2{x_{1}}-3{x_{2}})^{2}}\big(18-32{x_{1}}\\ {} & & +12{x_{1}^{2}}+48{x_{2}}-36{x_{1}}{x_{2}}+27{x_{2}^{2}}\big)\big]\end{array}$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">2</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor603_ineq_039"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mo>−</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$[-2,2]$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">3</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor603_ineq_040"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>12</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo largeop="false" movablelimits="false">∑</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">α</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo movablelimits="false">exp</mml:mo>
<mml:mo maxsize="1.61em" minsize="1.61em" fence="true" mathvariant="normal">(</mml:mo>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo largeop="false" movablelimits="false">∑</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo maxsize="1.61em" minsize="1.61em" fence="true" mathvariant="normal">)</mml:mo></mml:math><tex-math><![CDATA[${f_{12}}(x)=-{\textstyle\sum _{i=1}^{4}}{\alpha _{i}}\exp \Big(-{\textstyle\sum _{j=1}^{3}}{A_{ij}}{({x_{j}}-{P_{ij}})^{2}}\Big)$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">3</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor603_ineq_041"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$[0,1]$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor603_ineq_042"><alternatives><mml:math>
<mml:mo>−</mml:mo>
<mml:mn>3.862</mml:mn></mml:math><tex-math><![CDATA[$-3.862$]]></tex-math></alternatives></inline-formula></td>
</tr>
</tbody>
</table>
<table-wrap-foot>
<p><italic>d</italic> – denotes the number of dimensions of the problem.</p>
<p>Shifted functions (<inline-formula id="j_infor603_ineq_043"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${f_{1}}$]]></tex-math></alternatives></inline-formula> to <inline-formula id="j_infor603_ineq_044"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${f_{6}}$]]></tex-math></alternatives></inline-formula>): <inline-formula id="j_infor603_ineq_045"><alternatives><mml:math>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>base</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mo>−</mml:mo>
<mml:mi mathvariant="italic">o</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$f(x)={f_{\text{base}}}(x-o)$]]></tex-math></alternatives></inline-formula>, where <inline-formula id="j_infor603_ineq_046"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">o</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">∼</mml:mo>
<mml:mi mathvariant="italic">U</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>0.8</mml:mn>
<mml:mo>·</mml:mo>
<mml:mi mathvariant="italic">l</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">b</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>0.8</mml:mn>
<mml:mo>·</mml:mo>
<mml:mi mathvariant="italic">u</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">b</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[${o_{i}}\sim U(0.8\cdot l{b_{i}},0.8\cdot u{b_{i}})$]]></tex-math></alternatives></inline-formula>.</p>
<p><inline-formula id="j_infor603_ineq_047"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${f_{1}}$]]></tex-math></alternatives></inline-formula> – Shifted Sphere, <inline-formula id="j_infor603_ineq_048"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${f_{2}}$]]></tex-math></alternatives></inline-formula> – Shifted Sum of Squares, <inline-formula id="j_infor603_ineq_049"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${f_{3}}$]]></tex-math></alternatives></inline-formula> – Shifted Schwefel02, <inline-formula id="j_infor603_ineq_050"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${f_{4}}$]]></tex-math></alternatives></inline-formula> – Shifted Rastrigin, <inline-formula id="j_infor603_ineq_051"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>5</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${f_{5}}$]]></tex-math></alternatives></inline-formula> – Shifted Ackley, <inline-formula id="j_infor603_ineq_052"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${f_{6}}$]]></tex-math></alternatives></inline-formula> – Shifted Griewank, <inline-formula id="j_infor603_ineq_053"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>7</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${f_{7}}$]]></tex-math></alternatives></inline-formula> – Rosenbrock, <inline-formula id="j_infor603_ineq_054"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${f_{8}}$]]></tex-math></alternatives></inline-formula> – Shekel’s Foxholes, <inline-formula id="j_infor603_ineq_055"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>9</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${f_{9}}$]]></tex-math></alternatives></inline-formula> – Six-Hump Camel Back, <inline-formula id="j_infor603_ineq_056"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>10</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${f_{10}}$]]></tex-math></alternatives></inline-formula> – Branin, <inline-formula id="j_infor603_ineq_057"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>11</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${f_{11}}$]]></tex-math></alternatives></inline-formula> – Goldstein-Price, <inline-formula id="j_infor603_ineq_058"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>12</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${f_{12}}$]]></tex-math></alternatives></inline-formula> – Hartman.</p>
</table-wrap-foot>
</table-wrap>
<p>Appropriate stopping criteria lack specific guidelines and depend on problem complexity and desired solution quality. The studies (Sahin and Akay, <xref ref-type="bibr" rid="j_infor603_ref_058">2016</xref>; Lee <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_038">2020</xref>; Ezugwu <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_019">2020</xref>), showed varied approaches, with evaluation counts ranging from 5,000 to 500,000. We applied a uniform stopping criterion of 15,000 evaluations across all problems. However, it is important to note that some of the authors’ implementations, as well as the DEAP, MOEA, pagmo2, metaheuristicOpt and EvoloPy frameworks, do not support the use of the maximum number of evaluations inherently as the stopping criterion. Instead, they offer the option to set the maximum number of generations or iterations, which is not recommended, due to variations in the number of evaluations consumed per generation by different algorithms (Ravber <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_056">2022b</xref>; Mernik <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_044">2015</xref>). To address this and ensure a fair comparison, we integrated a custom evaluation counter into each framework, to monitor the exact number of evaluations performed, and detect any instances where the limit was exceeded and by how much.</p>
<p>Once all the results were collected, we conducted the statistical analysis using the EARS framework. EARS is a specialized framework developed specifically for benchmarking evolutionary algorithms (EARS, <xref ref-type="bibr" rid="j_infor603_ref_016">2019</xref>). It offers a comprehensive suite of tools and utilities that facilitate the setup and execution of benchmarks, as well as the collection and analysis of results. Designed with the goal of ensuring fairness in comparisons between evolutionary algorithms, EARS provides researchers with a reliable and standardized platform for conducting rigorous evaluations. All algorithms in EARS are based on the authors’ source codes, except CMA-ES, which uses the MOEA Framework implementation.</p>
<p>To analyse the runtime performance of each algorithm, we tracked their solution quality improvements throughout their runs across the 12 benchmark problems. We utilized cocoviz,<xref ref-type="fn" rid="j_infor603_fn_001">1</xref><fn id="j_infor603_fn_001"><label><sup>1</sup></label>
<p><uri>https://github.com/numbbo/coco-visualize</uri></p></fn> a minimalist visualization toolkit provided by the COCO platform (Hansen <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_030">2021</xref>), to generate Empirical Cumulative Distribution Functions. These ECDF plots illustrate the proportion of runs achieving specified target values within the given evaluation budgets, enabling detection of performance differences per problem, and highlighting framework-specific variations in algorithm efficiency.</p>
<p>EARS utilizes a novel method called CRS4EAs to facilitate the comparison of evolutionary algorithms. The chess rating system employed in CRS4EAs is Glicko-2 (Glickman, <xref ref-type="bibr" rid="j_infor603_ref_024">2012</xref>). In a study by Veček <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor603_ref_066">2017</xref>), CRS4EAs was shown to be comparable to statistical tests like the Friedman test followed by the Nemenyi test. In another research paper by Eftimov and Korošec (<xref ref-type="bibr" rid="j_infor603_ref_017">2019</xref>), they established that the CRS4EAs approach was also comparable to the pDSC (Practical Deep Statistical Comparison) method. These studies provided evidence of the effectiveness and reliability of CRS4EAs in facilitating accurate and robust comparisons of evolutionary algorithms.</p>
<p>In the CRS4EAs approach, the algorithms are represented as chess players who participate in a tournament. In this tournament, the algorithms compete against each other in pairs, with each algorithm playing multiple games (N times) against all the other algorithms for a given problem. To ensure robust and reproducible results, we conducted 50 games (independent runs) per algorithm for each problem, a conservative choice exceeding the typical 15–30 runs used in metaheuristics research (Hansen <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_029">2010</xref>; LaTorre <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_037">2020</xref>; Ezugwu <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_019">2020</xref>). The CRS4EAs approach, which does not assume normality in the performance data, further enhances reliability, as it produces consistent rankings even with fewer runs (Veček <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_066">2017</xref>). All the games were conducted under identical conditions, with the same stopping criterion applied to each algorithm. The objective for each algorithm was to obtain the best possible solution for the given problem. Following the games, the solutions were compared to determine the game outcomes, which could be a win, a loss, or a draw for each algorithm. Specifically, for each problem instance, the outcome of a game between two algorithms was determined by comparing their fitness values (e.g. objective function values). A win was assigned to the algorithm with the better fitness value, a loss to the algorithm with the worse fitness value, and a draw was declared if the absolute difference between their fitness values was less than a predefined threshold (draw limit), <inline-formula id="j_infor603_ineq_059"><alternatives><mml:math>
<mml:mi mathvariant="italic">ϵ</mml:mi>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mn>10</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[$\epsilon ={10^{-8}}$]]></tex-math></alternatives></inline-formula>. This threshold, consistent with the precision used in CEC competitions and in COCO (Hansen <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_030">2021</xref>), ensures that negligible differences in fitness values are treated as draws, avoiding overemphasis on numerically insignificant variations due to floating-point precision or problem-specific tolerances. After the tournament, the results were utilized to calculate the Rating (R), Rating Deviation (RD), and Rating Interval (RI) for each algorithm. The final outcome was a ranking of algorithms based on their ratings, with higher ratings indicating better performance, reflecting the algorithm’s relative strength. The rating deviation indicates the reliability of an algorithm’s rating. Rating intervals, calculated as [R – 2RD, R + 2RD], provide a 95% confidence level that the true rating lies within this interval, based on the empirical 68–95–99.7 rule, assuming a normal distribution for rating deviations, as standard in the Glickman rating system (Glickman, <xref ref-type="bibr" rid="j_infor603_ref_023">1999</xref>). The 95% confidence level <inline-formula id="j_infor603_ineq_060"><alternatives><mml:math>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">α</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>0.05</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$(\alpha =0.05)$]]></tex-math></alternatives></inline-formula> was chosen for its balance between statistical rigour and interpretability, as it is a common standard in significance testing, unlike the more conservative 99.7% level <inline-formula id="j_infor603_ineq_061"><alternatives><mml:math>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">α</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>0.01</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$(\alpha =0.01)$]]></tex-math></alternatives></inline-formula>. Statistical significance was determined by evaluating whether the rating intervals of the compared algorithms overlapped. Non-overlapping intervals indicate significant performance differences between implementations. This approach ensures robust and statistically significant conclusions in comparing evolutionary algorithms using the CRS4EAs method.</p>
</sec>
<sec id="j_infor603_s_005">
<label>5</label>
<title>Experimental Results</title>
<p>As mentioned previously, the rating intervals were computed using the EARS framework. Each algorithm participated in a tournament, resulting in six rating charts containing the rating intervals.</p>
<p>It is important to note that the charts depicting the rating intervals may contain a different number of algorithms, as not every framework included all of the selected algorithms. Additionally, the absence of the authors’ versions of GA and PSO contributed further to variations in the chart compositions. The remaining algorithms, namely, ABC, DE, GWO, and CMA-ES, have their source code accessible on the authors’ official websites, and they are available in different programming languages. However, in the comparison, we included only one version (one programming language) of each algorithm from the authors’ implementations. We chose the canonical version of each algorithm without modifications, because the specific implementation choice can affect the results significantly (Biedrzycki, <xref ref-type="bibr" rid="j_infor603_ref_003">2021</xref>). For ABC, we utilized the Matlab version, as it was the first version available on the authors’ homepage and bears the authors’ signature in the code. Similarly, for DE, we selected the Java version, since, from the comments in the code, it is evident that this version was written by one of the original authors. Regarding GWO, the authors’ homepage offers links for GWO implementations in seven different languages. Nevertheless, we chose to use the Matlab version, as it was the one written by the original author. For CMA-ES, there were also implementations available in multiple languages on the author’s homepage. We selected the Python implementation, as it is maintained actively by the authors (Hansen <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_028">2019</xref>).</p>
<p>Figure <xref rid="j_infor603_fig_001">1</xref> illustrates the rating and rating intervals for ABC implementations in seven different frameworks, as well as the author’s implementation in Matlab (ABC-Author-Matlab). The concept of rating intervals and how they were calculated is explained in the Experimental Methodology (Section <xref rid="j_infor603_s_004">4</xref>). For clarity, the same methodology was applied to all the algorithms, and their rating intervals are presented in subsequent figures. The implementations are ranked based on their ratings, with the best performing implementation placed in the top right corner, and the worst performing in the bottom left corner. From the chart, we can determine that the implementation in the EARS framework (ABC-EARS) achieved the highest rating, indicating superior performance, while the implementation in the metaheuristicOpt framework (ABC-metaheuristicOpt) obtained the lowest rating.</p>
<p>A comprehensive comparison of algorithms considers both their ratings and rating intervals. Non-overlapping rating intervals indicate statistically significant performance differences at the 95% confidence level. In Fig. <xref rid="j_infor603_fig_001">1</xref>, ABC-EARS, ABC-NiaPY, ABC-PlatEMO, and ABC-Author-Matlab significantly outperform ABC-MEALPY, ABC-pagmo2, ABC-YPEA, and ABC-metaheuristicOpt. ABC-MEALPY is significantly better than ABC-YPEA and ABC-metaheuristicOpt. Additionally, ABC-pagmo2 and ABC-YPEA are significantly better than ABC-metaheuristicOpt. However, partial overlap in rating intervals, such as between ABC-EARS and ABC-NiaPy, suggests smaller performance differences that may not always be statistically significant. For a detailed analysis of such cases, the ECDF plots provide further insights into performance variations.</p>
<p>It is important to recognize that, in stochastic algorithms, the ranking of similarly performing algorithms could vary if the experiment is rerun. The degree of overlap in the rating intervals affects the likelihood of this variability occurring. The more the intervals overlap, the smaller the observed differences in performance, and the higher the possibility of changes in the ranking upon rerunning the experiment. For example, when we examined the rating intervals of ABC-NiaPY and ABC-PlatEMO, we noticed that they had a large overlap of intervals, suggesting that their rankings could vary if the experiment were to be repeated. In contrast, when we considered the rating intervals of ABC-pagmo2 and ABC-YPEA, we observed much less overlap, indicating that their rankings are less likely to change.</p>
<fig id="j_infor603_fig_001">
<label>Fig. 1</label>
<caption>
<p>Rating intervals of ABC implemented in different frameworks, including the author’s implementation.</p>
</caption>
<graphic xlink:href="infor603_g002.jpg"/>
</fig>
<p>For a more detailed analysis of the performance of different implementations, we plotted runtime profiles for each problem individually using cocoviz. The x-axis in the figures represents the budget, defined as the number of function evaluations, while the y-axis shows the fraction of target values reached. For each problem, the target value corresponded to its global optimum; therefore, reaching the target value indicates that the implementation found the global optimum.</p>
<p>The runtime profiles for all 12 problems for ABC are shown in Fig. <xref rid="j_infor603_fig_002">2</xref>. The 60-dimensional (60D) problems proved to be particularly challenging, as none of the implementations reached the global optimum. Among them, the Shifted Ackley problem was the most difficult. In contrast, the 2-dimensional (2D) Goldstein–Price problem was the least challenging: six out of the eight implementations found the global optimum, with PlatEMO converging the fastest. Interestingly, for the Shekel’s Foxholes and Hartman problems, only the authors’ implementation reached the global optimum. Among the 60D problems, the best performance was observed on the Shifted Schwefel problem, although the EARS, pagmo2, and the authors’ implementations performed slightly worse than the others.</p>
<fig id="j_infor603_fig_002">
<label>Fig. 2</label>
<caption>
<p>Profiles per problem for the ABC implementations.</p>
</caption>
<graphic xlink:href="infor603_g003.jpg"/>
</fig>
<p>Figure <xref rid="j_infor603_fig_003">3</xref> illustrates the rating intervals for DE across all 13 frameworks, including the authors’ Java implementation (DE-Author-Java). The rating interval of the author’s implementation overlaps with only four other implementations: PlatEMO, NiaPy, DEAP, and pagmo2. Among these, NiaPy showed the greatest degree of overlap, suggesting minimal deviation from the authors’ code. In contrast, although PlatEMO and the authors’ implementation were not significantly different in performance, their intervals barely overlapped, indicating greater deviation. The rating intervals of nine implementations did not overlap with the author’s implementation at all, indicating substantial differences. The top three ranked implementations stood out the most, outperforming six other implementations as well as the authors’ version.</p>
<fig id="j_infor603_fig_003">
<label>Fig. 3</label>
<caption>
<p>Rating intervals of DE implemented in different frameworks, including the authors’ implementation.</p>
</caption>
<graphic xlink:href="infor603_g004.jpg"/>
</fig>
<p>The runtime profiles for DE are presented in Fig. <xref rid="j_infor603_fig_004">4</xref>. Compared to the ABC implementations, the DE implementations performed better overall. However, no implementation was able to find the global optimum for any of the 60D problems. Among the 2D problems, only YPEA failed to find the global optimum for Goldstein–Price, and only Nevergrad and metaheuristicOpt failed to do so for Branin. For the Six-Hump Camel problem, six out of the 14 implementations reached the optimum. For Shekel’s Foxholes, only three implementations reached the optimum. NiaPy came close, but had very slow convergence. Interestingly, for the 3D Hartman problem, none of the implementations found the optimum. Among the 60D problems, the largest performance differences were observed on the Shifted Schwefel problem. The implementations can be divided roughly into two groups: those with faster convergence, and those with slower convergence. The only outlier was pagmo2, which did not belong to either group, and had the worst performance.</p>
<fig id="j_infor603_fig_004">
<label>Fig. 4</label>
<caption>
<p>Profiles per problem for the DE implementations.</p>
</caption>
<graphic xlink:href="infor603_g005.jpg"/>
</fig>
<p>In Fig. <xref rid="j_infor603_fig_005">5</xref>, we can observe the rating intervals for the authors’ implementation of GWO, along with implementations in seven different frameworks. None of the implementations have a high degree of overlap with the authors’ implementation, there is, however, at least some overlap with three implementations (metaheuristicOpt, NiaPy, and pagmo2). The implementation in EvoloPy outperformed all of the other implementations significantly, indicating the biggest deviation in its implementation. The worst-performing implementation was by MEALPY. It was outperformed by the authors’ implementation, as well as four other implementations.</p>
<fig id="j_infor603_fig_005">
<label>Fig. 5</label>
<caption>
<p>Rating intervals of GWO implemented in different frameworks, including the authors’ implementation.</p>
</caption>
<graphic xlink:href="infor603_g006.jpg"/>
</fig>
<p>The runtime profiles for GWO are presented in Fig. <xref rid="j_infor603_fig_006">6</xref>. Among the 60D problems, all the implementations performed best on Rosenbrock, the only non-shifted problem in this group. This supports the claim that GWO has a centre bias (Camacho Villalón <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_006">2020</xref>; Niu <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_048">2019</xref>). Interestingly, all the implementations converged to a very similar local optimum at a comparable rate, except for MEALPY, which lagged behind slightly. Similar to DE and ABC, the GWO implementations can be divided into two groups on the Shifted Schwefel problem. The implementations did not perform much better on the 3D Hartman problem. Only PlatEMO reached the global optimum on the Branin problem. The largest differences between implementations were observed on Shekel’s Foxholes.</p>
<fig id="j_infor603_fig_006">
<label>Fig. 6</label>
<caption>
<p>Profiles per problem for the GWO implementations.</p>
</caption>
<graphic xlink:href="infor603_g007.jpg"/>
</fig>
<p>In Fig. <xref rid="j_infor603_fig_007">7</xref>, we present the rating intervals for GA implementations across six frameworks. Despite the absence of an official reference implementation, the results reveal notable variability, even with consistent genetic operators. The pagmo2 implementation performed best, significantly outperforming pymoo, PlatEMO, and DEAP. Conversely, DEAP performed worst, significantly outperformed by all others. The implementations form three distinct groups with non-overlapping rating intervals between groups: pagmo2, jMetal, and MOEA in the first group; pymoo and PlatEMO in the second; and DEAP alone in the third. These results highlight significant performance differences among implementations, even with identical operators, underscoring the impact of implementation-specific details.</p>
<fig id="j_infor603_fig_007">
<label>Fig. 7</label>
<caption>
<p>Rating intervals of GA implemented in different frameworks.</p>
</caption>
<graphic xlink:href="infor603_g008.jpg"/>
</fig>
<p>The runtime profiles for GA are presented in Fig. <xref rid="j_infor603_fig_008">8</xref>. Similar patterns were observed across most 60D problems, except for Rosenbrock and Shifted Schwefel, where the behaviour differed. The implementations performed slightly better on the 3D Hartman problem, but the improvement was minimal. They performed significantly better on the 2D problems, although none reached the global optimum. The largest differences among implementations were observed on Shekel’s Foxholes, where pymoo emerged as the clear winner, approaching the global optimum.</p>
<fig id="j_infor603_fig_008">
<label>Fig. 8</label>
<caption>
<p>Profiles per problem for the GA implementations.</p>
</caption>
<graphic xlink:href="infor603_g009.jpg"/>
</fig>
<p>In Fig. <xref rid="j_infor603_fig_009">9</xref>, we examine the rating intervals for PSO implemented in twelve different frameworks. Similar to GA, an official author’s source code was unavailable for reference, leading to notable differences in the performance of these implementations. The resulting graph resembles a staircase, with mostly overlapping rating intervals and only a few instances of clear separation. Among the implementations, PSO-Nevergrad performed the least effectively, being outperformed by every implementation, while PSO-EvoloPy stood out as the top performer, outperforming all the others except for pagmo2. This performance gap raises questions about the potential significant differences between PSO-EvoloPy’s and PSO-Nevergrad’s implementations. Interestingly, there are two groups of implementations with similar performance. The first group includes PSO-jMetal, PSO-EARS, and PSO-DEAP, while the second group comprises PSO-metaheuristicOpt and PSO-YPEA. These variations in performance emphasize the need for an official source code as a reference point. In summary, the differences in implementation performance underscore the importance of providing a detailed implementation overview for reliable comparisons and evaluations of PSO algorithms in the absence of an official source code.</p>
<fig id="j_infor603_fig_009">
<label>Fig. 9</label>
<caption>
<p>Rating intervals of PSO implemented in different frameworks.</p>
</caption>
<graphic xlink:href="infor603_g010.jpg"/>
</fig>
<p>The runtime profiles for PSO are presented in Fig. <xref rid="j_infor603_fig_010">10</xref>. On the 60D problems, pagmo2 outperformed the others consistently, except on the Shifted Schwefel problem, where DEAP had the best performance. In most of the 60D cases, the implementations in pagmo2, EvoloPy, DEAP, and pymoo stood out. On the 3D Hartman problem, pymoo and EvoloPy were the clear winners, coming close to the global optimum. On the 2D problems, only some implementations reached the global optimum, though many came very close. Based on the proximity to the optimum, Goldstein–Price appeared to be the least challenging problem. Interestingly, similar to GA, the poorest performance on the Goldstein–Price problem was exhibited by the implementation in YPEA.</p>
<fig id="j_infor603_fig_010">
<label>Fig. 10</label>
<caption>
<p>Profiles per problem for PSO implementations.</p>
</caption>
<graphic xlink:href="infor603_g011.jpg"/>
</fig>
<p>Figure <xref rid="j_infor603_fig_011">11</xref> displays the rating intervals for the authors’ implementation of CMA-ES (CMA-ES-Author-Python), along with implementations in four different frameworks. The implementation in pagmo2 performed almost identically to the author’s, as indicated by their overlapping rating intervals. DEAP performed slightly worse, but its interval still overlaps a lot with the authors’ code. The implementation in pymoo performed the best, outperforming all of the other implementations significantly except the authors’. On the other hand, the implementation in jMetal performed the worst, being significantly outperformed by every other implementation, indicating a greater divergence in its implementation from the rest.</p>
<fig id="j_infor603_fig_011">
<label>Fig. 11</label>
<caption>
<p>Rating intervals of CMA-ES implemented in different frameworks.</p>
</caption>
<graphic xlink:href="infor603_g012.jpg"/>
</fig>
<p>The runtime profiles for CMA-ES are presented in Fig. <xref rid="j_infor603_fig_012">12</xref>. Among all the algorithms, CMA-ES showed the best performance on the 60D problems, with the jMetal implementation even finding the global optimum on the Shifted Sphere problem. The implementation in pymoo also stood out on the most challenging problem for all implementations (Shifted Ackley), where it came closest to the global optimum. On many 60D problems, the implementations had very similar performance. On the 3D Hartman problem, the pymoo implementation found the global optimum, while the author’s implementation came very close. Once again, the highest number of global optima was reached on the 2D problems. The jMetal implementation performed the worst overall, lagging far behind the others. The most surprising results were observed on the Shekel’s Foxholes problem, where all the implementations performed very poorly.</p>
<fig id="j_infor603_fig_012">
<label>Fig. 12</label>
<caption>
<p>Profiles per problem for the CMA-ES implementations.</p>
</caption>
<graphic xlink:href="infor603_g013.jpg"/>
</fig>
<sec id="j_infor603_s_006">
<label>5.1</label>
<title>Source Code Analysis</title>
<p>In this section, we analyse the source code of each algorithm implementation across the evaluated frameworks to identify the causes of observed performance differences. Since all algorithms were tested under the same experimental conditions, as described in Section <xref rid="j_infor603_s_004">4</xref>, any variations in results can be attributed to differences in implementation details and programming language choices. A key factor influencing these differences is the Pseudorandom Number Generator (PRNG) and the seed used. Although metaheuristics are generally not highly sensitive to the choice of PRNG, transparency regarding the PRNG employed is essential for reproducibility and fair comparison (Ding and Tan, <xref ref-type="bibr" rid="j_infor603_ref_012">2014</xref>; Zelinka <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_073">2013</xref>; Funakoshi <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_022">2016</xref>; Ma and Vandenbosch, <xref ref-type="bibr" rid="j_infor603_ref_039">2012</xref>). Most implementations adopt the Mersenne Twister as their PRNG. However, notable exceptions exist: the implementations in jMetal and the author’s implementation of DE utilized the JavaRandom class, which employs a Linear Congruential Generator (LCNG) as its PRNG. In contrast, the implementations in pymoo, EvoloPy, MealPy, NiaPy, Nevergrad, and the author’s implementation of CMA-ES rely on the random module from the NumPy library, which defaults to the Permuted Congruential Generator (PCG64). Regarding initialization, most implementations use the current time, a true random generator, or entropy as the initial seed. Exceptions include the Matlab-based implementations in PlatEMO, YPEA, and the author’s implementations of ABC and GWO, which default to a seed of 0. To ensure a fair comparison, we standardized the seed for all Matlab implementations to be based on the current time.</p>
<p>The results revealed significant differences in algorithm performance across the frameworks, indicating that almost all the algorithms varied at least partially in their implementation. This raises a crucial question: how should these results be interpreted? Typically, comparisons aim to identify which algorithms perform best for specific real-world problems. In our study, however, the focus was on consistency between the implementations. Ideally, the same algorithm should produce identical results across all the frameworks, ensuring that the choice of framework does not influence the experimental outcomes. Furthermore, if an implementation is based on the original authors’ source code, it should perform identically to the original. The more the rating intervals and performance profiles overlap, the more similar their performance and implementation are. Only then can we be confident in their correctness and ensure fair comparisons. Even if an algorithm performs better than the authors’ original version, deviations in implementation undermine the fairness of the comparisons. When the frameworks include implementations that deviate from the authors’ intent, any experiments conducted using such frameworks become questionable in their validity and fairness.</p>
<p>To determine the reasons behind the differences observed between the frameworks, we conducted a thorough analysis of the source code for all the implementations. The authors’ implementations of the algorithms served as our primary reference point, and key equations were provided for each algorithm. For PSO and GA, where official source codes from the authors were unavailable, we relied on the pseudocodes presented in Kennedy and Eberhart (<xref ref-type="bibr" rid="j_infor603_ref_035">1995</xref>), Holland (<xref ref-type="bibr" rid="j_infor603_ref_031">1992</xref>).</p>
<p>It is important to acknowledge that variations in performance may arise even when algorithm implementations are functionally identical. These differences can stem from language-specific factors such as numerical libraries, default precision, rounding behaviour, and random number generation. For example, in our earlier study (Ravber <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_055">2022a</xref>), we observed that evolutionary algorithms implemented in different programming languages, using the same random number generator and seed, began to diverge after several iterations. This indicates that subtle differences in implementation details can significantly affect algorithm behaviour. Furthermore, Goldberg (<xref ref-type="bibr" rid="j_infor603_ref_025">1991</xref>) emphasizes that compliance with the IEEE 754 floating-point standard does not guarantee identical results across platforms or compilers, due to differences in how operations are performed and rounded. Therefore, when evaluating and comparing algorithms, the characteristics of the programming language and its execution environment should be considered to ensure fair and reliable assessments.</p>
<p>In the subsequent sections we present a comprehensive analysis of the source codes for each algorithm, to identify any deviations from the original authors’ version, or other implementations that may contribute to the observed differences in performance. We provide a detailed description of the implementations of all the selected algorithms, thereby shedding light on the specific features introduced by each framework. By delving into the details of the implementations and identifying variations across the frameworks, this analysis aims to provide a better understanding of the factors influencing the performance differences between the algorithms. It allows us to identify the impact of each framework’s specific implementation choices, and aids in making informed comparisons and evaluations of the algorithms in a fair and comprehensive manner.</p>
<sec id="j_infor603_s_007">
<label>5.1.1</label>
<title>ABC Source Code Analysis</title>
<p>The Artificial Bee Colony algorithm, introduced by Karaboga and Basturk (<xref ref-type="bibr" rid="j_infor603_ref_034">2007</xref>), is a swarm-based metaheuristic inspired by the foraging behaviour of bees. It is used widely for optimization due to its simplicity and effectiveness. The authors’ homepage hosts multiple versions of ABC implemented in various programming languages, along with an enhanced variant based on the paper (Mernik <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_044">2015</xref>). To analyse implementation differences across frameworks, we focused on the core components of the original ABC algorithm, as defined by the authors’ source code. These components include the fitness calculation (equation (<xref rid="j_infor603_eq_001">1</xref>)), solution update mechanism (equation (<xref rid="j_infor603_eq_002">2</xref>)), and probability computation for onlooker bees (equation (<xref rid="j_infor603_eq_003">3</xref>)). Below, we present the key equations of the original ABC algorithm, which served as a reference for our analysis: <disp-formula-group id="j_infor603_dg_001">
<disp-formula id="j_infor603_eq_001">
<label>(1)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mi mathvariant="italic">b</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mfenced separators="" open="{" close="">
<mml:mrow>
<mml:mtable columnspacing="4.0pt" equalrows="false" columnlines="none" equalcolumns="false" columnalign="left left">
<mml:mtr>
<mml:mtd class="array">
<mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>+</mml:mo>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd class="array">
<mml:mtext>if</mml:mtext>
<mml:mspace width="2.5pt"/>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>⩾</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="array">
<mml:mn>1</mml:mn>
<mml:mo>+</mml:mo>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo stretchy="false">|</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd class="array">
<mml:mtext>if</mml:mtext>
<mml:mspace width="2.5pt"/>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">&lt;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& {f_{abc}}({x_{i}})=\left\{\begin{array}{l@{\hskip4.0pt}l}\frac{1}{1+f({x_{i}})},\hspace{1em}& \text{if}\hspace{2.5pt}f({x_{i}})\geqslant 0,\\ {} 1+|f({x_{i}})|,\hspace{1em}& \text{if}\hspace{2.5pt}f({x_{i}})\lt 0,\end{array}\right.\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_infor603_eq_002">
<label>(2)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mtext>rand</mml:mtext>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>·</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& {v_{ij}}={x_{ij}}+\text{rand}(-1,1)\cdot ({x_{ij}}-{x_{kj}}),\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_infor603_eq_003">
<label>(3)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0.9</mml:mn>
<mml:mo>·</mml:mo><mml:mstyle displaystyle="true">
<mml:mfrac>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mo movablelimits="false">max</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">F</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:mo>+</mml:mo>
<mml:mn>0.1</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
<mml:mi mathvariant="italic">F</mml:mi>
<mml:mo>=</mml:mo>
<mml:mo fence="true" maxsize="1.19em" minsize="1.19em">{</mml:mo>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">S</mml:mi>
<mml:mi mathvariant="italic">N</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo fence="true" maxsize="1.19em" minsize="1.19em">}</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& {p_{i}}=0.9\cdot \frac{f({x_{i}})}{\max (F)}+0.1,\hspace{1em}F=\big\{f({x_{1}}),f({x_{2}}),\dots ,f({x_{SN}})\big\},\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
</disp-formula-group> where <inline-formula id="j_infor603_ineq_062"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{i}}$]]></tex-math></alternatives></inline-formula> is a food source (solution), <inline-formula id="j_infor603_ineq_063"><alternatives><mml:math>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$f({x_{i}})$]]></tex-math></alternatives></inline-formula> is its objective function value, <inline-formula id="j_infor603_ineq_064"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${v_{i}}$]]></tex-math></alternatives></inline-formula> is a candidate solution, <italic>j</italic> is a randomly selected dimension, <inline-formula id="j_infor603_ineq_065"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">k</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{k}}$]]></tex-math></alternatives></inline-formula> is a randomly chosen neighbour solution <inline-formula id="j_infor603_ineq_066"><alternatives><mml:math>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">k</mml:mi>
<mml:mo stretchy="false">≠</mml:mo>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$(k\ne i)$]]></tex-math></alternatives></inline-formula>, and <inline-formula id="j_infor603_ineq_067"><alternatives><mml:math>
<mml:mi mathvariant="italic">S</mml:mi>
<mml:mi mathvariant="italic">N</mml:mi></mml:math><tex-math><![CDATA[$SN$]]></tex-math></alternatives></inline-formula> is the number of food sources (i.e. the population size).</p>
<p>Our analysis compares ABC implementations across seven frameworks (EARS, NiaPy, pagmo2, MEALPY, PlatEMO, YPEA, and metaheuristicOpt) against the original authors’ source code. Notably, the source code differs from the description provided in the original paper. For example, the paper defines the probability as <inline-formula id="j_infor603_ineq_068"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo><mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo largeop="false" movablelimits="false">∑</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">S</mml:mi>
<mml:mi mathvariant="italic">N</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mfrac>
</mml:mstyle></mml:math><tex-math><![CDATA[${p_{i}}=\frac{f({x_{i}})}{{\textstyle\sum _{n=1}^{SN}}f({x_{n}})}$]]></tex-math></alternatives></inline-formula>, which risks division by zero if all solutions converge to a fitness of zero. In contrast, equation (<xref rid="j_infor603_eq_003">3</xref>) in the source code introduces a normalization term, adding a constant to avoid this issue. Furthermore, the specialized fitness calculation in equation (<xref rid="j_infor603_eq_001">1</xref>) is unique to the source code, and is not mentioned in the original paper. These discrepancies underscore the importance of using the authors’ source code as the baseline for comparisons.</p>
<p>Among the frameworks, only EARS adopts the ABC fitness calculation from equation (<xref rid="j_infor603_eq_001">1</xref>). The implementations in pagmo2 and YPEA do not halve the population size to determine the number of food sources. PlatEMO and YPEA use alternative probability formulas: while the original equation (equation (<xref rid="j_infor603_eq_003">3</xref>)) is linear, their versions are exponential and normalized. In metaheuristicOpt, the formula differs slightly as well, replacing <inline-formula id="j_infor603_ineq_069"><alternatives><mml:math>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">F</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$max(F)$]]></tex-math></alternatives></inline-formula> with <inline-formula id="j_infor603_ineq_070"><alternatives><mml:math>
<mml:mi mathvariant="italic">s</mml:mi>
<mml:mi mathvariant="italic">u</mml:mi>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">F</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$sum(F)$]]></tex-math></alternatives></inline-formula>. Additionally, metaheuristicOpt employs greedy selection, where a new solution replaces its parent only if it is better. MEALPY and PlatEMO modify all the dimensions of a solution during the employed and onlooker bee phases, in contrast to the random dimension selection described in equation (<xref rid="j_infor603_eq_002">2</xref>). Interestingly, pagmo2 reverses the order of the onlooker and scout bee phases, altering the algorithm’s flow compared to the original design. MEALPY, metaheuristicOpt, and YPEA diverge further, by replacing all the scout bees exceeding the trial limit, whereas the original algorithm replaced only one, as implied by the scout phase logic. Some frameworks also differ in boundary handling. The authors’ implementation uses clipping, as does YPEA, although the latter restricts all bounds to <inline-formula id="j_infor603_ineq_071"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$[0,1]$]]></tex-math></alternatives></inline-formula> regardless of the problem. In metaheuristicOpt, solutions are repaired at the end of the main loop, which may result in the evaluation of infeasible solutions. In contrast, PlatEMO does not apply any boundary control. It is worth noting that we had to modify the source code of YPEA to change the parameter limit. Moreover, metaheuristicOpt only supports a maximum number of iterations as the stopping criterion, which is particularly problematic for ABC, as it does not account for the scout bee phase (Mernik <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_044">2015</xref>). The framework also includes numerous redundant calls to the fitness function, which can easily go unnoticed if performance is evaluated based solely on the number of iterations. Since our stopping criterion was defined in terms of a maximum number of function evaluations, we had to account for these additional, unintended evaluations when setting the maximum number of iterations. As a result, the implementation executed significantly fewer iterations, which was also reflected in its overall performance.</p>
<p>These implementation differences impact the solution quality significantly. Our findings emphasize the importance of documenting implementation choices carefully, as seemingly minor variations can lead to substantial performance differences. This analysis also highlights broader concerns applicable to other algorithms, such as the treatment of fitness calculations, stopping criteria, and boundary conditions, which are critical for ensuring consistent and reliable comparisons across the frameworks.</p>
</sec>
<sec id="j_infor603_s_008">
<label>5.1.2</label>
<title>DE Source Code Analysis</title>
<p>Differential Evolution, introduced by Storn and Price (<xref ref-type="bibr" rid="j_infor603_ref_062">1997</xref>), is a population-based metaheuristic used widely for continuous optimization, due to its robustness and simplicity. This analysis focuses on the classical DE strategy (rand/1/bin), comparing its implementation across all 13 frameworks against the original authors’ source code. The core components of DE include mutation (equation (<xref rid="j_infor603_eq_004">4</xref>)), crossover (equation (<xref rid="j_infor603_eq_005">5</xref>)), and selection (equation (<xref rid="j_infor603_eq_006">6</xref>)), which we summarize in the following equations: <disp-formula-group id="j_infor603_dg_002">
<disp-formula id="j_infor603_eq_004">
<label>(4)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mi mathvariant="italic">F</mml:mi>
<mml:mo>·</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">b</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
<mml:mtext>for</mml:mtext>
<mml:mspace width="2.5pt"/>
<mml:mi mathvariant="italic">j</mml:mi>
<mml:mspace width="2.5pt"/>
<mml:mtext>where</mml:mtext>
<mml:mspace width="2.5pt"/>
<mml:mtext>rand</mml:mtext>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">&lt;</mml:mo>
<mml:mi mathvariant="italic">C</mml:mi>
<mml:mi mathvariant="italic">R</mml:mi>
<mml:mspace width="2.5pt"/>
<mml:mtext>or</mml:mtext>
<mml:mspace width="2.5pt"/>
<mml:mi mathvariant="italic">j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">R</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& {y_{j}}={x_{a,j}}+F\cdot ({x_{b,j}}-{x_{c,j}}),\hspace{1em}\text{for}\hspace{2.5pt}j\hspace{2.5pt}\text{where}\hspace{2.5pt}\text{rand}(0,1)\lt CR\hspace{2.5pt}\text{or}\hspace{2.5pt}j=R,\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_infor603_eq_005">
<label>(5)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mfenced separators="" open="{" close="">
<mml:mrow>
<mml:mtable columnspacing="4.0pt" equalrows="false" columnlines="none" equalcolumns="false" columnalign="left left">
<mml:mtr>
<mml:mtd class="array">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mi mathvariant="italic">F</mml:mi>
<mml:mo>·</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">b</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd class="array">
<mml:mtext>if</mml:mtext>
<mml:mspace width="2.5pt"/>
<mml:mtext>rand</mml:mtext>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">&lt;</mml:mo>
<mml:mi mathvariant="italic">C</mml:mi>
<mml:mi mathvariant="italic">R</mml:mi>
<mml:mspace width="2.5pt"/>
<mml:mtext>or</mml:mtext>
<mml:mspace width="2.5pt"/>
<mml:mi mathvariant="italic">j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">R</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="array">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd class="array">
<mml:mtext>otherwise</mml:mtext>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& {y_{j}}=\left\{\begin{array}{l@{\hskip4.0pt}l}{x_{a,j}}+F\cdot ({x_{b,j}}-{x_{c,j}}),\hspace{1em}& \text{if}\hspace{2.5pt}\text{rand}(0,1)\lt CR\hspace{2.5pt}\text{or}\hspace{2.5pt}j=R,\\ {} {x_{i,j}},\hspace{1em}& \text{otherwise},\end{array}\right.\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_infor603_eq_006">
<label>(6)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mfenced separators="" open="{" close="">
<mml:mrow>
<mml:mtable columnspacing="4.0pt" equalrows="false" columnlines="none" equalcolumns="false" columnalign="left left">
<mml:mtr>
<mml:mtd class="array">
<mml:mi mathvariant="italic">y</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd class="array">
<mml:mtext>if</mml:mtext>
<mml:mspace width="2.5pt"/>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">y</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>⩽</mml:mo>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="array">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd class="array">
<mml:mtext>otherwise</mml:mtext>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& {x_{i}}=\left\{\begin{array}{l@{\hskip4.0pt}l}y,\hspace{1em}& \text{if}\hspace{2.5pt}f(y)\leqslant f({x_{i}}),\\ {} {x_{i}},\hspace{1em}& \text{otherwise},\end{array}\right.\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
</disp-formula-group> where <inline-formula id="j_infor603_ineq_072"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{i}}$]]></tex-math></alternatives></inline-formula> is the current solution, <italic>y</italic> is the trial solution, <inline-formula id="j_infor603_ineq_073"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{a}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_infor603_ineq_074"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">b</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{b}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_infor603_ineq_075"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{c}}$]]></tex-math></alternatives></inline-formula> are distinct randomly selected solutions (<inline-formula id="j_infor603_ineq_076"><alternatives><mml:math>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mo stretchy="false">≠</mml:mo>
<mml:mi mathvariant="italic">b</mml:mi>
<mml:mo stretchy="false">≠</mml:mo>
<mml:mi mathvariant="italic">c</mml:mi>
<mml:mo stretchy="false">≠</mml:mo>
<mml:mi mathvariant="italic">i</mml:mi></mml:math><tex-math><![CDATA[$a\ne b\ne c\ne i$]]></tex-math></alternatives></inline-formula>), <inline-formula id="j_infor603_ineq_077"><alternatives><mml:math>
<mml:mi mathvariant="italic">F</mml:mi>
<mml:mo stretchy="false">∈</mml:mo>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$F\in [0,2]$]]></tex-math></alternatives></inline-formula> is the scaling factor, <inline-formula id="j_infor603_ineq_078"><alternatives><mml:math>
<mml:mi mathvariant="italic">C</mml:mi>
<mml:mi mathvariant="italic">R</mml:mi>
<mml:mo stretchy="false">∈</mml:mo>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$CR\in [0,1]$]]></tex-math></alternatives></inline-formula> is the crossover rate, and <italic>R</italic> is a randomly chosen dimension index.</p>
<p>The original author’s source code for DE (rand/1/bin) does not include a boundary control method, allowing solutions to exceed the problem bounds. This omission can influence performance, as boundary handling affects the solution quality significantly (Kadavy <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_032">2022</xref>). Our analysis shows that most frameworks diverge from the original by incorporating boundary control, often in different ways.</p>
<p>Out of the 13 frameworks, all but one implemented boundary control, most commonly using clipping to keep the solutions within the problem bounds. In contrast, DEAP omits boundary control, aligning most closely with the author’s implementation in this regard. In YPEA, clipping is always performed in the fixed range <inline-formula id="j_infor603_ineq_079"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$[0,1]$]]></tex-math></alternatives></inline-formula>, regardless of the actual problem bounds. Notably, pagmo2 and pymoo use random reinitialization for out-of-bounds solutions instead of clipping. This approach encourages exploration, but diverges from standard practices. For EARS and pagmo2, the primary difference from the original DE implementation is the addition of boundary control. In contrast, DEAP’s adherence to the original design contributes to its performance similarity with the authors’ code. Other frameworks introduce further deviations. Nevergrad is the only framework that does not support the rand/1/bin strategy. Instead, it uses a variant similar to current-to-best/1/bin, which alters the algorithm’s behaviour significantly. In pymoo, an additional polynomial mutation is applied with a 0.1 probability. In EvoloPy, recombination is not guaranteed to occur for a randomly chosen dimension, which deviates from the standard implementation described in equation (<xref rid="j_infor603_eq_005">5</xref>). jMetal sorts the population after selection, which is not part of the original DE procedure and may affect the selection dynamics. NiaPy, metaheuristicOpt, EvoloPy, and pymoo modify the selection process (equation (<xref rid="j_infor603_eq_006">6</xref>)) by replacing the parent solution <inline-formula id="j_infor603_ineq_080"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{i}}$]]></tex-math></alternatives></inline-formula> only if the trial solution <italic>y</italic> is strictly better (<inline-formula id="j_infor603_ineq_081"><alternatives><mml:math>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">y</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">&lt;</mml:mo>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$f(y)\lt f({x_{i}})$]]></tex-math></alternatives></inline-formula>), rather than equal to, or better (<inline-formula id="j_infor603_ineq_082"><alternatives><mml:math>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">y</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>⩽</mml:mo>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$f(y)\leqslant f({x_{i}})$]]></tex-math></alternatives></inline-formula>). This stricter replacement condition may reduce diversity and slow convergence. DEAP and PlatEMO deviate in how they select agents for mutation (equation (<xref rid="j_infor603_eq_004">4</xref>)). Instead of selecting distinct agents <inline-formula id="j_infor603_ineq_083"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{a}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_infor603_ineq_084"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">b</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{b}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_infor603_ineq_085"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{c}}$]]></tex-math></alternatives></inline-formula> randomly, both frameworks apply tournament selection without ensuring distinctness. This may result in biased mutation vectors. Additionally, PlatEMO sets the base vector <inline-formula id="j_infor603_ineq_086"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{a}}$]]></tex-math></alternatives></inline-formula> to the current solution <inline-formula id="j_infor603_ineq_087"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{i}}$]]></tex-math></alternatives></inline-formula>, modifying the strategy from rand/1/bin to a variant closer to current/1/bin, which can reduce the exploration capability. These implementation differences can affect the solution quality significantly. The most impactful deviations are Nevergrad’s use of a different strategy and the redundant fitness evaluations found in metaheuristicOpt. These findings highlight the importance of consistent implementation, particularly in boundary handling and operator definitions, which are central to many evolutionary algorithms. Documenting such variations is essential for reliable benchmarking, and for understanding performance differences across metaheuristic frameworks.</p>
</sec>
<sec id="j_infor603_s_009">
<label>5.1.3</label>
<title>GWO Source Code Analysis</title>
<p>The Grey Wolf Optimizer, introduced by Mirjalili <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor603_ref_045">2014</xref>), is a swarm-based metaheuristic inspired by the social hierarchy and hunting behaviour of grey wolves. It is used widely for optimization, due to its balance of exploration and exploitation. This analysis compares GWO implementations in seven frameworks (EvoloPy, metaheuristicOpt, NiaPy, pagmo2, PlatEMO, EARS, and MEALPY) against the original authors’ Matlab source code. The core components of GWO include the calculation of distance vectors (equation (<xref rid="j_infor603_eq_007">7</xref>)), position updates (equations (<xref rid="j_infor603_eq_008">8</xref>) and (<xref rid="j_infor603_eq_009">9</xref>)), and coefficient adjustments (equation (<xref rid="j_infor603_eq_010">10</xref>)), which we summarize in the following equations: <disp-formula-group id="j_infor603_dg_003">
<disp-formula id="j_infor603_eq_007">
<label>(7)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">D</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">ω</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mo fence="true" maxsize="1.19em" minsize="1.19em" stretchy="true">|</mml:mo><mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">C</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
<mml:mo>·</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">ω</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo><mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo fence="true" maxsize="1.19em" minsize="1.19em" stretchy="true">|</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
<mml:mi mathvariant="italic">ω</mml:mi>
<mml:mo stretchy="false">∈</mml:mo>
<mml:mo fence="true" stretchy="false">{</mml:mo>
<mml:mi mathvariant="italic">α</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">β</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">δ</mml:mi>
<mml:mo fence="true" stretchy="false">}</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& {\vec{D}_{\omega }}=\big|\vec{C}\cdot {\vec{x}_{\omega }}(t)-\vec{x}(t)\big|,\hspace{1em}\omega \in \{\alpha ,\beta ,\delta \},\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_infor603_eq_008">
<label>(8)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">α</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo><mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
<mml:mo>·</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">D</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">α</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">β</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo><mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
<mml:mo>·</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">D</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">β</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">δ</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo><mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
<mml:mo>·</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">D</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">δ</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& {\vec{x}_{1}}={\vec{x}_{\alpha }}(t)-\vec{{A_{1}}}\cdot {\vec{D}_{\alpha }},\hspace{1em}{\vec{x}_{2}}={\vec{x}_{\beta }}(t)-\vec{{A_{2}}}\cdot {\vec{D}_{\beta }},\hspace{1em}{\vec{x}_{3}}={\vec{x}_{\delta }}(t)-\vec{{A_{3}}}\cdot {\vec{D}_{\delta }},\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_infor603_eq_009">
<label>(9)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo><mml:mstyle displaystyle="true">
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& \vec{x}(t+1)=\frac{{\vec{x}_{1}}+{\vec{x}_{2}}+{\vec{x}_{3}}}{3},\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_infor603_eq_010">
<label>(10)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
<mml:mo>=</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>·</mml:mo><mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
<mml:mo>·</mml:mo>
<mml:mtext>rand</mml:mtext>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/><mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">C</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
<mml:mo>=</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>·</mml:mo>
<mml:mtext>rand</mml:mtext>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>−</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo>·</mml:mo><mml:mstyle displaystyle="true">
<mml:mfrac>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& \vec{A}=2\cdot \vec{a}\cdot \text{rand}(0,1)-a,\hspace{1em}\vec{C}=2\cdot \text{rand}(0,1),\hspace{1em}a=2-t\cdot \frac{2}{T},\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
</disp-formula-group> where <inline-formula id="j_infor603_ineq_088"><alternatives><mml:math><mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$\vec{x}(t)$]]></tex-math></alternatives></inline-formula> is the position of a search agent at iteration <italic>t</italic>, <inline-formula id="j_infor603_ineq_089"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">α</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\vec{x}_{\alpha }}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_infor603_ineq_090"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">β</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\vec{x}_{\beta }}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_infor603_ineq_091"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">δ</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\vec{x}_{\delta }}$]]></tex-math></alternatives></inline-formula> are the positions of the top three solutions (alpha, beta, delta wolves), <inline-formula id="j_infor603_ineq_092"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">D</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">ω</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\vec{D}_{\omega }}$]]></tex-math></alternatives></inline-formula> is the distance vector, <inline-formula id="j_infor603_ineq_093"><alternatives><mml:math><mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover></mml:math><tex-math><![CDATA[$\vec{A}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_infor603_ineq_094"><alternatives><mml:math><mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">C</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover></mml:math><tex-math><![CDATA[$\vec{C}$]]></tex-math></alternatives></inline-formula> are coefficient vectors, <inline-formula id="j_infor603_ineq_095"><alternatives><mml:math><mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">→</mml:mo></mml:mover></mml:math><tex-math><![CDATA[$\vec{a}$]]></tex-math></alternatives></inline-formula> decreases linearly from 2 to 0 over iterations, and <italic>T</italic> is the maximum number of iterations.</p>
<p>Among the seven framework implementations, EvoloPy stands out the most, significantly outperforming every other implementation except for pagmo2. Analysis of its source code revealed only one difference from the authors’ implementation, yet it appears to have had a substantial impact. The difference lies in how EvoloPy updates the alpha, beta, and delta wolves. The updates are cascading: when the alpha is updated, the previous alpha becomes beta, and the previous beta becomes delta. Similarly, updating beta shifts the previous beta to delta. This results in different beta and delta positions compared to other implementations, which, in turn, affects the subsequent position updates. The implementation in MEALPY uses a greedy selection for new solutions, which, surprisingly, leads to worse performance. In metaheuristicOpt, there are two notable differences. A minor one is that the iterations start from 1 instead of 0. The more significant difference is that the alpha, beta, and delta wolves are updated for each wolf in the population, rather than just once per generation. In PlatEMO, there is a small deviation in how <italic>a</italic> (equation (<xref rid="j_infor603_eq_010">10</xref>)) is calculated. PlatEMO uses the number of evaluations instead of iterations. No differences were observed in the implementations in NiaPy, pagmo2, or EARS, suggesting that their performance differences can be attributed solely to the programming language used. Language-specific factors, such as numerical precision and floating-point behaviour, can influence the outcomes significantly. These effects were particularly evident in frameworks like EARS and pagmo2, where the implementation was consistent, but the performance lagged behind the authors’ implementation. Therefore, the programming language and its associated runtime environment can play a significant role in the performance of metaheuristic algorithms.</p>
</sec>
<sec id="j_infor603_s_010">
<label>5.1.4</label>
<title>GA Source Code Analysis</title>
<p>The Genetic Algorithm, introduced by Holland (<xref ref-type="bibr" rid="j_infor603_ref_031">1992</xref>), is a versatile metaheuristic inspired by natural selection, used widely for optimization, due to its adaptability to diverse problem types. GA supports numerous variations in selection, crossover, and mutation operators, but our study adopts a real-valued representation with tournament selection (equation (<xref rid="j_infor603_eq_011">11</xref>)), SBX (equation (<xref rid="j_infor603_eq_012">12</xref>)), and PM (equation (<xref rid="j_infor603_eq_013">13</xref>)) as the baseline. The absence of an official source code from the original author complicates direct comparisons, leading to significant performance variations driven by differences in operator implementations. The core components of the baseline GA are summarized in the following equations: <disp-formula-group id="j_infor603_dg_004">
<disp-formula id="j_infor603_eq_011">
<label>(11)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">b</mml:mi>
<mml:mi mathvariant="italic">e</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mo movablelimits="false">arg</mml:mo>
<mml:mo movablelimits="false">min</mml:mo>
<mml:mo fence="true" maxsize="1.19em" minsize="1.19em">{</mml:mo>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo stretchy="false">∣</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">∈</mml:mo>
<mml:mi mathvariant="italic">T</mml:mi>
<mml:mo fence="true" maxsize="1.19em" minsize="1.19em">}</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">T</mml:mi>
<mml:mo>=</mml:mo>
<mml:mo fence="true" stretchy="false">{</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mo movablelimits="false">…</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo fence="true" stretchy="false">}</mml:mo>
<mml:mo stretchy="false">∼</mml:mo>
<mml:mtext>Uniform</mml:mtext>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="script">P</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi mathvariant="italic">T</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">k</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& {x_{best}}=\arg \min \big\{f({x_{i}})\mid {x_{i}}\in T\big\},T=\{{x_{{i_{1}}}},\dots ,{x_{{i_{k}}}}\}\sim \text{Uniform}(\mathcal{P}),|T|=k,\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_infor603_eq_012">
<label>(12)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0.5</mml:mn>
<mml:mo fence="true" maxsize="1.19em" minsize="1.19em">[</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">β</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">β</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">b</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo fence="true" maxsize="1.19em" minsize="1.19em">]</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0.5</mml:mn>
<mml:mo fence="true" maxsize="1.19em" minsize="1.19em">[</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">β</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">β</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">b</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo fence="true" maxsize="1.19em" minsize="1.19em">]</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">β</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mfenced separators="" open="{" close="">
<mml:mrow>
<mml:mtable columnspacing="4.0pt" equalrows="false" columnlines="none" equalcolumns="false" columnalign="left left">
<mml:mtr>
<mml:mtd class="array">
<mml:msup>
<mml:mrow>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">η</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd class="array">
<mml:mtext>if</mml:mtext>
<mml:mspace width="2.5pt"/>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>⩽</mml:mo>
<mml:mn>0.5</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="array">
<mml:msup>
<mml:mrow>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">(</mml:mo><mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">η</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd class="array">
<mml:mtext>otherwise</mml:mtext>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:mtext>with probability</mml:mtext>
<mml:mspace width="2.5pt"/>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& {c_{1,j}}=0.5\big[(1+{\beta _{j}}){a_{j}}+(1-{\beta _{j}}){b_{j}}\big],\\ {} & {c_{2,j}}=0.5\big[(1-{\beta _{j}}){a_{j}}+(1+{\beta _{j}}){b_{j}}\big],\\ {} & {\beta _{j}}=\left\{\begin{array}{l@{\hskip4.0pt}l}{(2{u_{j}})^{\frac{1}{\eta +1}}},\hspace{1em}& \text{if}\hspace{2.5pt}{u_{j}}\leqslant 0.5,\\ {} {\big(\frac{1}{2(1-{u_{j}})}\big)^{\frac{1}{\eta +1}}},\hspace{1em}& \text{otherwise},\end{array}\right.\\ {} & \text{with probability}\hspace{2.5pt}{p_{c}},\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_infor603_eq_013">
<label>(13)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">δ</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">u</mml:mi>
<mml:mi mathvariant="italic">b</mml:mi>
<mml:mo>−</mml:mo>
<mml:mi mathvariant="italic">l</mml:mi>
<mml:mi mathvariant="italic">b</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">δ</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mfenced separators="" open="{" close="">
<mml:mrow>
<mml:mtable columnspacing="4.0pt" equalrows="false" columnlines="none" equalcolumns="false" columnalign="left left">
<mml:mtr>
<mml:mtd class="array">
<mml:msup>
<mml:mrow>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">η</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
</mml:mrow>
</mml:msup>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd class="array">
<mml:mtext>if</mml:mtext>
<mml:mspace width="2.5pt"/>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">&lt;</mml:mo>
<mml:mn>0.5</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="array">
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo fence="true" stretchy="false">]</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mstyle displaystyle="false">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">η</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd class="array">
<mml:mtext>otherwise</mml:mtext>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:mtext>with probability</mml:mtext>
<mml:mspace width="2.5pt"/>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& {c^{\prime }_{j}}={c_{j}}+{\delta _{j}}(ub-lb),\\ {} & {\delta _{j}}=\left\{\begin{array}{l@{\hskip4.0pt}l}{(2{r_{j}})^{\frac{1}{{\eta _{m}}+1}}}-1,\hspace{1em}& \text{if}\hspace{2.5pt}{r_{j}}\lt 0.5,\\ {} 1-{[2(1-{r_{j}})]^{\frac{1}{{\eta _{m}}+1}}},\hspace{1em}& \text{otherwise},\end{array}\right.\\ {} & \text{with probability}\hspace{2.5pt}{p_{m}},\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
</disp-formula-group> where <inline-formula id="j_infor603_ineq_096"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{i}}$]]></tex-math></alternatives></inline-formula> is an individual, <italic>T</italic> is the tournament of size <italic>k</italic>, sampled uniformly from the population <inline-formula id="j_infor603_ineq_097"><alternatives><mml:math>
<mml:mi mathvariant="script">P</mml:mi></mml:math><tex-math><![CDATA[$\mathcal{P}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_infor603_ineq_098"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">b</mml:mi>
<mml:mi mathvariant="italic">e</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{best}}$]]></tex-math></alternatives></inline-formula> is the best individual in the tournament, <italic>a</italic>, <italic>b</italic> are parent solutions, <inline-formula id="j_infor603_ineq_099"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${c_{1}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_infor603_ineq_100"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${c_{2}}$]]></tex-math></alternatives></inline-formula> are offspring, <inline-formula id="j_infor603_ineq_101"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">∼</mml:mo>
<mml:mtext>Uniform</mml:mtext>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[${u_{j}},{r_{j}}\sim \text{Uniform}(0,1)$]]></tex-math></alternatives></inline-formula>, <italic>η</italic> is the SBX distribution index, <inline-formula id="j_infor603_ineq_102"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">η</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\eta _{m}}$]]></tex-math></alternatives></inline-formula> is the PM distribution index, and <inline-formula id="j_infor603_ineq_103"><alternatives><mml:math>
<mml:mi mathvariant="italic">l</mml:mi>
<mml:mi mathvariant="italic">b</mml:mi></mml:math><tex-math><![CDATA[$lb$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_infor603_ineq_104"><alternatives><mml:math>
<mml:mi mathvariant="italic">u</mml:mi>
<mml:mi mathvariant="italic">b</mml:mi></mml:math><tex-math><![CDATA[$ub$]]></tex-math></alternatives></inline-formula> are the lower and upper bounds, respectively.</p>
<p>Our analysis examines GA implementations across six frameworks, using the above equations as the baseline due to the absence of an official reference implementation. Five frameworks lacking support for the selected operators (tournament selection, PM, and SBX) were omitted, as they used different operators. For example, tournament selection is unavailable in EvoloPy, metaheuristicOpt and YPEA, which, instead, use roulette wheel selection. The PM and SBX operators are not available in MEALPY, NiaPy, EvoloPy, and YPEA. Despite using similar operators, the selected frameworks exhibited significant performance variations due to implementation-specific details. For instance, DEAP lacks boundary control, allowing candidate solutions to exceed defined bounds, which can produce infeasible results and reduce solution quality (Kadavy <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_032">2022</xref>). PlatEMO scales the mutation probability in equation (<xref rid="j_infor603_eq_013">13</xref>) by dividing it by the number of problem dimensions, potentially limiting exploration in high-dimensional problems. In contrast, MOEA, jMetal, and pagmo2 implement elitism, preserving the best individuals between generations. MOEA retains one top solution, while jMetal and pagmo2 keep two, subtly affecting population dynamics and convergence behaviour.</p>
<p>These findings underscore that implementation details, such as boundary control, mutation scaling, and elitism strategies, significantly influence performance, even with consistent operators. The lack of an original GA source code amplifies these variations, highlighting challenges in benchmarking GAs. Consistent operator implementation and boundary handling are critical for reliable comparisons across frameworks.</p>
</sec>
<sec id="j_infor603_s_011">
<label>5.1.5</label>
<title>PSO Source Code Analysis</title>
<p>The Particle Swarm Optimization algorithm, introduced by Kennedy and Eberhart (<xref ref-type="bibr" rid="j_infor603_ref_035">1995</xref>), is a swarm-based metaheuristic inspired by the social behaviour of bird flocks, used widely for optimization due to its simplicity and effectiveness. While the original PSO defined a basic velocity update, modern implementations often adopt the modified version by Shi and Eberhart (<xref ref-type="bibr" rid="j_infor603_ref_060">1998</xref>), which introduced an inertia weight <italic>w</italic> to balance the global and local search. The core components of the modified PSO, used as our baseline, are velocity update (equation (<xref rid="j_infor603_eq_014">14</xref>)) and position update (equation (<xref rid="j_infor603_eq_015">15</xref>)), summarized in the following equations: <disp-formula-group id="j_infor603_dg_005">
<disp-formula id="j_infor603_eq_014">
<label>(14)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">w</mml:mi>
<mml:mo>·</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>·</mml:mo>
<mml:mi mathvariant="italic">r</mml:mi>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mi mathvariant="italic">n</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>·</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>·</mml:mo>
<mml:mi mathvariant="italic">r</mml:mi>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mi mathvariant="italic">n</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>·</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">g</mml:mi>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& {v_{i}}=w\cdot {v_{i}}+{c_{1}}\cdot rand(0,1)\cdot ({p_{i}}-{x_{i}})+{c_{2}}\cdot rand(0,1)\cdot (g-{x_{i}}),\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_infor603_eq_015">
<label>(15)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& {x_{i}}(t+1)={x_{i}}(t)+{v_{i}}(t+1),\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
</disp-formula-group> where <inline-formula id="j_infor603_ineq_105"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[${x_{i}}(t)$]]></tex-math></alternatives></inline-formula> is the position of particle <italic>i</italic> at iteration <italic>t</italic>, <inline-formula id="j_infor603_ineq_106"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[${v_{i}}(t)$]]></tex-math></alternatives></inline-formula> is its velocity, <inline-formula id="j_infor603_ineq_107"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${p_{i}}$]]></tex-math></alternatives></inline-formula> is the particle’s best-known position, <italic>g</italic> is the global best position, <italic>w</italic> is the inertia weight, <inline-formula id="j_infor603_ineq_108"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${c_{1}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_infor603_ineq_109"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${c_{2}}$]]></tex-math></alternatives></inline-formula> are acceleration coefficients, and <inline-formula id="j_infor603_ineq_110"><alternatives><mml:math>
<mml:mi mathvariant="italic">r</mml:mi>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mi mathvariant="italic">n</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$rand(0,1)$]]></tex-math></alternatives></inline-formula> is a uniform random number.</p>
<p>The incorporation of the inertia weight <italic>w</italic> assumes the crucial role of balancing the global and local search aspects. It can adopt the form of a positive constant, or a positive linear or nonlinear function of time. In the literature, one can discover numerous techniques for calculating the inertia weight <italic>w</italic> (Shami <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_059">2022</xref>). Of the 12 frameworks implementing PSO, only DEAP adheres to the original velocity update version. Conversely, the other 11 implementations adopt the enhanced version, with a uniform weight value of 0.7, as detailed in Table <xref rid="j_infor603_tab_003">3</xref>. It is worth mentioning that MEALPY, YPEA and EvoloPy diverge slightly, by employing a linear time-dependent function for the weight. In the original paper by the author, initial guidelines were absent for setting velocities, applying boundary control methods, and specifying maximum velocity (<inline-formula id="j_infor603_ineq_111"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${V_{max}}$]]></tex-math></alternatives></inline-formula>). These aspects were introduced in later papers. Subsequent source code analysis across frameworks revealed notable discrepancies, primarily concerning velocity initialization, boundary control for positions and velocities, and velocity update methods. Let’s delve into the practices adopted by each framework:</p>
<list>
<list-item id="j_infor603_li_007">
<label>1.</label>
<p>Initial Velocities Generation</p>
<list>
<list-item id="j_infor603_li_008">
<label>•</label>
<p><bold>NiaPy</bold>, <bold>YPEA</bold> and <bold>EvoloPy</bold>: Set initial velocities to 0.</p>
</list-item>
<list-item id="j_infor603_li_009">
<label>•</label>
<p><bold>DEAP</bold>, <bold>Nevergrad</bold> and <bold>metaheuristcOpt</bold>: Generate random velocities between <inline-formula id="j_infor603_ineq_112"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${V_{min}}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_infor603_ineq_113"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${V_{max}}$]]></tex-math></alternatives></inline-formula>.</p>
</list-item>
<list-item id="j_infor603_li_010">
<label>•</label>
<p><bold>MEALPY</bold>, <bold>EARS</bold>, <bold>pagmo2</bold> and <bold>jMetal</bold>: Utilize equations that incorporate variable bounds to generate the initial velocities.</p>
</list-item>
<list-item id="j_infor603_li_011">
<label>•</label>
<p><bold>PlatEMO</bold>: Initializes the initial velocities to match the particle positions.</p>
</list-item>
<list-item id="j_infor603_li_012">
<label>•</label>
<p><bold>pymoo</bold>: The initial velocity can be set to zero or initialized randomly (default). First, the maximum velocity vector is computed <inline-formula id="j_infor603_ineq_114"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mtext>_</mml:mtext>
<mml:mtext mathvariant="italic">velocity</mml:mtext>
<mml:mtext>_</mml:mtext>
<mml:mtext mathvariant="italic">rate</mml:mtext>
<mml:mo>·</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">u</mml:mi>
<mml:mi mathvariant="italic">b</mml:mi>
<mml:mo>−</mml:mo>
<mml:mi mathvariant="italic">l</mml:mi>
<mml:mi mathvariant="italic">b</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[${V_{max}}=max\text{\_}\textit{velocity}\text{\_}\textit{rate}\cdot (ub-lb)$]]></tex-math></alternatives></inline-formula>, where <inline-formula id="j_infor603_ineq_115"><alternatives><mml:math>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mtext>_</mml:mtext>
<mml:mtext mathvariant="italic">velocity</mml:mtext>
<mml:mtext>_</mml:mtext>
<mml:mtext mathvariant="italic">rate</mml:mtext>
<mml:mo>=</mml:mo>
<mml:mn>0.2</mml:mn></mml:math><tex-math><![CDATA[$max\text{\_}\textit{velocity}\text{\_}\textit{rate}=0.2$]]></tex-math></alternatives></inline-formula>. Then, each dimension’s velocity is sampled as <inline-formula id="j_infor603_ineq_116"><alternatives><mml:math>
<mml:mi mathvariant="italic">V</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">r</mml:mi>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mi mathvariant="italic">n</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>·</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[$V=rand(0,1)\cdot {V_{max}}$]]></tex-math></alternatives></inline-formula>.</p>
</list-item>
</list>
</list-item>
<list-item id="j_infor603_li_013">
<label>2.</label>
<p>Boundary Control for Positions and Velocities</p>
<list>
<list-item id="j_infor603_li_014">
<label>•</label>
<p><bold>DEAP</bold>, <bold>YPEA</bold> and <bold>PlatEMO</bold>: Lack position boundary control methods.</p>
</list-item>
<list-item id="j_infor603_li_015">
<label>•</label>
<p><bold>jMetal</bold>, <bold>NiaPy</bold>, <bold>EARS</bold>, <bold>metaheuristcOpt</bold>, <bold>EvoloPy</bold>, <bold>Nevergrad</bold> and <bold>pagmo2</bold>: Apply a common clipping method for position boundary control. In Nevergrad, however, clipping is always performed in the range <inline-formula id="j_infor603_ineq_117"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$[0,1]$]]></tex-math></alternatives></inline-formula>.</p>
</list-item>
<list-item id="j_infor603_li_016">
<label>•</label>
<p><bold>MEALPY</bold>: Generates a new random solution if the current solution is infeasible.</p>
</list-item>
<list-item id="j_infor603_li_017">
<label>•</label>
<p><bold>pymoo</bold>: If a solution is infeasible, the equations (<xref rid="j_infor603_eq_014">14</xref>) and (<xref rid="j_infor603_eq_015">15</xref>) are reapplied iteratively (up to 20 times). If the position is still infeasible, it is initialized randomly.</p>
</list-item>
<list-item id="j_infor603_li_018">
<label>•</label>
<p><bold>MEALPY</bold>, <bold>PlatEMO</bold>, <bold>EARS</bold>, <bold>Nevergrad</bold> and <bold>jMetal</bold>: Do not implement velocity boundary control methods.</p>
</list-item>
<list-item id="j_infor603_li_019">
<label>•</label>
<p><bold>jMetal</bold> and <bold>pagmo2</bold>: Reset velocity to 0 if a solution is infeasible.</p>
</list-item>
<list-item id="j_infor603_li_020">
<label>•</label>
<p><bold>pagmo2</bold>, <bold>metaheuristcOpt</bold>, <bold>pymoo</bold>, <bold>EvoloPy</bold> and <bold>DEAP</bold>: Apply velocity clipping using <inline-formula id="j_infor603_ineq_118"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${V_{max}}$]]></tex-math></alternatives></inline-formula> values.</p>
</list-item>
<list-item id="j_infor603_li_021">
<label>•</label>
<p><bold>NiaPy</bold>: Employs boundary reflection for velocities with <inline-formula id="j_infor603_ineq_119"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${V_{max}}$]]></tex-math></alternatives></inline-formula> set at 1.5.</p>
</list-item>
<list-item id="j_infor603_li_022">
<label>•</label>
<p><bold>YPEA</bold>: Employs boundary reflection for velocities, but applies it when positions go out of bounds, not when velocities do.</p>
</list-item>
</list>
</list-item>
<list-item id="j_infor603_li_023">
<label>3.</label>
<p>Velocity Update Methods</p>
<list>
<list-item id="j_infor603_li_024">
<label>•</label>
<p><bold>DEAP</bold>: Utilizes the same velocity update method as the original paper.</p>
</list-item>
<list-item id="j_infor603_li_025">
<label>•</label>
<p><bold>MEALPY</bold>, <bold>YPEA</bold> and <bold>EvoloPy</bold>: Adopt the equation (<xref rid="j_infor603_eq_014">14</xref>), with <italic>w</italic> being a linear function over time.</p>
</list-item>
<list-item id="j_infor603_li_026">
<label>•</label>
<p><bold>EARS</bold>: Utilizes equation (<xref rid="j_infor603_eq_014">14</xref>) without incorporating the current velocity <inline-formula id="j_infor603_ineq_120"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${v_{i}}$]]></tex-math></alternatives></inline-formula>, and it employs a constant value of 0.7 for the parameter <italic>w</italic>.</p>
</list-item>
<list-item id="j_infor603_li_027">
<label>•</label>
<p><bold>jMetal</bold>, <bold>metaheuristcOpt</bold>, <bold>pymoo</bold>, <bold>Nevergrad</bold> and <bold>NiaPy</bold>: Recalculate velocity entirely, without using the current velocity <inline-formula id="j_infor603_ineq_121"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${v_{i}}$]]></tex-math></alternatives></inline-formula>.</p>
</list-item>
<list-item id="j_infor603_li_028">
<label>•</label>
<p><bold>PlatEMO</bold>: Instead of using the current velocity, employs particle positions in the velocity update equation.</p>
</list-item>
<list-item id="j_infor603_li_029">
<label>•</label>
<p><bold>jMetal</bold> and <bold>PlatEMO</bold>: Do not include acceleration constants <inline-formula id="j_infor603_ineq_122"><alternatives><mml:math>
<mml:mi mathvariant="italic">c</mml:mi>
<mml:mn>1</mml:mn></mml:math><tex-math><![CDATA[$c1$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_infor603_ineq_123"><alternatives><mml:math>
<mml:mi mathvariant="italic">c</mml:mi>
<mml:mn>2</mml:mn></mml:math><tex-math><![CDATA[$c2$]]></tex-math></alternatives></inline-formula> in the calculations.</p>
</list-item>
<list-item id="j_infor603_li_030">
<label>•</label>
<p><bold>jMetal</bold>: Utilizes a modified range <inline-formula id="j_infor603_ineq_124"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">c</mml:mi>
<mml:mo fence="true" stretchy="false">]</mml:mo></mml:math><tex-math><![CDATA[$[0,c]$]]></tex-math></alternatives></inline-formula> for random values, with <inline-formula id="j_infor603_ineq_125"><alternatives><mml:math>
<mml:mi mathvariant="italic">c</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>0.5</mml:mn>
<mml:mo>+</mml:mo>
<mml:mo movablelimits="false">log</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$c=0.5+\log (2)$]]></tex-math></alternatives></inline-formula>.</p>
</list-item>
<list-item id="j_infor603_li_031">
<label>•</label>
<p><bold>jMetal</bold>: Implements a different velocity update equation when a particle’s personal best solution equals the global best.</p>
</list-item>
<list-item id="j_infor603_li_032">
<label>•</label>
<p><bold>pagmo2</bold>: Provides six distinct variants for velocity updates, with the default variant set to 5, which incorporates constriction coefficients as described in Clerc and Kennedy (<xref ref-type="bibr" rid="j_infor603_ref_007">2002</xref>).</p>
</list-item>
</list>
</list-item>
</list>
<p>It is worth noting that pagmo2 incorporates a swarm topology, which likely contributed to its strong performance, ranking second among all implementations. These observations highlight that greater discrepancies can emerge in implementations when no official source code is available. Frameworks diverge in their approaches to initializing velocities, applying boundary control methods, and updating velocities, indicating the significance of clear guidelines and established practices in achieving consistent results across different implementations.</p>
</sec>
<sec id="j_infor603_s_012">
<label>5.1.6</label>
<title>CMA-ES Source Code Analysis</title>
<p>The Covariance Matrix Adaptation Evolution Strategy, introduced by Hansen and Ostermeier (<xref ref-type="bibr" rid="j_infor603_ref_027">2001</xref>), is a powerful metaheuristic for continuous optimization, renowned for its ability to adapt the search distribution to the problem landscapes. Its complex algorithmic structure, involving covariance matrix updates and step-size adaptation, distinguishes it from simpler algorithms like PSO or GA. The core components of CMA-ES are sampling (equation (<xref rid="j_infor603_eq_016">16</xref>)), mean update (equation (<xref rid="j_infor603_eq_017">17</xref>)), covariance matrix update (equation (<xref rid="j_infor603_eq_018">18</xref>)), and step size update (equation (<xref rid="j_infor603_eq_019">19</xref>)), summarized in the following equations, which served as our baseline for comparison: <disp-formula-group id="j_infor603_dg_006">
<disp-formula id="j_infor603_eq_016">
<label>(16)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mi mathvariant="italic">σ</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>·</mml:mo>
<mml:mi mathvariant="script">N</mml:mi>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">(</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">C</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">λ</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& {x_{i}}=m(t)+\sigma (t)\cdot \mathcal{N}\big(0,C(t)\big),\hspace{1em}i=1,\dots ,\lambda ,\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_infor603_eq_017">
<label>(17)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>·</mml:mo>
<mml:munderover accentunder="false" accent="false">
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:mo largeop="true" movablelimits="false">∑</mml:mo></mml:mstyle>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">μ</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>:</mml:mo>
<mml:mi mathvariant="italic">λ</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& m(t+1)=m(t)+{c_{m}}\cdot {\sum \limits_{i=1}^{\mu }}{w_{i}}\big({x_{i:\lambda }}-m(t)\big),\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_infor603_eq_018">
<label>(18)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:mi mathvariant="italic">C</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>·</mml:mo>
<mml:mi mathvariant="italic">C</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>·</mml:mo>
<mml:mo mathvariant="normal" fence="true" maxsize="2.45em" minsize="2.45em">(</mml:mo>
<mml:munderover accentunder="false" accent="false">
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:mo largeop="true" movablelimits="false">∑</mml:mo></mml:mstyle>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">μ</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>·</mml:mo><mml:mstyle displaystyle="true">
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>:</mml:mo>
<mml:mi mathvariant="italic">λ</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">σ</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:mo>·</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>:</mml:mo>
<mml:mi mathvariant="italic">λ</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">σ</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
</mml:mrow>
<mml:mrow>
<mml:mo>⊤</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mspace width="-0.1667em"/>
<mml:mspace width="-0.1667em"/>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">δ</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>·</mml:mo>
<mml:mi mathvariant="italic">C</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mspace width="-0.1667em"/>
<mml:mo mathvariant="normal" fence="true" maxsize="2.45em" minsize="2.45em">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& C(t+1)=(1-{c_{c}})\cdot C(t)+{c_{c}}\cdot \Bigg({\sum \limits_{i=1}^{\mu }}{w_{i}}\cdot \frac{{x_{i:\lambda }}-m(t)}{\sigma (t)}\cdot {\frac{{x_{i:\lambda }}-m(t)}{\sigma (t)}^{\top }}\hspace{-0.1667em}\hspace{-0.1667em}+{c_{c}^{\delta }}\cdot C(t)\hspace{-0.1667em}\Bigg),\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_infor603_eq_019">
<label>(19)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt">
<mml:mtr>
<mml:mtd class="align-odd"/>
<mml:mtd class="align-even">
<mml:mi mathvariant="italic">σ</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">σ</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>·</mml:mo>
<mml:mo movablelimits="false">exp</mml:mo>
<mml:mo mathvariant="normal" fence="true" maxsize="2.03em" minsize="2.03em">(</mml:mo><mml:mstyle displaystyle="true">
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">σ</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">σ</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:mo>·</mml:mo>
<mml:mo mathvariant="normal" fence="true" maxsize="2.03em" minsize="2.03em">(</mml:mo><mml:mstyle displaystyle="true">
<mml:mfrac>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mi mathvariant="script">N</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">I</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">E</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="double-struck">E</mml:mi>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mi mathvariant="script">N</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">I</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mo fence="true" stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" maxsize="2.03em" minsize="2.03em">)</mml:mo>
<mml:mo mathvariant="normal" fence="true" maxsize="2.03em" minsize="2.03em">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{aligned}{}& \sigma (t+1)=\sigma (t)\cdot \exp \bigg(\frac{{c_{\sigma }}}{{d_{\sigma }}}\cdot \bigg(\frac{\| \mathcal{N}(0,I){\| _{E}}}{\mathbb{E}[\| \mathcal{N}(0,I)\| ]}-1\bigg)\bigg),\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
</disp-formula-group> where <inline-formula id="j_infor603_ineq_126"><alternatives><mml:math>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$m(t)$]]></tex-math></alternatives></inline-formula> is the mean of the search distribution at iteration <italic>t</italic>, <inline-formula id="j_infor603_ineq_127"><alternatives><mml:math>
<mml:mi mathvariant="italic">σ</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$\sigma (t)$]]></tex-math></alternatives></inline-formula> is the step-size, <inline-formula id="j_infor603_ineq_128"><alternatives><mml:math>
<mml:mi mathvariant="italic">C</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$C(t)$]]></tex-math></alternatives></inline-formula> is the covariance matrix, <inline-formula id="j_infor603_ineq_129"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>:</mml:mo>
<mml:mi mathvariant="italic">λ</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{i:\lambda }}$]]></tex-math></alternatives></inline-formula> are the top <italic>μ</italic> solutions from <italic>λ</italic> offspring, <inline-formula id="j_infor603_ineq_130"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${w_{i}}$]]></tex-math></alternatives></inline-formula> are recombination weights, <inline-formula id="j_infor603_ineq_131"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${c_{m}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_infor603_ineq_132"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${c_{c}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_infor603_ineq_133"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">σ</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${c_{\sigma }}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_infor603_ineq_134"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">σ</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${d_{\sigma }}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_infor603_ineq_135"><alternatives><mml:math>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">δ</mml:mi>
</mml:mrow>
</mml:msubsup></mml:math><tex-math><![CDATA[${c_{c}^{\delta }}$]]></tex-math></alternatives></inline-formula> are learning rates, and <inline-formula id="j_infor603_ineq_136"><alternatives><mml:math>
<mml:mi mathvariant="script">N</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">C</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$\mathcal{N}(0,C(t))$]]></tex-math></alternatives></inline-formula> is a multivariate normal distribution.</p>
<p>Our analysis compares CMA-ES implementations in jMetal, DEAP, pagmo2, and pymoo against the authors’ implementation. Due to the complexity of CMA-ES, six frameworks (EARS, MEALPY, MOEA, PlatEMO, YPEA, and Nevergard) produced non-functional implementations that yielded unreliable or no results. This underscores a key challenge in deploying complex algorithms without robust and verifiable reference implementations.</p>
<p>It is important to note that, although the author’s implementation supports a stopping criterion based on the maximum number of evaluations, it exceeded the specified limit consistently by 51 evaluations. While this number is small, it should not be overlooked. In all implementations, the learning rate <inline-formula id="j_infor603_ineq_137"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${c_{m}}$]]></tex-math></alternatives></inline-formula> (equation (<xref rid="j_infor603_eq_017">17</xref>)) was set to 1 implicitly. Interestingly, the pymoo framework uses the version of CMA-ES published on PyPI by the author Hansen <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor603_ref_028">2019</xref>), yet it performs slightly better. Since the code and parameters are identical, the differences can be attributed entirely to the framework’s handling. When bypassing pymoo’s wrapper class and calling the authors’ code directly, the results matched those of the authors’ implementation. In pymoo, the original algorithm is executed within a loop, with the stopping criterion managed externally by the framework, which ensures termination exactly at the specified number of evaluations. The implementations in pagmo2 and DEAP show more similarity to the authors’ version, though some deviations still exist. In pagmo2, a cap is added to the exponent in equation (<xref rid="j_infor603_eq_019">19</xref>), limiting it to a maximum value of 0.6. DEAP modifies the calculation of the cumulation factor <inline-formula id="j_infor603_ineq_138"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${c_{c}}$]]></tex-math></alternatives></inline-formula> (equation (<xref rid="j_infor603_eq_018">18</xref>)), diverging from the original formulation. The jMetal implementation deviates more substantially from the authors’ code, which was reflected in its lower performance. jMetal employs boundary clipping, while the authors’ code uses a bound transform approach. This transform applies a smooth, piecewise linear and quadratic function to map solutions back into the feasible space, preserving continuity and improving search behaviour near boundaries. Furthermore, the jMetal implementation does not include the coordinate-wise Standard Deviation capping mechanism found in the authors’ version, where Standard Deviations are limited to <inline-formula id="j_infor603_ineq_139"><alternatives><mml:math>
<mml:mn>2</mml:mn>
<mml:mo mathvariant="normal" stretchy="false">/</mml:mo>
<mml:mn>3</mml:mn></mml:math><tex-math><![CDATA[$2/3$]]></tex-math></alternatives></inline-formula> of the search space per dimension using the <inline-formula id="j_infor603_ineq_140"><alternatives><mml:math>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:mi mathvariant="italic">s</mml:mi>
<mml:mi mathvariant="italic">t</mml:mi>
<mml:mi mathvariant="italic">d</mml:mi></mml:math><tex-math><![CDATA[$maxstd$]]></tex-math></alternatives></inline-formula> parameter. Additionally, jMetal computes the learning rate <inline-formula id="j_infor603_ineq_141"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">μ</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${c_{\mu }}$]]></tex-math></alternatives></inline-formula> for the <inline-formula id="j_infor603_ineq_142"><alternatives><mml:math>
<mml:mi mathvariant="italic">r</mml:mi>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mi mathvariant="italic">n</mml:mi>
<mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">μ</mml:mi></mml:math><tex-math><![CDATA[$rank\mu $]]></tex-math></alternatives></inline-formula> update in the covariance matrix adaptation (equation (<xref rid="j_infor603_eq_018">18</xref>)) using a larger denominator. This results typically in a smaller <inline-formula id="j_infor603_ineq_143"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">μ</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${c_{\mu }}$]]></tex-math></alternatives></inline-formula>, slowing the adaptation of the covariance matrix <italic>C</italic>.</p>
</sec>
</sec>
</sec>
<sec id="j_infor603_s_013">
<label>6</label>
<title>Conclusions</title>
<p>In conclusion, when proposing a new evolutionary algorithm, it is important to compare it thoroughly with existing state-of-the-art algorithms. Replication experiments are necessary to address the limitations of directly comparing results from different studies. Metaheuristic frameworks make these experiments easier by providing pre-implemented algorithms. Our study reviewed the source codes and found differences between the implementations and the original authors’ versions. Comparing performance across various frameworks, both with and without the authors’ source code, showed significant differences with the same settings. While it is expected that algorithms implemented in different frameworks will exhibit varying performances, the extent of these differences was unexpectedly significant. These findings raise concerns about the reliability of previous studies that used these frameworks for comparisons. Although we compared only a handful of metaheuristics, we can claim confidently that the same findings apply to any other metaheuristic.</p>
<p>To improve the fairness and legitimacy of future experiments, researchers should validate the code they use. This would not only ensure accuracy and consistency, but also benefit the research community by promoting the use of correct implementations and enhancing the overall quality of scientific studies. When authors don’t use frameworks and either write the code themselves or get it from unofficial sources, even bigger problems can arise. Our study found significant differences across six evolutionary algorithms in different frameworks, caused solely by the framework implementations. These differences ranged from small to large, showing how even tiny changes can affect algorithm performance, and, to our surprise were not attributed only to the programming language used. We highlight the importance of making sure framework implementations match the original authors’ versions as closely as possible. If this is not possible, it is important to disclose any differences clearly and explain why they exist. Metaheuristic frameworks should state clearly which version of the algorithm they implement, and provide proper references to the original or modified formulations. Researchers must provide detailed information on algorithm parameters, operators, and strategies, including any deviations from the original version, and cite the exact source of the implementation if it was obtained from a specific framework, website, or repository. To enhance transparency and usability, frameworks should offer users the option to configure all the available control parameters, ensuring awareness of these settings, as not all users possess the expertise to modify source code, which also may not always be accessible. Furthermore, every framework should support setting the stopping criterion as the maximum number of function evaluations, as iteration-based criteria can be algorithm-dependent, and may fail to account for additional or unintended evaluations, such as those occurring in the ABC algorithm (Ravber <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_056">2022b</xref>). Using function evaluations as the stopping criterion also facilitates the detection of such unintended evaluations, thereby ensuring consistent and comparable performance assessments across diverse algorithms.</p>
<p>Despite these limitations, metaheuristic frameworks remain an essential tool for developing and evaluating new optimization algorithms. They reduce implementation effort by offering pre-implemented and debugged metaheuristics, support fair comparisons, and simplify the integration of new methods. Frameworks facilitate reuse, hybridization, and monitoring, often providing tools for visualization, parameter tuning, and even parallel or distributed computing. Their structured design allows researchers to focus on solving the actual optimization problem rather than dealing with implementation details. Moreover, using an existing framework encourages reproducibility and transparency, particularly when the newly proposed method is integrated directly into the same framework. This practice strengthens the contribution to the broader research community. While no framework is flawless, their use should be encouraged, provided researchers remain mindful of their limitations and clearly document any deviations (Molina <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_046">2020</xref>; Silva <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_061">2018</xref>; Parejo <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_051">2012</xref>; Dzalbs, <xref ref-type="bibr" rid="j_infor603_ref_015">2021</xref>; Osaba <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor603_ref_049">2021</xref>).</p>
<p>Promoting Open Science practices, such as sharing source code publicly, ensures that evaluations are robust and transparent. This openness helps the scientific community draw valid conclusions from comparative studies, and fosters a collaborative environment where knowledge and resources are freely accessible. By embracing Open Science, we can enhance the reliability, reproducibility, and overall quality of research in the field of evolutionary computation.</p>
</sec>
</body>
<back>
<ack id="j_infor603_ack_001">
<title>Acknowledgements</title>
<p>The authors acknowledge the financial support from the Slovenian Research Agency (Research Core Funding No. P2-0041 and P2-0114).</p></ack>
<ref-list id="j_infor603_reflist_001">
<title>References</title>
<ref id="j_infor603_ref_001">
<mixed-citation publication-type="chapter"><string-name><surname>Alba</surname>, <given-names>E.</given-names></string-name>, <string-name><surname>Ferretti</surname>, <given-names>E.</given-names></string-name>, <string-name><surname>Molina</surname>, <given-names>J.M.</given-names></string-name> (<year>2007</year>). <chapter-title>The influence of data implementation in the performance of evolutionary algorithms</chapter-title>. In: <source>International Conference on Computer Aided Systems Theory</source>. <publisher-name>Springer</publisher-name>, pp. <fpage>764</fpage>–<lpage>771</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_002">
<mixed-citation publication-type="other"><string-name><surname>Bartz-Beielstein</surname>, <given-names>T.</given-names></string-name>, <string-name><surname>Doerr</surname>, <given-names>C.</given-names></string-name>, <string-name><surname>van den Berg</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>Bossek</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Chandrasekaran</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Eftimov</surname>, <given-names>T.</given-names></string-name>, <string-name><surname>Fischbach</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Kerschke</surname>, <given-names>P.</given-names></string-name>, <string-name><surname>La Cava</surname>, <given-names>W.</given-names></string-name>, <string-name><surname>Lopez-Ibanez</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Malan</surname>, <given-names>K.M.</given-names></string-name>, <string-name><surname>Moore</surname>, <given-names>J.H.</given-names></string-name>, <string-name><surname>Naujoks</surname>, <given-names>B.</given-names></string-name>, <string-name><surname>Orzechowski</surname>, <given-names>P.</given-names></string-name>, <string-name><surname>Volz</surname>, <given-names>V.</given-names></string-name>, <string-name><surname>Wagner</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Weise</surname>, <given-names>T.</given-names></string-name> (2020). <italic>Benchmarking in optimization: best practice and open issues</italic>. arXiv preprint arXiv:<ext-link ext-link-type="uri" xlink:href="https://arxiv.org/abs/2007.03488">2007.03488</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_003">
<mixed-citation publication-type="chapter"><string-name><surname>Biedrzycki</surname>, <given-names>R.</given-names></string-name> (<year>2021</year>). <chapter-title>Comparison with state-of-the-art: traps and pitfalls</chapter-title>. In: <source>2021 IEEE Congress on Evolutionary Computation (CEC)</source>. <publisher-name>IEEE</publisher-name>, pp. <fpage>863</fpage>–<lpage>870</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_004">
<mixed-citation publication-type="journal"><string-name><surname>Biscani</surname>, <given-names>F.</given-names></string-name>, <string-name><surname>Izzo</surname>, <given-names>D.</given-names></string-name> (<year>2020</year>). <article-title>A parallel global multiobjective framework for optimization: pagmo</article-title>. <source>Journal of Open Source Software</source>, <volume>5</volume>(<issue>53</issue>), <fpage>2338</fpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.21105/joss.02338" xlink:type="simple">https://doi.org/10.21105/joss.02338</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_005">
<mixed-citation publication-type="journal"><string-name><surname>Blank</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Deb</surname>, <given-names>K.</given-names></string-name> (<year>2020</year>). <article-title>Pymoo: multi-objective optimization in python</article-title>. <source>Ieee Access</source>, <volume>8</volume>, <fpage>89497</fpage>–<lpage>89509</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_006">
<mixed-citation publication-type="chapter"><string-name><surname>Camacho Villalón</surname>, <given-names>C.L.</given-names></string-name>, <string-name><surname>Stützle</surname>, <given-names>T.</given-names></string-name>, <string-name><surname>Dorigo</surname>, <given-names>M.</given-names></string-name> (<year>2020</year>). <chapter-title>Grey wolf, firefly and bat algorithms: three widespread algorithms that do not contain any novelty</chapter-title>. In: <source>International Conference on Swarm Intelligence</source>. <publisher-name>Springer</publisher-name>, pp. <fpage>121</fpage>–<lpage>133</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_007">
<mixed-citation publication-type="journal"><string-name><surname>Clerc</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Kennedy</surname>, <given-names>J.</given-names></string-name> (<year>2002</year>). <article-title>The particle swarm-explosion, stability, and convergence in a multidimensional complex space</article-title>. <source>IEEE Transactions on Evolutionary Computation</source>, <volume>6</volume>(<issue>1</issue>), <fpage>58</fpage>–<lpage>73</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_008">
<mixed-citation publication-type="journal"><string-name><surname>Črepinšek</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Liu</surname>, <given-names>S.-H.</given-names></string-name>, <string-name><surname>Mernik</surname>, <given-names>M.</given-names></string-name> (<year>2014</year>). <article-title>Replication and comparison of computational experiments in applied evolutionary computing: common pitfalls and guidelines to avoid them</article-title>. <source>Applied Soft Computing</source>, <volume>19</volume>, <fpage>161</fpage>–<lpage>170</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_009">
<mixed-citation publication-type="journal"><string-name><surname>Darwish</surname>, <given-names>A.</given-names></string-name> (<year>2018</year>). <article-title>Bio-inspired computing: algorithms review, deep analysis, and the scope of applications</article-title>. <source>Future Computing and Informatics Journal</source>, <volume>3</volume>(<issue>2</issue>), <fpage>231</fpage>–<lpage>246</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_010">
<mixed-citation publication-type="journal"><string-name><surname>Deb</surname>, <given-names>K.</given-names></string-name>, <string-name><surname>Deb</surname>, <given-names>D.</given-names></string-name> (<year>2014</year>). <article-title>Analysing mutation schemes for real-parameter genetic algorithms</article-title>. <source>International Journal of Artificial Intelligence and Soft Computing</source>, <volume>4</volume>(<issue>1</issue>), <fpage>1</fpage>–<lpage>28</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_011">
<mixed-citation publication-type="journal"><string-name><surname>Deb</surname>, <given-names>K.</given-names></string-name>, <string-name><surname>Agrawal</surname>, <given-names>R.B.</given-names></string-name>, (<year>1995</year>). <article-title>Simulated binary crossover for continuous search space</article-title>. <source>Complex Systems</source>, <volume>9</volume>(<issue>2</issue>), <fpage>115</fpage>–<lpage>148</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_012">
<mixed-citation publication-type="chapter"><string-name><surname>Ding</surname>, <given-names>K.</given-names></string-name>, <string-name><surname>Tan</surname>, <given-names>Y.</given-names></string-name> (<year>2014</year>). <chapter-title>Comparison of random number generators in particle swarm optimization algorithm</chapter-title>. In: <source>2014 IEEE Congress on Evolutionary Computation (CEC)</source>. <publisher-name>IEEE</publisher-name>, pp. <fpage>2664</fpage>–<lpage>2671</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_013">
<mixed-citation publication-type="journal"><string-name><surname>Dokeroglu</surname>, <given-names>T.</given-names></string-name>, <string-name><surname>Sevinc</surname>, <given-names>E.</given-names></string-name>, <string-name><surname>Kucukyilmaz</surname>, <given-names>T.</given-names></string-name>, <string-name><surname>Cosar</surname>, <given-names>A.</given-names></string-name> (<year>2019</year>). <article-title>A survey on new generation metaheuristic algorithms</article-title>. <source>Computers &amp; Industrial Engineering</source>, <volume>137</volume>, <fpage>106040</fpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_014">
<mixed-citation publication-type="journal"><string-name><surname>Durillo</surname>, <given-names>J.J.</given-names></string-name>, <string-name><surname>Nebro</surname>, <given-names>A.J.</given-names></string-name> (<year>2011</year>). <article-title>jMetal: a Java framework for multi-objective optimization</article-title>. <source>Advances in Engineering Software</source>, <volume>42</volume>(<issue>10</issue>), <fpage>760</fpage>–<lpage>771</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_015">
<mixed-citation publication-type="other"><string-name><surname>Dzalbs</surname>, <given-names>I.</given-names></string-name> (2021). <italic>OptPlatform: metaheuristic optimisation framework for solving complex real-world problems</italic>. PhD thesis, Brunel University London.</mixed-citation>
</ref>
<ref id="j_infor603_ref_016">
<mixed-citation publication-type="other"><string-name><surname>EARS</surname></string-name> (2019). EARS – Evolutionary Algorithms Rating System (Github), available at <uri>https://github.com/UM-LPM/EARS</uri>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_017">
<mixed-citation publication-type="journal"><string-name><surname>Eftimov</surname>, <given-names>T.</given-names></string-name>, <string-name><surname>Korošec</surname>, <given-names>P.</given-names></string-name> (<year>2019</year>). <article-title>Identifying practical significance through statistical comparison of meta-heuristic stochastic optimization algorithms</article-title>. <source>Applied Soft Computing</source>, <volume>85</volume>, <fpage>105862</fpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_018">
<mixed-citation publication-type="chapter"><string-name><surname>Eiben</surname>, <given-names>A.E.</given-names></string-name>, <string-name><surname>Jelasity</surname>, <given-names>M.</given-names></string-name> (<year>2002</year>). <chapter-title>A critical note on experimental research methodology in EC</chapter-title>. In: <source>Proceedings of the 2002 Congress on Evolutionary Computation. CEC’02 (Cat. No. 02TH8600)</source>, Vol. <volume>1</volume>. <publisher-name>IEEE</publisher-name>, pp. <fpage>582</fpage>–<lpage>587</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_019">
<mixed-citation publication-type="journal"><string-name><surname>Ezugwu</surname>, <given-names>A.E.</given-names></string-name>, <string-name><surname>Adeleke</surname>, <given-names>O.J.</given-names></string-name>, <string-name><surname>Akinyelu</surname>, <given-names>A.A.</given-names></string-name>, <string-name><surname>Viriri</surname>, <given-names>S.</given-names></string-name> (<year>2020</year>). <article-title>A conceptual comparison of several metaheuristic algorithms on continuous optimisation problems</article-title>. <source>Neural Computing and Applications</source>, <volume>32</volume>, <fpage>6207</fpage>–<lpage>6251</lpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1007/s00521-019-04132-w" xlink:type="simple">https://doi.org/10.1007/s00521-019-04132-w</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_020">
<mixed-citation publication-type="journal"><string-name><surname>Faris</surname>, <given-names>H.</given-names></string-name>, <string-name><surname>Aljarah</surname>, <given-names>I.</given-names></string-name>, <string-name><surname>Mirjalili</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Castillo</surname>, <given-names>P.A.</given-names></string-name>, <string-name><surname>Guervós</surname>, <given-names>J.J.M.</given-names></string-name> (<year>2016</year>). <article-title>EvoloPy: an open-source nature-inspired optimization framework in python.</article-title> <source>IJCCI (ECTA)</source>, <volume>1</volume>, <fpage>171</fpage>–<lpage>177</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_021">
<mixed-citation publication-type="journal"><string-name><surname>Fortin</surname>, <given-names>F.-A.</given-names></string-name>, <string-name><surname>De Rainville</surname>, <given-names>F.-M.</given-names></string-name>, <string-name><surname>Gardner</surname>, <given-names>M.-A.</given-names></string-name>, <string-name><surname>Parizeau</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Gagné</surname>, <given-names>C.</given-names></string-name> (<year>2012</year>). <article-title>DEAP: evolutionary algorithms made easy</article-title>. <source>Journal of Machine Learning Research</source>, <volume>13</volume>, <fpage>2171</fpage>–<lpage>2175</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_022">
<mixed-citation publication-type="chapter"><string-name><surname>Funakoshi</surname>, <given-names>T.</given-names></string-name>, <string-name><surname>Nojima</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Ishibuchi</surname>, <given-names>H.</given-names></string-name> (<year>2016</year>). <chapter-title>Effects of different implementations of a real random number generator on the search behavior of multiobjective evolutionary algorithms</chapter-title>. In: <source>2016 Joint 8th International Conference on Soft Computing and Intelligent Systems (SCIS) and 17th International Symposium on Advanced Intelligent Systems (ISIS)</source>. <publisher-name>IEEE</publisher-name>, pp. <fpage>172</fpage>–<lpage>177</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_023">
<mixed-citation publication-type="journal"><string-name><surname>Glickman</surname>, <given-names>M.E.</given-names></string-name> (<year>1999</year>). <article-title>Parameter estimation in large dynamic paired comparison experiments</article-title>. <source>Journal of the Royal Statistical Society Series C: Applied Statistics</source>, <volume>48</volume>(<issue>3</issue>), <fpage>377</fpage>–<lpage>394</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_024">
<mixed-citation publication-type="other"><string-name><surname>Glickman</surname>, <given-names>M.E.</given-names></string-name> (2012). <italic>Example of the Glicko-2 system</italic>. Boston University.</mixed-citation>
</ref>
<ref id="j_infor603_ref_025">
<mixed-citation publication-type="journal"><string-name><surname>Goldberg</surname>, <given-names>D.</given-names></string-name> (<year>1991</year>). <article-title>What every computer scientist should know about floating-point arithmetic</article-title>. <source>ACM Computing surveys (CSUR)</source>, <volume>23</volume>(<issue>1</issue>), <fpage>5</fpage>–<lpage>48</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_026">
<mixed-citation publication-type="other"><string-name><surname>Hadka</surname>, <given-names>D.</given-names></string-name> (2014). <italic>MOEA Framework: A Free and Open Source Java Framework for Multiobjective Optimization</italic>. Available at <uri>http://moeaframework.org</uri>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_027">
<mixed-citation publication-type="journal"><string-name><surname>Hansen</surname>, <given-names>N.</given-names></string-name>, <string-name><surname>Ostermeier</surname>, <given-names>A.</given-names></string-name> (<year>2001</year>). <article-title>Completely derandomized self-adaptation in evolution strategies</article-title>. <source>Evolutionary computation</source>, <volume>9</volume>(<issue>2</issue>), <fpage>159</fpage>–<lpage>195</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_028">
<mixed-citation publication-type="other"><string-name><surname>Hansen</surname>, <given-names>N.</given-names></string-name>, <string-name><surname>Akimoto</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Baudis</surname>, <given-names>P.</given-names></string-name> (2019). CMA-ES/pycma on Github. Zenodo. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.5281/zenodo.2559634" xlink:type="simple">https://doi.org/10.5281/zenodo.2559634</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_029">
<mixed-citation publication-type="other"><string-name><surname>Hansen</surname>, <given-names>N.</given-names></string-name>, <string-name><surname>Auger</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Finck</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Ros</surname>, <given-names>R.</given-names></string-name> (2010). <italic>Real-Parameter Black-Box Optimization Benchmarking 2010: Experimental Setup</italic>. Research Report RR-7215, INRIA. <uri>https://hal.inria.fr/inria-00462481</uri>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_030">
<mixed-citation publication-type="journal"><string-name><surname>Hansen</surname>, <given-names>N.</given-names></string-name>, <string-name><surname>Auger</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Ros</surname>, <given-names>R.</given-names></string-name>, <string-name><surname>Mersmann</surname>, <given-names>O.</given-names></string-name>, <string-name><surname>Tušar</surname>, <given-names>T.</given-names></string-name>, <string-name><surname>Brockhoff</surname>, <given-names>D.</given-names></string-name> (<year>2021</year>). <article-title>COCO: a platform for comparing continuous optimizers in a black-box setting</article-title>. <source>Optimization Methods and Software</source>, <volume>36</volume>(<issue>1</issue>), <fpage>114</fpage>–<lpage>144</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_031">
<mixed-citation publication-type="book"><string-name><surname>Holland</surname>, <given-names>J.H.</given-names></string-name> (<year>1992</year>). <source>Adaptation in Natural and Artificial Systems: An Introductory Analysis with Applications to Biology, Control, and Artificial Intelligence</source>. <publisher-name>MIT press</publisher-name>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_032">
<mixed-citation publication-type="journal"><string-name><surname>Kadavy</surname>, <given-names>T.</given-names></string-name>, <string-name><surname>Viktorin</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Kazikova</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Pluhacek</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Senkerik</surname>, <given-names>R.</given-names></string-name> (<year>2022</year>). <article-title>Impact of boundary control methods on bound-constrained optimization benchmarking</article-title>. <source>IEEE Transactions on Evolutionary Computation</source>, <volume>26</volume>(<issue>6</issue>), <fpage>1271</fpage>–<lpage>1280</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_033">
<mixed-citation publication-type="other"><string-name><surname>Kalami Heris</surname>, <given-names>S.</given-names></string-name> (2019). Yarpiz Evolutionary Algorithms Toolbox (YPEA).</mixed-citation>
</ref>
<ref id="j_infor603_ref_034">
<mixed-citation publication-type="journal"><string-name><surname>Karaboga</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>Basturk</surname>, <given-names>B.</given-names></string-name> (<year>2007</year>). <article-title>A powerful and efficient algorithm for numerical function optimization: artificial bee colony (ABC) algorithm</article-title>. <source>Journal of global optimization</source>, <volume>39</volume>(<issue>3</issue>), <fpage>459</fpage>–<lpage>471</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_035">
<mixed-citation publication-type="chapter"><string-name><surname>Kennedy</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Eberhart</surname>, <given-names>R.</given-names></string-name> (<year>1995</year>). <chapter-title>Particle swarm optimization</chapter-title>. In: <source>Proceedings of ICNN’95 – International Conference on Neural Networks</source>, Vol. <volume>4</volume>, pp. <fpage>1942</fpage>–<lpage>1948</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_036">
<mixed-citation publication-type="journal"><string-name><surname>Kovačević</surname>, <given-names>Ž.</given-names></string-name>, <string-name><surname>Ravber</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Liu</surname>, <given-names>S.-H.</given-names></string-name>, <string-name><surname>Črepinšek</surname>, <given-names>M.</given-names></string-name> (<year>2022</year>). <article-title>Automatic compiler/interpreter generation from programs for domain-specific languages: code bloat problem and performance improvement</article-title>. <source>Journal of Computer Languages</source>, <volume>70</volume>, <fpage>101105</fpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_037">
<mixed-citation publication-type="other"><string-name><surname>LaTorre</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Molina</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>Osaba</surname>, <given-names>E.</given-names></string-name>, <string-name><surname>Del Ser</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Herrera</surname>, <given-names>F.</given-names></string-name> (2020). <italic>Fairness in bio-inspired optimization research: a prescription of methodological guidelines for comparing meta-heuristics</italic>. arXiv preprint arXiv:<ext-link ext-link-type="uri" xlink:href="https://arxiv.org/abs/2004.09969">2004.09969</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_038">
<mixed-citation publication-type="journal"><string-name><surname>Lee</surname>, <given-names>H.M.</given-names></string-name>, <string-name><surname>Jung</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>Sadollah</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Kim</surname>, <given-names>J.H.</given-names></string-name> (<year>2020</year>). <article-title>Performance comparison of metaheuristic algorithms using a modified Gaussian fitness landscape generator</article-title>. <source>Soft Computing</source>, <volume>24</volume>, <fpage>7383</fpage>–<lpage>7393</lpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1007/s00500-019-04363-y" xlink:type="simple">https://doi.org/10.1007/s00500-019-04363-y</ext-link>. <uri>https://link.springer.com/article/10.1007/s00500-019-04363-y</uri>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_039">
<mixed-citation publication-type="chapter"><string-name><surname>Ma</surname>, <given-names>Z.</given-names></string-name>, <string-name><surname>Vandenbosch</surname>, <given-names>G.A.</given-names></string-name> (<year>2012</year>). <chapter-title>Impact of random number generators on the performance of particle swarm optimization in antenna design</chapter-title>. In: <source>2012 6th European conference on antennas and propagation (EUCAP)</source>. <publisher-name>IEEE</publisher-name>, pp. <fpage>925</fpage>–<lpage>929</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_040">
<mixed-citation publication-type="journal"><string-name><surname>Ma</surname>, <given-names>Z.</given-names></string-name>, <string-name><surname>Wu</surname>, <given-names>G.</given-names></string-name>, <string-name><surname>Suganthan</surname>, <given-names>P.N.</given-names></string-name>, <string-name><surname>Song</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Luo</surname>, <given-names>Q.</given-names></string-name> (<year>2023</year>). <article-title>Performance assessment and exhaustive listing of 500+ nature-inspired metaheuristic algorithms</article-title>. <source>Swarm and Evolutionary Computation</source>, <volume>77</volume>, <fpage>101248</fpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_041">
<mixed-citation publication-type="chapter"><string-name><surname>Merelo</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Romero</surname>, <given-names>G.</given-names></string-name>, <string-name><surname>Arenas</surname>, <given-names>M.G.</given-names></string-name>, <string-name><surname>Castillo</surname>, <given-names>P.A.</given-names></string-name>, <string-name><surname>Mora</surname>, <given-names>A.M.</given-names></string-name>, <string-name><surname>Laredo</surname>, <given-names>J.L.J.</given-names></string-name> (<year>2011</year>). <chapter-title>Implementation matters: programming best practices for evolutionary algorithms</chapter-title>. In: <source>International Work-Conference on Artificial Neural Networks</source>. <publisher-name>Springer</publisher-name>, pp. <fpage>333</fpage>–<lpage>340</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_042">
<mixed-citation publication-type="chapter"><string-name><surname>Merelo-Guervós</surname>, <given-names>J.-J.</given-names></string-name>, <string-name><surname>Blancas-Álvarez</surname>, <given-names>I.</given-names></string-name>, <string-name><surname>Castillo</surname>, <given-names>P.A.</given-names></string-name>, <string-name><surname>Romero</surname>, <given-names>G.</given-names></string-name>, <string-name><surname>Rivas</surname>, <given-names>V.M.</given-names></string-name>, <string-name><surname>García-Valdez</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Hernández-Águila</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Romáin</surname>, <given-names>M.</given-names></string-name> (<year>2016</year>a). <chapter-title>A comparison of implementations of basic evolutionary algorithm operations in different languages</chapter-title>. In: <source>2016 IEEE Congress on Evolutionary Computation (CEC)</source>. <publisher-name>IEEE</publisher-name>, pp. <fpage>1602</fpage>–<lpage>1609</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_043">
<mixed-citation publication-type="chapter"><string-name><surname>Merelo-Guervós</surname>, <given-names>J.J.</given-names></string-name>, <string-name><surname>Blancas-Alvarez</surname>, <given-names>I.</given-names></string-name>, <string-name><surname>Castillo</surname>, <given-names>P.A.</given-names></string-name>, <string-name><surname>Romero</surname>, <given-names>G.</given-names></string-name>, <string-name><surname>García-Sánchez</surname>, <given-names>P.</given-names></string-name>, <string-name><surname>Rivas</surname>, <given-names>V.M.</given-names></string-name>, <string-name><surname>García-Valdez</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Hernández-Águila</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Román</surname>, <given-names>M.</given-names></string-name> (<year>2016</year>b). <chapter-title>Ranking the performance of compiled and interpreted languages in genetic algorithms</chapter-title>. In: <source>Proceedings of the International Conference on Evolutionary Computation Theory and Applications, Porto, Portugal</source>, Vol. <volume>11</volume>, pp. <fpage>164</fpage>–<lpage>170</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_044">
<mixed-citation publication-type="journal"><string-name><surname>Mernik</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Liu</surname>, <given-names>S.-H.</given-names></string-name>, <string-name><surname>Karaboga</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>Črepinšek</surname>, <given-names>M.</given-names></string-name> (<year>2015</year>). <article-title>On clarifying misconceptions when comparing variants of the artificial bee colony algorithm by offering a new implementation</article-title>. <source>Information Sciences</source>, <volume>291</volume>, <fpage>115</fpage>–<lpage>127</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_045">
<mixed-citation publication-type="journal"><string-name><surname>Mirjalili</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Mirjalili</surname>, <given-names>S.M.</given-names></string-name>, <string-name><surname>Lewis</surname>, <given-names>A.</given-names></string-name> (<year>2014</year>). <article-title>Grey wolf optimizer</article-title>. <source>Advances in Engineering Software</source>, <volume>69</volume>, <fpage>46</fpage>–<lpage>61</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_046">
<mixed-citation publication-type="journal"><string-name><surname>Molina</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>Poyatos</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Del Ser</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>García</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Hussain</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Herrera</surname>, <given-names>F.</given-names></string-name> (<year>2020</year>). <article-title>Comprehensive taxonomies of nature-and bio-inspired optimization: inspiration versus algorithmic behavior, critical analysis recommendations</article-title>. <source>Cognitive Computation</source>, <volume>12</volume>(<issue>5</issue>), <fpage>897</fpage>–<lpage>939</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_047">
<mixed-citation publication-type="journal"><string-name><surname>Morales-Castañeda</surname>, <given-names>B.</given-names></string-name>, <string-name><surname>Pérez-Cisneros</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Cuevas</surname>, <given-names>E.</given-names></string-name>, <string-name><surname>Zaldívar</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>Toski</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Rodríguez</surname>, <given-names>A.</given-names></string-name> (<year>2025</year>). <article-title>Analyzing metaheuristic algorithms performance and the causes of the zero-bias problem: a different perspective in benchmarks</article-title>. <source>Evolutionary Intelligence</source>, <volume>18</volume>(<issue>2</issue>), <fpage>1</fpage>–<lpage>19</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_048">
<mixed-citation publication-type="journal"><string-name><surname>Niu</surname>, <given-names>P.</given-names></string-name>, <string-name><surname>Niu</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>liu</surname>, <given-names>N.</given-names></string-name>, <string-name><surname>Chang</surname>, <given-names>L.</given-names></string-name>, (<year>2019</year>). <article-title>The defect of the Grey Wolf optimization algorithm and its verification method</article-title>. <source>Knowledge-Based Systems</source>, <volume>171</volume>, <fpage>37</fpage>–<lpage>43</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_049">
<mixed-citation publication-type="journal"><string-name><surname>Osaba</surname>, <given-names>E.</given-names></string-name>, <string-name><surname>Villar-Rodriguez</surname>, <given-names>E.</given-names></string-name>, <string-name><surname>Del Ser</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Nebro</surname>, <given-names>A.J.</given-names></string-name>, <string-name><surname>Molina</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>LaTorre</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Suganthan</surname>, <given-names>P.N.</given-names></string-name>, <string-name><surname>Coello</surname>, <given-names>C.A.C.</given-names></string-name>, <string-name><surname>Herrera</surname>, <given-names>F.</given-names></string-name> (<year>2021</year>). <article-title>A tutorial on the design, experimentation and application of metaheuristic algorithms to real-world optimization problems</article-title>. <source>Swarm and Evolutionary Computation</source>, <volume>64</volume>, <fpage>100888</fpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_050">
<mixed-citation publication-type="journal"><string-name><surname>Oztas</surname>, <given-names>G.Z.</given-names></string-name>, <string-name><surname>Erdem</surname>, <given-names>S.</given-names></string-name> (<year>2021</year>). <article-title>Framework selection for developing optimization algorithms: assessing preferences by conjoint analysis and best–worst method</article-title>. <source>Soft Computing</source>, <volume>25</volume>(<issue>5</issue>), <fpage>3831</fpage>–<lpage>3848</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_051">
<mixed-citation publication-type="journal"><string-name><surname>Parejo</surname>, <given-names>J.A.</given-names></string-name>, <string-name><surname>Ruiz-Cortés</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Lozano</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Fernandez</surname>, <given-names>P.</given-names></string-name> (<year>2012</year>). <article-title>Metaheuristic optimization frameworks: a survey and benchmarking</article-title>. <source>Soft Computing</source>, <volume>16</volume>, <fpage>527</fpage>–<lpage>561</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_052">
<mixed-citation publication-type="journal"><string-name><surname>Ramírez</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Barbudo</surname>, <given-names>R.</given-names></string-name>, <string-name><surname>Romero</surname>, <given-names>J.R.</given-names></string-name> (<year>2023</year>). <article-title>An experimental comparison of metaheuristic frameworks for multi-objective optimization</article-title>. <source>Expert Systems</source>, <volume>40</volume>(<issue>4</issue>), <fpage>12672</fpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_053">
<mixed-citation publication-type="other"><string-name><surname>Rapin</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Teytaud</surname>, <given-names>O.</given-names></string-name> (2018). <italic>Nevergrad – A gradient-free optimization platform</italic>. GitHub.</mixed-citation>
</ref>
<ref id="j_infor603_ref_054">
<mixed-citation publication-type="chapter"><string-name><surname>Ravber</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Mernik</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Črepinšek</surname>, <given-names>M.</given-names></string-name> (<year>2016</year>). <chapter-title>The impact of quality indicators on the rating of multi-objective evolutionary algorithms</chapter-title>. In: <source>Conference on Bioinspired Optimization Methods and their Applications (BIOMA 2016)</source>, pp. <fpage>119</fpage>–<lpage>130</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_055">
<mixed-citation publication-type="journal"><string-name><surname>Ravber</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Moravec</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Mernik</surname>, <given-names>M.</given-names></string-name> (<year>2022</year>a). <article-title>Primerjava evolucijskih algoritmov implementiranih v različnih programskih jezikih</article-title>. <source>Electrotechnical Review/Elektrotehniski Vestnik</source>, <volume>89</volume>, <issue>(</issue>1–2), <fpage>46</fpage>–<lpage>52</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_056">
<mixed-citation publication-type="journal"><string-name><surname>Ravber</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Liu</surname>, <given-names>S.-H.</given-names></string-name>, <string-name><surname>Mernik</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Črepinšek</surname>, <given-names>M.</given-names></string-name> (<year>2022</year>b). <article-title>Maximum number of generations as a stopping criterion considered harmful</article-title>. <source>Applied Soft Computing</source>, <volume>128</volume>, <fpage>109478</fpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_057">
<mixed-citation publication-type="journal"><string-name><surname>Riza</surname>, <given-names>L.S.</given-names></string-name>, <string-name><surname>Iip</surname></string-name>, <string-name><surname>Nugroho</surname>, <given-names>E.P.</given-names></string-name>, <string-name><surname>Munir</surname></string-name> (<year>2018</year>). <article-title>MetaheuristicOpt: an R Package for optimisation based on meta-heuristics algorithms</article-title>. <source>Pertanika Journal of Science and Technology</source>, <volume>26</volume>(<issue>3</issue>), <fpage>1401</fpage>–<lpage>1411</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_058">
<mixed-citation publication-type="journal"><string-name><surname>Sahin</surname>, <given-names>O.</given-names></string-name>, <string-name><surname>Akay</surname>, <given-names>B.</given-names></string-name> (<year>2016</year>). <article-title>Comparisons of metaheuristic algorithms and fitness functions on software test data generation</article-title>. <source>Applied Soft Computing</source>, <volume>49</volume>, <fpage>1202</fpage>–<lpage>1214</lpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1016/j.asoc.2016.09.045" xlink:type="simple">https://doi.org/10.1016/j.asoc.2016.09.045</ext-link>. <uri>https://www.sciencedirect.com/science/article/pii/S156849461630504X</uri>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_059">
<mixed-citation publication-type="journal"><string-name><surname>Shami</surname>, <given-names>T.M.</given-names></string-name>, <string-name><surname>El-Saleh</surname>, <given-names>A.A.</given-names></string-name>, <string-name><surname>Alswaitti</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Al-Tashi</surname>, <given-names>Q.</given-names></string-name>, <string-name><surname>Summakieh</surname>, <given-names>M.A.</given-names></string-name>, <string-name><surname>Mirjalili</surname>, <given-names>S.</given-names></string-name> (<year>2022</year>). <article-title>Particle swarm optimization: a comprehensive survey</article-title>. <source>IEEE Access</source>, <volume>10</volume>, <fpage>10031</fpage>–<lpage>10061</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_060">
<mixed-citation publication-type="chapter"><string-name><surname>Shi</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Eberhart</surname>, <given-names>R.</given-names></string-name> (<year>1998</year>). <chapter-title>A modified particle swarm optimizer</chapter-title>. In: <source>1998 IEEE International Conference on Evolutionary Computation Proceedings. IEEE World Congress on Computational Intelligence (Cat. No. 98TH8360)</source>. <publisher-name>IEEE</publisher-name>, pp. <fpage>69</fpage>–<lpage>73</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_061">
<mixed-citation publication-type="journal"><string-name><surname>Silva</surname>, <given-names>M.A.L.</given-names></string-name>, <string-name><surname>de Souza</surname>, <given-names>S.R.</given-names></string-name>, <string-name><surname>Souza</surname>, <given-names>M.J.F.</given-names></string-name>, <string-name><surname>de Franca Filho</surname>, <given-names>M.F.</given-names></string-name> (<year>2018</year>). <article-title>Hybrid metaheuristics and multi-agent systems for solving optimization problems: a review of frameworks and a comparative analysis</article-title>. <source>Applied Soft Computing</source>, <volume>71</volume>, <fpage>433</fpage>–<lpage>459</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_062">
<mixed-citation publication-type="journal"><string-name><surname>Storn</surname>, <given-names>R.</given-names></string-name>, <string-name><surname>Price</surname>, <given-names>K.</given-names></string-name> (<year>1997</year>). <article-title>Differential evolution–a simple and efficient heuristic for global optimization over continuous spaces</article-title>. <source>Journal of Global Optimization</source>, <volume>11</volume>, <fpage>341</fpage>–<lpage>359</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_063">
<mixed-citation publication-type="journal"><string-name><surname>Tian</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Cheng</surname>, <given-names>R.</given-names></string-name>, <string-name><surname>Zhang</surname>, <given-names>X.</given-names></string-name>, <string-name><surname>Jin</surname>, <given-names>Y.</given-names></string-name> (<year>2017</year>). <article-title>PlatEMO: a MATLAB platform for evolutionary multi-objective optimization</article-title>. <source>IEEE Computational Intelligence Magazine</source>, <volume>12</volume>(<issue>4</issue>), <fpage>73</fpage>–<lpage>87</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_064">
<mixed-citation publication-type="other"><string-name><surname>Tzanetos</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Dounias</surname>, <given-names>G.</given-names></string-name> (2020). A comprehensive survey on the applications of swarm intelligence and bio-inspired evolutionary strategies. In: <italic>Machine Learning Paradigms: Advances in Deep Learning-Based Technological Applications</italic>, pp. 337–378.</mixed-citation>
</ref>
<ref id="j_infor603_ref_065">
<mixed-citation publication-type="journal"><string-name><surname>Van Thieu</surname>, <given-names>N.</given-names></string-name>, <string-name><surname>Mirjalili</surname>, <given-names>S.</given-names></string-name> (<year>2023</year>). <article-title>MEALPY: an open-source library for latest meta-heuristic algorithms in Python</article-title>. <source>Journal of Systems Architecture</source>, <volume>139</volume>, <elocation-id>102871</elocation-id>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1016/j.sysarc.2023.102871" xlink:type="simple">https://doi.org/10.1016/j.sysarc.2023.102871</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_066">
<mixed-citation publication-type="journal"><string-name><surname>Veček</surname>, <given-names>N.</given-names></string-name>, <string-name><surname>Črepinšek</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Mernik</surname>, <given-names>M.</given-names></string-name> (<year>2017</year>). <article-title>On the influence of the number of algorithms, problems, and independent runs in the comparison of evolutionary algorithms</article-title>. <source>Applied Soft Computing</source>, <volume>54</volume>, <fpage>23</fpage>–<lpage>45</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_067">
<mixed-citation publication-type="journal"><string-name><surname>Veček</surname>, <given-names>N.</given-names></string-name>, <string-name><surname>Mernik</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Črepinšek</surname>, <given-names>M.</given-names></string-name> (<year>2014</year>). <article-title>A chess rating system for evolutionary algorithms: a new method for the comparison and ranking of evolutionary algorithms</article-title>. <source>Information Sciences</source>, <volume>277</volume>, <fpage>656</fpage>–<lpage>679</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_068">
<mixed-citation publication-type="journal"><string-name><surname>Velasco</surname>, <given-names>L.</given-names></string-name>, <string-name><surname>Guerrero</surname>, <given-names>H.</given-names></string-name>, <string-name><surname>Hospitaler</surname>, <given-names>A.</given-names></string-name> (<year>2024</year>). <article-title>A literature review and critical analysis of metaheuristics recently developed</article-title>. <source>Archives of Computational Methods in Engineering</source>, <volume>31</volume>(<issue>1</issue>), <fpage>125</fpage>–<lpage>146</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_069">
<mixed-citation publication-type="chapter"><string-name><surname>Villalobos</surname>, <given-names>I.</given-names></string-name>, <string-name><surname>Ferrer</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Alba</surname>, <given-names>E.</given-names></string-name> (<year>2018</year>). <chapter-title>Measuring the quality of machine learning and optimization frameworks</chapter-title>. In: <source>Advances in Artificial Intelligence: 18th Conference of the Spanish Association for Artificial Intelligence, CAEPIA 2018, Granada, Spain, October 23–26, 2018, Proceedings 18</source>. <publisher-name>Springer</publisher-name>, pp. <fpage>128</fpage>–<lpage>139</lpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_070">
<mixed-citation publication-type="journal"><string-name><surname>Vrbančič</surname>, <given-names>G.</given-names></string-name>, <string-name><surname>Brezočnik</surname>, <given-names>L.</given-names></string-name>, <string-name><surname>Mlakar</surname>, <given-names>U.</given-names></string-name>, <string-name><surname>Fister</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>Fister Jr.</surname>, <given-names>I.</given-names></string-name> (<year>2018</year>). <article-title>NiaPy: Python microframework for building nature-inspired algorithms</article-title>. <source>Journal of Open Source Software</source>, <volume>3</volume>(<issue>23</issue>), <fpage>613</fpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.21105/joss.00613" xlink:type="simple">https://doi.org/10.21105/joss.00613</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_071">
<mixed-citation publication-type="journal"><string-name><surname>Wang</surname>, <given-names>C.-H.</given-names></string-name>, <string-name><surname>Hu</surname>, <given-names>K.</given-names></string-name>, <string-name><surname>Wu</surname>, <given-names>X.</given-names></string-name>, <string-name><surname>Ou</surname>, <given-names>Y.</given-names></string-name> (<year>2025</year>). <article-title>Rethinking metaheuristics: unveiling the Myth of “Novelty” in metaheuristic algorithms</article-title>. <source>Mathematics</source>, <volume>13</volume>(<issue>13</issue>), <elocation-id>2158</elocation-id>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_072">
<mixed-citation publication-type="journal"><string-name><surname>Wang</surname>, <given-names>Z.</given-names></string-name>, <string-name><surname>Qin</surname>, <given-names>C.</given-names></string-name>, <string-name><surname>Wan</surname>, <given-names>B.</given-names></string-name>, <string-name><surname>Song</surname>, <given-names>W.W.</given-names></string-name> (<year>2021</year>). <article-title>A comparative study of common nature-inspired algorithms for continuous function optimization</article-title>. <source>Entropy</source>, <volume>23</volume>(<issue>7</issue>), <fpage>874</fpage>.</mixed-citation>
</ref>
<ref id="j_infor603_ref_073">
<mixed-citation publication-type="chapter"><string-name><surname>Zelinka</surname>, <given-names>I.</given-names></string-name>, <string-name><surname>Chadli</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Davendra</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>Senkerik</surname>, <given-names>R.</given-names></string-name>, <string-name><surname>Pluhacek</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Lampinen</surname>, <given-names>J.</given-names></string-name> (<year>2013</year>). <chapter-title>Do evolutionary algorithms indeed require random numbers? Extended study</chapter-title>. In: <source>Nostradamus 2013: Prediction, Modeling and Analysis of Complex Systems</source>. <publisher-name>Springer</publisher-name>, pp. <fpage>61</fpage>–<lpage>75</lpage>.</mixed-citation>
</ref>
</ref-list>
</back>
</article>
