智能优化算法学习笔记(5)----布谷鸟搜索算法(CS)

一、布谷鸟算法概述

        布谷鸟搜索(Cuckoo Search,CS)算法是Xin-She Yang和Suash Deb二人在Cuckoo Search via Lévy Flights中提出的启发式算法。

        算法灵感来源于布谷鸟种属的专性寄生哺育行为,即某些物种会在其他鸟类巢中产卵,并且它们可能会移除其他鸟的卵以增加自己卵的孵化概率。一共三种基本类型的育雏寄生,1)一些宿主鸟与入侵的布谷鸟直接冲突。宿主鸟会扔掉不是自己的蛋或放弃原有巢穴,建筑新巢穴;2)某些物种模仿宿主物种蛋的颜色,降低蛋被遗弃的可能性,提高繁殖能力;3)某些物种通常选择宿主鸟刚刚产卵的巢穴,布谷鸟的蛋比宿主的蛋孵化的要早,一旦第一只布谷鸟雏鸟孵化,它将本能的盲目推出宿主鸟的蛋,增加宿主对其提供食物的份额,布谷鸟可以模仿宿主雏鸟的叫声,以获得更多进食机会。

二、莱维飞行(Lévy fligt)

        莱维飞行是一种随机行走过程,其中步长的长度和方向是通过莱维分布确定的。莱维分布是一种具有长尾分布特征的概率分布。在布谷鸟算法中,莱维飞行策略用于更新布谷鸟个体的位置,以搜索更好的解。

        莱维飞行的步长是一种服从重尾分布的随机游走,在多次游走后,从原始点开始的飞行步长通常会趋于稳定。Lévy分布由数学家保尔莱维命名,是一种连续概率分布。Lévy分布为其自身特征函数的Fourier变换:

        (1)

        其中(2)

         (3)为莱维分布的概率密度函数

 其中,

 (1)和(3)中,有莱维分布的参数:\alpha为特征指数,\chi为位移,\sigma为尺度,\beta为方向参数。

        莱维飞行是具有极大跳跃性的游走过程,属于二阶矩发散,式(4)其跳跃分布的概率密度函数:

 ​​​

三、算法思想

三个理想化规则:

1)每只布谷鸟一次产一个蛋,并将蛋放入 随机选择的巢穴中;(最终只有一个最优解)

2)蛋质量高的最好的巢会传给下一代;(最优解)

3)可用宿主巢穴固定,布谷鸟蛋被宿主鸟发现的概率为pa\in [0,1],在这种情况下,宿主

鸟可以把蛋扔掉,也可以放弃巢穴,建立一个新的巢穴。(随着新的随机解,在pa概率影响

下n个巢穴被代替成新的巢穴)

对于最大化问题,解的质量或适应度可以简单地与目标函数的值成比例。简单表示:巢穴中

的每一个蛋代表一个解,而布谷鸟蛋代表一个一个新的解,目的是使用新的和潜在的更好的

解(布谷鸟蛋)来替换巢中的不太好的解。(扩展:每个巢穴中一组解的多个蛋)目前,一

个巢穴只有一个蛋。

根据上述三个规则,布谷鸟搜索的基本步骤可以概括为下图的伪代码:

公式(1)莱维飞行更新鸟巢位置的公式X_{t+1}=X_t+\alpha\bigotimes Levy(\beta)\alpha是步长缩放因子,Levy(\beta)是莱维随机路径,\bigotimes是*运算。

公式(2)X_{t+1}=X_t+r \bigotimes Heaviside(Pa-\epsilon)\bigotimes(X_i-X_j),这个鸟巢更新位置方式采用偏好随机移动的方式,即利用其他鸟窝的相似性。其中\gamma ,\varepsilon是服从均匀分布的随机数,Heaviside(x)是跳跃函数(当当输入x小于0时,Heaviside函数的值为0;当输入x大于等于0时,Heaviside函数的值为1),X_i,X_j是其他任意的连续鸟窝。

 在布谷鸟算法中,我们可以用下面的具体计算公式来计算鸟窝的更新位置:

其中\sigma =\{ \frac{\Gamma(1+\beta)sin(\frac{\pi \beta}{2})}{\beta \Gamma(\frac{1+\beta}{2})2^{\frac{\beta-1}{2}}} \}^{\frac{1}{\beta}},通常\beta=1.5。

四、代码示例

import random
import numpy as np

# 定义目标函数(这里以求解最小化问题为例)
def objective_function(x):
    return x**2

# 生成莱维分布随机数
def levy_flight(beta):
    sigma = (np.math.gamma(1 + beta) * np.sin(np.pi * beta / 2) / (np.math.gamma((1 + beta) / 2) * beta * 2 ** ((beta - 1) / 2))) ** (1 / beta)
    u = np.random.normal(0, sigma)
    v = np.random.normal(0, 1)
    step = u / abs(v) ** (1 / beta)
    return step

