一、遗传算法简介

1 引言


2 遗传算法理论
2.1 遗传算法的生物学基础


2.2 遗传算法的理论基础




2.3 遗传算法的基本概念






2.4 标准的遗传算法


2.5 遗传算法的特点


2.6 遗传算法的改进方向

3 遗传算法流程



4 关键参数说明

二、萤火虫优化算法(FA)简介

1 介绍
萤火虫(firefly)种类繁多,主要分布在热带地区。大多数萤火虫在短时间内产生有节奏的闪光。这种闪光是由于生物发光的一种化学反应,萤火虫的闪光模式因种类而异。萤火虫算法(FA)是基于萤火虫的闪光行为,它是一种用于全局优化问题的智能随机算法,由Yang Xin-She(2009)[1]提出。萤火虫通过下腹的一种化学反应-生物发(bioluminescence)发光。这种生物发光是萤火虫求偶仪式的重要组成部分,也是雄性萤火虫和雌性萤火虫交流的主要媒介,发出光也可用来引诱配偶或猎物,同时这种闪光也有助于保护萤火虫的领地,并警告捕食者远离栖息地。在FA中,认为所有的萤火虫都是雌雄同体的,无论性别如何,它们都互相吸引。该算法的建立基于两个关键的概念:发出的光的强度和两个萤火虫之间产生的吸引力的程度。

2 天然萤火虫的行为
天然萤火虫在寻找猎物、吸引配偶和保护领地时表现出惊人的闪光行为,萤火虫大多生活在热带环境中。一般来说,它们产生冷光,如绿色、黄色或淡红色。萤火虫的吸引力取决于它的光照强度,对于任何一对萤火虫来说,较亮的萤火虫会吸引另一只萤火虫。所以,亮度较低的个体移向较亮的个体,同时光的亮度随着距离的增加而降低。萤火虫的闪光模式可能因物种而异,在一些萤火虫物种中,雌性会利用这种现象猎食其他物种;有些萤火虫在一大群萤火虫中表现出同步闪光的行为来吸引猎物,雌萤火虫从静止的位置观察雄萤火虫发出的闪光,在发现一个感兴趣趣的闪光后,雌性萤火虫会做出反应,发出闪光,求偶仪式就这样开始了。一些雌性萤火虫会产生其他种类萤火虫的闪光模式,来诱捕雄性萤火虫并吃掉它们。

3 萤火虫算法
萤火虫算法模拟了萤火虫的自然现象。真实的萤火虫自然地呈现出一种离散的闪烁模式,而萤火虫算法假设它们总是在发光。为了模拟萤火虫的这种闪烁行为,Yang Xin-She提出了了三条规则(Yang,2009):
(1)假设所有萤火虫都是雌雄同体的,因此一只萤火虫可能会被其他任何萤火虫吸引。
(2)萤火虫的亮度决定其吸引力的大小,较亮的萤火虫吸引较暗的萤火虫。如果没有萤火虫比被考虑的萤火虫更亮,它就会随机移动。
(3)函数的最优值与萤火虫的亮度成正比。
光强(I)与光源距离(r)服从平方反比定律,因此由于空气的吸收,光的强度(I)随着与光源距离的增加而减小,这种现象将萤火虫的可见性限定在了非常有限的半径内:

萤火虫算法的主要实现步骤如下:

其中I0为距离r=0时的光强(最亮),即自身亮度,与目标函数值有关,目标值越优,亮度越亮;γ为吸收系数,因为荧光会随着距离的增加和传播媒介的吸收逐渐减弱,所以设置光强吸收系数以体现此特性,可设置为常数;r表示两个萤火虫之间的距离。有时也使用单调递减函数,如下式所示。

第二步为种群初始化:

其中t表示代数,xt表示个体的当前位置,β0exp(-γr2)是吸引度,αε是随机项。下一步将会计算萤火虫之间的吸引度:

其中β0表示r=0时的最大吸引度。
下一步,低亮度萤火虫向较亮萤火虫运动:

最后一个阶段,更新光照强度,并对所有萤火虫进行排序,以确定当前的最佳解决方案。萤火虫算法的主要步骤如下所示。

