群体优化算法----萤火虫优化算法应用于函数优化

介绍

模拟萤火虫的闪光机制,个体根据亮度(目标函数值)吸引其他个体移动,最终收敛到最优解,广泛应用于函数优化、图像处理等领域

本分示例问题

优化目标函数:Rastrigin函数在这里插入图片描述
此函数具有多个局部极小值,但只有一个全局最小值在 (𝑥,𝑦)=(0,0)(x,y)=(0,0)。

步骤

初始化种群
计算每个萤火虫的亮度(适应度)
更新位置
重复以上步骤直到满足停止条件

代码

function firefly_algorithm
    % 参数设置
    n = 50; % 萤火虫数量
    maxGen = 200; % 最大迭代次数
    alpha = 0.5; % 随机移动参数
    beta0 = 1; % 吸引度参数
    gamma = 1; % 吸引度衰减参数
    dim = 2; % 维度
    lb = -5; % 下界
    ub = 5; % 上界

    % 初始化萤火虫位置
    fireflies = lb + (ub - lb) * rand(n, dim);
    bestFirefly = fireflies(1, :);
    bestFitness = rastrigin(bestFirefly);

    % 记录适应度变化
    fitnessHistory = zeros(maxGen, 1);

    % 主循环
    for gen = 1:maxGen
        % 计算亮度(适应度)
        fitness = arrayfun(@(i) rastrigin(fireflies(i, :)), 1:n);
        
        % 找到当前最优萤火虫
        [currentBestFitness, bestIdx] = min(fitness);
        if currentBestFitness < bestFitness
            bestFitness = currentBestFitness;
            bestFirefly = fireflies(bestIdx, :);
        end
        
        % 更新位置
        for i = 1:n
            for j = 1:n
                if fitness(j) < fitness(i)
                    r = norm(fireflies(i, :) - fireflies(j, :));
                    beta = beta0 * exp(-gamma * r^2);
                    fireflies(i, :) = fireflies(i, :) + ...
                                      beta * (fireflies(j, :) - fireflies(i, :)) + ...
                                      alpha * (rand(1, dim) - 0.5);
                    
                    % 保持在边界内
                    fireflies(i, :) = max(fireflies(i, :), lb);
                    fireflies(i, :) = min(fireflies(i, :), ub);
                end
            end
        end
        
        % 记录当前最优适应度
        fitnessHistory(gen) = bestFitness;
        disp(['Generation ', num2str(gen), ': Best Fitness = ', num2str(bestFitness)]);
    end

    % 显示结果
    figure;
    plot(fitnessHistory, 'LineWidth', 2);
    title('Fitness Evolution');
    xlabel('Generation');
    ylabel('Best Fitness');

    disp(['Optimal solution: x = ', num2str(bestFirefly(1)), ', y = ', num2str(bestFirefly(2))]);
end

function z = rastrigin(x)
    % Rastrigin函数
    z = 20 + sum(x.^2 - 10 * cos(2 * pi * x));
end

效果

在这里插入图片描述

说明

参数设置:定义萤火虫数量、最大迭代次数、随机移动参数、吸引度参数、维度和边界。
初始化萤火虫位置:在给定边界内随机生成初始种群
计算亮度(适应度):使用Rastrigin函数计算每个萤火虫的适应度
更新位置:根据亮度和吸引度更新每个萤火虫的位置
记录适应度变化:保存每代的最优适应度并显示优化过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值