Python中如何实现基准函数及调用?一文带你看懂
导读:这篇文章给大家分享的是关于基准函数的内容,基准函数是测试演化计算算法性能的函数集,大部分基准函数集都是C/C++编写,Python编写的基准函数比较少,对此本文就给大家分享一些常遇到基准函数的Python实现及调用等等,感兴趣的朋友接下来一...
这篇文章给大家分享的是关于基准函数的内容,基准函数是测试演化计算算法性能的函数集,大部分基准函数集都是C/C++编写,Python编写的基准函数比较少,对此本文就给大家分享一些常遇到基准函数的Python实现及调用等等,感兴趣的朋友接下来一起跟随小编看看吧。
基准函数定义
代码实现
benchmark.py
import numpy as np
import copy
"""
Author : Robin_Hua
update time : 2021.10.14
version : 1.0
"""
class Sphere:
def __init__(self, x):
self.x = x
def getvalue(self):
res = np.sum(self.x**2)
return res
class Schwefel2_22:
def __init__(self, x):
self.x = x
def getvalue(self):
res = np.sum(np.abs(self.x)) + np.prod(np.abs(self.x))
return res
class Noise:
def __init__(self,x):
self.x = x
def getvalue(self):
d = self.x.shape[0]
res = np.sum(np.arange(1, d + 1) * self.x ** 4) + np.random.random()
return res
class Schwefel2_21:
def __init__(self,x):
self.x = x
def getvalue(self):
res = np.max(np.abs(self.x))
return res
class Step:
def __init__(self,x):
self.x = x
def getvalue(self):
res = np.sum(int(self.x + 0.5) ** 2)
return res
class Rosenbrock:
def __init__(self,x):
self.x = x
def getvalue(self):
d = self.x.shape[0]
res = np.sum(np.abs(100*(self.x[1:] - self.x[:-1]**2)**2 + (1 - self.x[:-1])**2))
return res
class Schwefel:
def __init__(self,x):
self.x = x
def getvalue(self):
d = self.x.shape[0]
res = 418.9829*d - np.sum(self.x * np.sin(np.sqrt(np.abs(self.x))))
return res
class Rastrigin:
def __init__(self,x):
self.x = x
def getvalue(self):
d = self.x.shape[0]
res = 10 * d + np.sum(self.x ** 2 - 10 * np.cos(2 * np.pi * self.x))
return res
class Ackley:
def __init__(self,x):
self.x = x
def getvalue(self):
d = self.x.shape[0]
res = - 20 * np.exp(-0.2 * np.sqrt(np.mean(self.x ** 2)))
res = res - np.exp(np.mean(np.cos(2 * np.pi * self.x))) + 20 + np.exp(1)
return res
class Griewank:
def __init__(self,x):
self.x = x
def getvalue(self):
d = self.x.shape[0]
i = np.arange(1, d + 1)
res = 1 + np.sum(self.x ** 2) / 4000 - np.prod(np.cos(self.x / np.sqrt(i)))
return res
class Generalized_Penalized:
def __init__(self,x):
self.x = x
def u(self,a,k,m):
temp = copy.deepcopy(self.x)
temp[-a = temp.any() = a] = 0
temp[temp >
a] = k*(temp[temp >
a]-a)**m
temp[temp -a] = k * (-temp[temp -a] - a) ** m
"""
temp = np.zeros_like(self.x)
d = self.x.shape[0]
for i in range(d):
if self.x[i]>
a:
temp[i] = k*(self.x[i]-a)**m
elif self.x[i]-a:
temp[i] = k * (-self.x[i] - a) ** m
else:
pass
"""
return temp
def getvalue(self):
d = self.x.shape[0]
y = 1+1/4*(self.x+1)
res = np.pi/d*(10*np.sin(np.pi*y[0])**2+np.sum((y[:-1]-1)**2*(1+10*np.sin(np.pi*y[1:])**2))+(y[-1]-1)**2)+np.sum(self.u(10,100,4))
return res
def benchmark_func(x,func_num):
func = func_list[func_num]
res = func(x)
return res
func_list = [Sphere,Schwefel2_22,Noise,Schwefel2_21,Step,Rosenbrock,Schwefel,Rastrigin,Ackley,Griewank,Generalized_Penalized]
调用方法
输入为向量x和函数编号func_num
import benchmark import numpy as np vector = np.random.random(30) value = benchmark.benchmark_func(x=vector,func_num=0).getvalue()
总结
关于常见的Python实现基准函数的内容就分享到这,上述示例具有一定的借鉴价值,有需要的朋友可以参考学习,希望对大家学习Python有帮助,想要了解更多可以继续浏览网络其他相关的文章。
文本转载自脚本之家
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Python中如何实现基准函数及调用?一文带你看懂
本文地址: https://pptw.com/jishu/651334.html
