FA 螢火蟲演算法的測試及Python實現

2021-10-01 14:33:30 字數 2134 閱讀 2625

一、python中傳遞函式

def test(a,b):

print(a,b)

class test:

def __init__(self, fitnessfunction):

self.fitnessfunction = fitnessfunction

def initial(self):

self.fitnessfunction(1,2)

if __name__ == '__main__':

fa = test(test)

fa.initial()

二、常用優化演算法測試函式及實現

這裡學到的兩個小技巧是:

(1)np.linalg.norm()來求一正規化和二正規化

(2)累加、累成的便捷寫法:reduce(lambda x,y: x+y, x_),當x_為[x1, x2, x3, x4]時,reduce這個函式相當於執行f(f(f(x1,x2),x3),x4),其中f(a, b)是由lambda建立的。

參考資料:

def f1(x_): #sphere

return np.linalg.norm(x_) ** 2

def f2(x_): #schwefel 2.22

xa = reduce(lambda x,y: x*y, abs(x_))

xb = np.linalg.norm(x_, ord=1)

return xa + xb

def f3(x_): #rosenbrock

xa = 100 * (x_[1:] - x_[:-1] * x_[:-1])

xb = (x_[:-1] - 1) * (x_[:-1] - 1)

return reduce(lambda x,y: x+y, xa+xb)

def f4(x_): #step

return np.linalg.norm(np.floor(x_ + 0.5))

def f5(x_): #schwefel 2.26

x_new = x_ * np.sin(np.sqrt(abs(x_)))

return reduce(lambda x,y: x+y, x_new)

def f6(x_): #rastrigin

x_new = (x_ * x_) - (10 * np.cos(2 * np.pi * x_)) + 10

return reduce(lambda x,y: x+y, x_new)

def f7(x_): #ackley

d = len(x_)

x_a = 20 * np.exp(-0.2 * np.sqrt(np.linalg.norm(x_)) / np.sqrt(d))

x_b = np.exp(reduce(lambda x,y: x+y, np.cos(2 * np.pi * x_)) / d)

return (20 - x_a) + (np.e - x_b)

def f8(x_): #girewank

x_a = (np.linalg.norm(x_) ** 2)/4000

x_b = reduce(lambda x,y: x*y,

np.cos(x_ / np.array(range(1,len(x_)+1))))

return x_a - x_b + 1

這8個函式是目前主流的優化演算法測試函式。

三、前人提出的螢火蟲改進演算法

目前知網最新的對螢火蟲演算法從拓撲結構上改進的文章是《基於拓撲改進與交叉策略的螢火蟲演算法》,它提出了以馮諾依曼拓撲結構來組織螢火蟲,並以此確定更新路徑時的物件,但是我覺得描述得比較模糊,沒辦法**實現,所以這裡不考慮。

[1]  wang h,wang w,sun h,et al.firefly algorithm with random attraction[j].international journal of bio-inspired computation,2016, 8 (1):33-41. 

[2] wang h,wang w,zhou x,et al.firefly algorithm with neighborhood attraction[j].information sciences,2017, 382/383:374-387. 

螢火蟲之墓

哎,二戰的電影本來我不想看的,以前看過乙個開頭,就看不下去了。今天強忍著看完了,一開始就知道是悲劇,卻要看著它發生,真是一件殘忍的事情。反正這是我一直以來的乙個想法,那些執政者,當權者為了一己私慾,卻左右了千千萬萬平民百姓的幸福,真是 不應該。但是,他們從何處來,究其源頭,還是這個社會,這個土壤。社...

螢火蟲效果

螢火蟲 public.js function id id 求隨機數 function rand min,max 隨機的16進製制顏色 function getcolor return color function zero val 時間差 function diff start,end sport5...

python螢火蟲演算法 粒子群演算法

演算法背景 粒子群演算法 particle swarm optimization,pso 是計算智慧型領域中的一種生物啟發式方法,屬於群體智慧型優化演算法的一種,常見的群體智慧型優化演算法主要有如下幾類 1 蟻群演算法 ant colony optimization,簡稱aco 1992年提出 2 ...