Python使用CEC2017函数测试集
·
step 1(安装测试集函数)
下载cec2017函数集https://github.com/tilleyd/cec2017-py
如果你是下载了压缩包,则执行2、3步即可(确保你的代码和你的测试函数在同一个文件夹下)
git clone https://github.com/tilleyd/cec2017-pycd cec2017-pypython3 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__]}")

更多推荐
所有评论(0)