OPFUNU (OPtimization benchmark FUnctions in NUmpy) is the largest python library for cutting-edge numerical
optimization benchmark functions. Contains all CEC competition functions from 2005, 2008, 2010, 2013, 2014, 2015,
2017, 2019, 2020, 2021, 2022. Besides, more than 300 traditional functions with different dimensions are implemented.
- Free software: GNU General Public License (GPL) V3 license
- Total problems: > 500 problems
- Documentation: https://opfunu.readthedocs.io
- Python versions: >= 3.7.x
- Dependencies: numpy, matplotlib
Citation Request
Please include these citations if you plan to use this library:
@article{Van_Thieu_2024_Opfunu,
author = {Van Thieu, Nguyen},
title = {Opfunu: An Open-source Python Library for Optimization Benchmark Functions},
doi = {10.5334/jors.508},
journal = {Journal of Open Research Software},
month = {May},
year = {2024}
}
-
APA:
Van Thieu, N. (2024). Opfunu: An Open-source Python Library for Optimization Benchmark Functions. Journal of Open Research Software, 12(1), 8. https://doi.org/10.5334/jors.508
Installation and Usage
Install with pip
Install the current PyPI release:
$ pip install opfunu
After installation, you can import and check version of Opfunu:
$ python
>>> import opfunu
>>> opfunu.__version__
>>> dir(opfunu)
>>> help(opfunu)
>>> opfunu.FUNC_DATABASE
>>> opfunu.CEC_DATABASE
>>> opfunu.ALL_DATABASE
>>> opfunu.get_functions_by_classname("MiShra04")
>>> opfunu.get_functions_based_classname("2015")
>>> opfunu.get_functions_by_ndim(2)
>>> opfunu.get_functions_based_ndim(50)
>>> opfunu.get_name_based_functions(ndim=10, continuous=True)
>>> opfunu.get_cec_based_functions(ndim=2)
Let's go through some examples.
Examples
How to get the function and use it
1st way
from opfunu.cec_based.cec2014 import F12014
func = F12014(ndim=30)
func.evaluate(func.create_solution())
from opfunu.cec_based import F102014
func = F102014(ndim=50)
func.evaluate(func.create_solution())
2nd way
import opfunu
funcs = opfunu.get_functions_by_classname("F12014")
func = funcs[0](ndim=10)
func.evaluate(func.create_solution())
all_funcs_2014 = opfunu.get_functions_based_classname("2014")
print(all_funcs_2014)
How to draw 2D, 3D
Two ways if you want to draw functions that available in Opfunu.
from opfunu.cec_based import F12010
f0 = F12010()
f0.plot_2d(selected_dims=(2, 3), n_points=300, ct_cmap="viridis", ct_levels=30, ct_alpha=0.7,
fixed_strategy="mean", fixed_values=None, title="Contour map of the F1 CEC 2010 function",
x_label=None, y_label=None, figsize=(10, 8), filename="2d-f12010", exts=(".png", ".pdf"), verbose=True)
f0.plot_3d(selected_dims=(1, 6), n_points=500, ct_cmap="viridis", ct_levels=30, ct_alpha=0.7,
fixed_strategy="mean", fixed_values=None, title="3D visualization of the F1 CEC 2010 function",
x_label=None, y_label=None, figsize=(10, 8), filename="3d-f12010", exts=(".png", ".pdf"), verbose=True)
from opfunu import draw_2d, draw_3d
draw_2d(f0.evaluate, f0.lb, f0.ub, selected_dims=(2, 3), n_points=300)
draw_3d(f0.evaluate, f0.lb, f0.ub, selected_dims=(2, 3), n_points=300)
F1-2010 CEC 2D
|
F1-2010 CEC 3D
|
How to draw Latex
Two ways if you want to draw latex equation.
from opfunu.cec_based import F12010
from opfunu.name_based import Ackley02
from opfunu.utils.visualize import draw_latex
f0 = F12010()
f1 = Ackley02()
f0.plot_latex(f0.latex_formula, figsize=(8, 3), dpi=500, title="Latex equation", exts=(".png", ".pdf"), verbose=True)
f1.plot_latex(f1.latex_formula_global_optimum, figsize=(8, 3), dpi=500, title="Global optimum", verbose=True)
draw_latex(f0.latex_formula_bounds, title="Boundary for Function")
draw_latex(f1.latex_formula_dimension, title=None)
For more usage examples please look at examples folder.
Contributing
There are lots of ways how you can contribute to Permetrics's development, and you are welcome to join in! For example,
you can report problems or make feature requests on the issues pages. To facilitate contributions,
please check for the guidelines in the CONTRIBUTING.md file.
Official channels
Developed by: Thieu @ 2023