Python演化計算基準函式詳解

2022-09-24 18:18:08 字數 3338 閱讀 9877

目錄

基準函式是測試演化計算演算法效能的函式集,由於大部分基準函式集都是c/c++編寫,python編寫的基準函式比較少,因此本文實現了13個常用基準函式的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 __iwww.cppcns.comnit__(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]程式設計客棧0,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 = bewww.cppcns.comnchmark.benchmark_func(x=vector,func_num=0).getvalue()

本文標題: python演化計算基準函式詳解

本文位址: /jiaoben/python/432244.html

python中isinstance 函式詳解

isinstance 函式來判斷乙個物件是否是乙個已知的型別,比如 isinstance 2 int 因為2是int整型,函式將會返回true.instance 函式的語法形式為 isinstance object classinfo 兩個引數表示的意思為 object 例項物件,就相當於剛才例子中...

演化計算解決多峰函式多個最優解問題

問題描述 其中,10 xi 10,i 1,2,3.n,當n 1,2,3和4 時分別有3 18 81和 324個不同的全域性最優解。設計演算法 可以是任何演算法 並編寫程式,可做n 1 2 3 4 或部分或所有情況,得到全域性最優解越多越好,用十進位制編碼,解的精確度至少到小數點後8位。這是shube...

python 計算檔案函式

在讀取檔案時候,我們可能會需要知道檔案有多少行,下面介紹幾種方法 1 最簡單,我們設定乙個計數器,每讀一行計數器加1,到最後能得到結果。這種方法對檔案比較小的來說可以實現,當檔案比較大時就比較耗時了 2 用linux自帶的命令wc l filename import subprocess total...