# 布谷鸟搜索算法结合莱维飞行
def cuckoo_search_with_levy_flight():
    # 初始化参数
    population_size = 10
    search_space = [-5, 5]  # 搜索空间范围
    max_iterations = 100  # 最大迭代次数
    pa = 0.25  # 随机生成解的概率
    alpha = 0.6  # 步长缩放因子
    beta = 1.5  # 莱维飞行参数
    
    # 随机生成初始解
    population = [random.uniform(search_space[0], search_space[1]) for _ in range(population_size)]
    
    # 迭代搜索
    for _ in range(max_iterations):
        # 对每个个体进行莱维飞行和步长更新
        for i in range(population_size):
            step_size = alpha * levy_flight(beta)
            new_solution = population[i] + step_size * random.uniform(-1, 1)
            new_solution = max(search_space[0], min(new_solution, search_space[1]))  # 限制解在搜索空间内
            
            # 更新个体
            if objective_function(new_solution) < objective_function(population[i]):
                population[i] = new_solution
        
        # 对个体进行排序,选取优秀的个体进行保留
        population.sort(key=lambda x: objective_function(x))
        num_new = int(pa * population_size)
        
        # 生成新的解并替换掉最差的个体
        for i in range(population_size - num_new, population_size):
            population[i] = random.uniform(search_space[0], search_space[1])
    
    # 返回最优解
    best_solution = min(population, key=lambda x: objective_function(x))
    return best_solution

# 测试
best_solution = cuckoo_search_with_levy_flight()
print("最优解:", best_solution)
print("目标函数值:", objective_function(best_solution))

        在这个示例代码中,使用莱维分布随机数来生成步长,并且一部分鸟巢会被抛弃并重新生成新的解。这样可以增加搜索的多样性,有助于避免陷入局部最优解。你可以根据需要调整参数和添加其他改进策略来进一步优化算法。

五、应用范围

布谷鸟搜索算法在以下领域有广泛的应用范围:

  1. 函数优化:布谷鸟搜索算法可用于求解数学函数的最优化问题,包括单目标优化和多目标优化。通过模拟布谷鸟的寄生行为和觅食策略,算法可以在搜索空间中找到全局或局部最优解。

  2. 机器学习:布谷鸟搜索算法可以应用于机器学习中的模型参数优化问题。通过调整模型的参数值,布谷鸟搜索算法可以搜索最佳参数组合,提高机器学习模型的性能和准确性。

  3. 物流优化:布谷鸟搜索算法可以应用于物流优化问题,例如货物配送路径规划、仓库位置选择等。通过优化路径和资源分配,算法可以提高物流效率、降低成本,并优化物流网络的整体性能。

  4. 网络优化:布谷鸟搜索算法可以用于网络优化问题,例如网络拓扑设计、路由优化、传感器网络部署等。通过优化网络结构和配置参数,算法可以提高网络的带宽利用率、降低延迟,并增强网络的鲁棒性和性能。

  5. 物联网:布谷鸟搜索算法可以应用于物联网中的资源调度和能耗优化问题。通过优化传感器和设备的部署和能源消耗,算法可以提高物联网系统的能效和资源利用率。

参考资料:

【1】Yang X S, Deb S. Cuckoo search via Lévy flights[C]//2009 World congress on nature & biologically inspired computing (NaBIC). Ieee, 2009: 210-214.

【2】通俗易懂的布谷鸟算法与莱维飞行,(附求解函数最小值matlab源码)_莱维飞行公式_孤旅青山迷情人的博客-CSDN博客1 从布谷鸟的育雏到布谷鸟算法2 布谷鸟算法3 萊维飞行与公式(1)的深层含义4 附:CS算法求解函数最小值代码5 源码下载6 参考文献1 从布谷鸟的育雏到布谷鸟算法 布谷鸟不会做窝,也不会育雏,在春末夏初,向北飞,趁别的鸟(宿主鸟)外出觅食时,将卵蛋产在宿主鸟窝里,让宿主鸟抚养自己孩子 。当然,布谷鸟在产卵前,为了不被宿主鸟发现鸟窝的异常,会把宿主的卵移走..._莱维飞行公式https://blog.csdn.net/zyqblog/article/details/80905019?ops_request_misc=&request_id=299d1c90263d491cbd6b89d09cfb1b8c&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~koosearch~default-1-80905019-null-null.268^v1^control&utm_term=%E8%8E%B1%E7%BB%B4%E9%A3%9E%E8%A1%8C%E7%AD%96%E7%95%A5&spm=1018.2226.3001.4450

【3】 

​​​​【优化求解】基于布谷鸟算法结合灰狼算法求解最优目标matlab代码_Matlab科研工作室的博客-CSDN博客​​​​​​​​​​​​​​​​​​​​1 简介布谷鸟搜索(Cuckoo Search, CS)算法是 2009 年 Xin-She Yang 与 Susash Deb 提出的一种新型的启发算法[61]。算法灵感来源于一些布谷鸟种属(Cuckoo Species)的专性寄生哺育(BroodParasitism)行为,即这些种群不会像绝大多数鸟类一样自己筑巢哺育后代,而是通常把蛋产于宿主鸟巢内,由宿主代养,这种行为被称为巢寄生。此类布谷鸟会观察宿主鸟所产的卵并对其进行模仿,按照宿主鸟卵的颜色形状来产卵,导致宿主鸟辨别出布谷鸟卵的几率微乎..https://matlabzhushou.blog.csdn.net/article/details/122391947?spm=1001.2101.3001.6650.10&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-10-122391947-blog-129530284.235%5Ev38%5Epc_relevant_anti_t3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-10-122391947-blog-129530284.235%5Ev38%5Epc_relevant_anti_t3&utm_relevant_index=11

以上编写供本人学习使用,侵权私删。 

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值