Begin初始化算法基本参数:设置萤火虫数目n,最大吸引度β0,光强吸收系数γ,步长因子α,最大迭代次数MaxGeneration或搜索精度ε;初始化:随机初始化萤火虫的位置,计算萤火虫的目标函数值作为各自最大荧光亮度I0;t=1while(t<=MaxGeneration || 精度>ε)计算群体中萤火虫的相对亮度I(式2)和吸引度β(式5),根据相对亮度决定萤火虫的移动方向;更新萤火虫的空间位置,对处在最佳位置的萤火虫进行随机移动(式6);根据更新后萤火虫的位置,重新计算萤火虫的亮度I0;t=t+1end while输出全局极值点和最优个体值。
end

萤火虫算法与粒子群算法(PSO)和细菌觅食算法(BFA)有相似之处。在位置更新方程中,FA和PSO都有两个主要分量:一个是确定性的,另一个是随机性的。在FA中,吸引力由两个组成部分决定:目标函数和距离,而在BFA中,细菌之间的吸引力也有两个组成部分:适应度和距离。萤火虫算法实现时,整个种群(如n)需要两个内循环,特定迭代需要一个外循环(如I),因此最坏情况下FA的计算复杂度为O(n2I)。

三、部分源代码

clc
clear
%% 设定算法参数
para=[20 500 0.5 0.2 1];
%参数向量
%种群规模n=20
%迭代次数MaxGeneration=500
%alpha=0.5 α:为常数
%betamin=0.2 β0:最大吸引力
%gamma=1 γ:光吸收系数popsize=para(1);%n为种群规模
fprintf('种群规模:');
disp(num2str(popsize));MaxGeneration=para(2);%迭代次数MaxGeneration
fprintf('迭代次数:');
disp(num2str(MaxGeneration));alpha=para(3);%α为常数
fprintf('alpha:');
disp(num2str(alpha));betamin=para(4);%不是β0:初始吸引力
fprintf('初始最大吸引力:');
disp(num2str(betamin));gamma=para(5);%γ:光吸收系数
fprintf('光吸收系数:');
disp(num2str(gamma));NumEval=popsize*MaxGeneration;
fprintf('函数运行总次数:');
disp(num2str(NumEval));x_dim=1;%d为每个解的维度
Varmin=-10^5*ones(1,x_dim);%下界
Varmax=10^5*ones(1,x_dim);%上界
Var0=Varmin+(Varmax-Varmin).*rand(1,x_dim);
%  “.*”:矩阵元素对应相乘,不是矩阵相乘%检查上界向量与下界向量长度是否相同
if length(Varmin)~=length(Varmax),disp('上下界不匹配!')return %在函数中遇见return;则直接从此函数中跳出
end
%% 开始
tic;%tic用来保存当前时间
%    toc来记录程序完成时间FA.position=[];%萤火虫全部位置信息
FA.light=[];%萤火虫对应的亮度
FA.cost=[];%目标函数
FA.Rank=[];%非劣解集对应等级
FA.CrowdingDistance=[];%拥挤距离(虚拟适应度)
FA.DominatedCount=[];%支配计数  %临时存在,方便分级
FA.DominationSet=[];%对应解的所支配的解集位置(行号)
pop=repmat(FA,popsize,1);%% 初始化萤火虫位置和亮度
for i=1:popsize%popsize:种群规模if ~isempty(Varmin) %如果存在上下界pop(i).position=Varmin+(Varmax-Varmin).*rand(1,x_dim);elsepop(i).position =Var0+randn(1,x_dim);endpop(i).cost=mycost(pop(i).position);%调用了目标函数:mycost%输入:pop(i).position,萤火虫i全部信息%输出:pop(i).cost,i萤火虫对应的目标函数值 pop(i).light=pop(i).cost;%生成亮度
end%% 初始化非支配排序
[pop,F]=NonDominatedSorting(pop);
%调用了非支配排序子函数:NonDominatedSorting
%输入:pop:本解以及本解对应的全部信息
%输出:pop:分级完成后的本解以及本解对应的全部信息
%      F:对解集分级完成后存储的矩阵pop=CalcCrowdingDistance(pop,F);%计算拥挤距离
%调用计算虚拟适应度的函数:CalcCrowdingDistance
%输入:种群所有信息的结构数组:pop
%      分好等级的解的位置:F
%同一等级下,依据拥挤度可以删除一部分非劣解,用以维护最优解集%% 循环开始
for k=1:MaxGeneration,alpha=alpha_new(alpha,MaxGeneration);%更新alpha增加收敛性%% 根据Pareto支配关系,更新萤火虫位置scale=abs(Varmax-Varmin);%参数取值范围绝对值pop_=pop;%保护数据num_pop=length(pop);%==========================目标函数===========================%
%
% ======================约束=========================
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%子函数
%目标函数,输入为包含3个元素的x数组,
%          得到包含[z1 z2]两个值的目标函数值得数组z
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function y=mycost(x)%目标函数%目标函数为多目标函数n=numel(x);%numel(x):数组x中元素个数y1=x.^2;y2=(x-2).^2;y=[y1;y2];%列表示end

