在网上搜索没有发现比较完整用Python写的CS算法,只能自己动手编写一个。
CS算法注意事项:
1.执行流程是,初始化 -> levy飞行变换巢穴位置 -> 与之前的巢穴对比保留好的巢穴 -> 按照发现概率值丢弃部分巢穴重新生成 ->
-> 再与之前的巢穴对比保留好的巢穴 ->判断循环是否结束 -> ............
2.levy飞行步长的计算通常是使用Mantegna方法模拟二维平面萊维飞行
3.迭代公式中大量涉及随机数,需要注意的是一部分是服从均匀分布,还有部分是服从正态分布
4.编写可以参照yang的matlab代码源代码(参考的链接中包含源代码)
Python代码如下:
公式就不写了,可以参考链接。
from random import uniform
from random import randint
import math
import numpy as np
import matplotlib.pyplot as plt
'''
根据levy飞行计算新的巢穴位置
'''
def GetNewNestViaLevy(Xt,Xbest,Lb,Ub,lamuda):
beta = 1.5
sigma_u = (math.gamma(1 + beta) * math.sin(math.pi * beta / 2) / (
math.gamma((1 + beta) / 2) * beta * (2 ** ((beta - 1) / 2)))) ** (1 / beta)
sigma_v = 1
for i in range(Xt.shape[0]):
s = Xt[i,:]
u = np.random.normal(0, sigma_u, 1)
v = np.random.normal(0, sigma_v, 1)
Ls = u / (