step 1(安装测试集函数)

下载cec2017函数集https://github.com/tilleyd/cec2017-py
如果你是下载了压缩包,则执行2、3步即可(确保你的代码和你的测试函数在同一个文件夹下)

  1. git clone https://github.com/tilleyd/cec2017-py
  2. cd cec2017-py
  3. python3 setup.py install

这些指令要在cmd或者pycharm的终端中执行
代码文件结构,如下图所示
在这里插入图片描述

step 2 (使用测试集函数)
from cec2017.functions import f5
samples = 3
dimension = 50
x = np.random.uniform(-100, 100, size=(samples, dimension))
val = f5(x)
for i in range(samples):
    print(f"f5(x_{i}) = {val[i]:.6f}")

# Using all functions:
from cec2017.functions import all_functions
for f in all_functions:
    x = np.random.uniform(-100, 100, size=(samples, dimension))
    val = f(x)
    for i in range(samples):
        print(f"{f.__name__}(x_{i}) = {val[i]:.6f}")

注意,该函数库发生了更新
如果使用如下代码会报错

from cec2017_py.cec2017.functions import f1
pos = np.random.uniform(-1, 1, (10))
f1(pos)

在这里插入图片描述
原因是作者更新了,函数的计算方式
使用如下代码即可:
在这里插入图片描述

其他函数

可以在该测试集的文件夹下新建feature.py 用于在运行时,获得当前运行的函数的全称

from cec2017.functions import all_functions

class Feature:
    def __init__(self):
        self.all_function = all_functions.copy()
        self.descriptions = {}

    def getAllFuncName(self):
        for func in self.all_function:
            func_name = func.__name__
            doc = func.__doc__

            if doc:
                doc_lines = [line.strip() for line in doc.strip().split('\n') if line.strip()]
                describe = doc_lines[0]
            else:
                describe = "None"

            self.descriptions[func_name] = describe # {'func_name': 'f1', 'describe': 'Shifted and Rotated Bent Cigar Function'}

如:

from feature import Feature
from cec2017.functions import f1
fea = Feature()
fea.getAllFuncName()
print(f"f1's name is {fea.descriptions[f1.__name__]}")

在这里插入图片描述

更多推荐