四、运行结果


五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

【多目标优化求解】基于matlab遗传优化萤火虫算法求解多目标优化问题【含Matlab源码 1484期】相关推荐

  1. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  2. 【Matlab指纹识别】指纹识别门禁系统【含GUI源码 1692期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别门禁系统[含GUI源码 1692期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继 ...

  3. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  4. 【Matlab树叶分类】BP神经网络植物叶片分类【含GUI源码 916期】

    一.代码运行视频(哔哩哔哩) [Matlab树叶分类]BP神经网络植物叶片分类[含GUI源码 916期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅 ...

  5. 【Matlab水果蔬菜识别】形态学水果蔬菜识别【含GUI源码 919期】

    一.代码运行视频(哔哩哔哩) [Matlab水果蔬菜识别]形态学水果蔬菜识别[含GUI源码 919期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅. ...

  6. 【Matlab青草识别】形态学马唐草+牛筋草识别【含GUI源码 908期】

    一.代码运行视频(哔哩哔哩) [Matlab青草识别]形态学马唐草+牛筋草识别[含GUI源码 908期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅 ...

  7. 【Matlab限速标志识别】形态学限速标志识别【含GUI源码 1142期】

    一.代码运行视频(哔哩哔哩) [Matlab限速标志识别]形态学限速标志识别[含GUI源码 1142期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅 ...

  8. 【Matlab多目标优化求解】遗传优化萤火虫算法求解多目标优化问题【含源码 1484期】

    一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]遗传优化萤火虫算法求解多目标优化问题[含源码 1484期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  9. 【Matlab电力负荷预测】粒子群优化支持向量机短期电力负荷预测【含GUI源码 751期】

    一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]粒子群优化支持向量机短期电力负荷预测[含GUI源码 751期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  10. 【APF三维路径规划】基于matlab人工势场算法无人机三维路径规划【含Matlab源码 168期】

    一.获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码. 获取代码方式2: 完整代码已上传我的资源:[三维路径规划]基于matlab人工势场算法无人机三维 ...

最新文章

  1. Caffe 中的卷积--权宜之计
  2. FreeSWITCH异常原因总结
  3. 指尖检测的几种新方法
  4. 隐马尔可夫(HMM)
  5. linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统
  6. htmlparser解析网页内容代码
  7. 【Classification】分类的进阶
  8. 想了好久 请多多指教
  9. CF1365G Secure Password(构造,交互,二进制分组)
  10. python tqdm自定义更新进度条
  11. 练习1.account表 添加一条记录
  12. php curl iis,解决IIS运行PHP出现Call to undefined function curl_init()的问题
  13. windows常用端口对应表
  14. 98五笔86五笔及五笔字型口诀字根表
  15. 电子电路基础 (13)——数字电路基础 - 逻辑电路
  16. 使用Flash绘制曲线动画
  17. 解答腾讯会议的常见新手问题
  18. Spring @Aspect注解
  19. linux写日历脚本,shell脚本实现日历的屏幕控制
  20. 智商黑洞(门萨Mensa测试)3

热门文章

  1. Git-第二篇廖雪峰Git教程学习笔记(1)基本命令,版本回退
  2. android studio: 让项目通过阿里云 maven jcenter 下载依赖资源
  3. Ionic开发,手机在线测试
  4. 设计模式(一):代理模式
  5. 使用代码段遍历,枚举类型Enum
  6. noip2013day1模拟赛
  7. Apache与Nginx服务器对比
  8. 学习数据库必须掌握的54条SQL查询语句
  9. iPhone界面学习(2)
  10. 每日一句20200119