当前位置:首页 > 代码 > 正文

烟花算法源代码(python烟花源代码)

admin 发布:2022-12-19 16:24 148


本篇文章给大家谈谈烟花算法源代码,以及python烟花源代码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

形容只要有努力就会有收获的句子

1、生活中有两种算法:工作时要算加法,你的每一点努力加起来,收获会越来越多;谈感情时要算乘法,其中一方为零,结果永远是零。

2、生命是一种缘分,你刻意追求的未必能得到,你努力追寻的未必能获取。生命中的灿烂,人生中的辉煌,往往不期而遇,尽在偶遇。我们能做的就是尽心尽力,得到是一种幸运,得不到也是一种幸运。因为尽心,我们总有收获,因为尽力,我们总有进步。得失是一种心境,人生就是一种缘分,无悔就行。

3、乐观,专注,用新的心态去做每一件事;充实,努力,用行动给每一天赋予梦想的意义。新的一年,请记住感恩、善意和梦想。新的一年,愿你收获快乐、爱和成长。

努力就有收获

4、有生命就会有希望,有信心就会有成功,有思索就会有思路,有努力就会有收获。如果你过得好,是因为你努力修来的;如果过得不太如意,是因为你正在积累。

5、今天收获的幸福与快乐,是昨日梦想种子所盛开的花。我们不能停止脚下努力的步伐,为眼前的困难犹豫不前,为明日的人生走向担忧。我们能做的,就是珍惜现在,走好眼下坚实的那一步,之后才会海阔天空。

6、追逐梦想的道路,也许不会一直都是一帆风顺,偶尔也会有挫折和坎坷。但是这并不会使前进的脚步停止,收拾起心情继续不懈努力,错过的终将在未来收获。

7、如果你努力去发现美好,美好会发现你;如果你努力去尊重他人,你也会获得别人尊重;如果你努力去帮助他人,你也会得到他人的帮助。生命就像一种回音,你送出什么它就送回什么,你播种什么就收获什么,你给予什么就得到什么。

8、成功没有快车道,幸福没有高速路。所有的成功,都来自不倦的努力和奔跑;所有幸福,都来自平凡的奋斗和坚持。人生如同坐火车,风景再美也会后退,流逝的时间和邂逅的人终会渐行渐远。那些陪伴你的,哪怕再不起眼,你都要心存感激,都应该为自己的付出和收获而骄傲。

9、不去做,就永远不会有收获;不相信,就永远不会有成功;不可能,就永远停留现在。未来是靠把握机会和努力奋斗的,相信永远比怀疑多一次成功的机会!

10、任何的收获不是巧合,而是每天的努力与坚持得来的。人生因有梦想,而充满动力。不怕你每天迈一小步,只怕你停滞不前;不怕你每天做一点事,只怕你无所事事。坚持,是生命的一种毅力!执行,是努力的一种坚持!

怀念过去的诗句

怀念的诗句经典举例如下:

1、欲寻芳草去,惜与故人违。——孟浩然《留别王侍御维》

2、别愁深夜雨,孤影小窗灯。——陈克《临江仙·四海十年兵不解》

3、望望不见君,连山起烟雾。——李白《金乡送韦八之西京》

4、莫见长安行乐处,空令岁月易蹉跎。——李颀《送魏万之京》

5、奈何今之人,双目送飞鸿。——李白《鞠歌行》

6、相思一夜梅花发。——房舜卿《忆秦娥·与君别》

7、天将离恨恼疏狂。——晏几道《鹧鸪天·醉拍春衫惜旧香》

有字的烟花多少万钱一发

有字烟花有两种,一种是高空的,一个100发,可排一个字,400元一个也就是一个字,这种在天上发出字的时间3秒左右,更多的是别的花形。

还有一种是用红色火焰烟花编排在一张2米宽铁丝网上组成的烟花字,这种是点燃后形成红色字体60秒、300元一个字,可竖在地上或固定在墙上等高处,观赏距离30米左右。

为了达到好的表演效果,焰火和礼花弹中填充了大量用于发射以及爆炸的火药,例如,一个直径为20厘米的礼花弹在发射后,要上升到大概200米的高空才会爆炸,而这些星星点点覆盖的半径大约可以有80米左右。

注意事项

焰色反应有一个很严重的缺点,就是通常需要高温。所以,焰火晚会中的点点焰火,温度都是非常高的。一般在工艺中,使用金属可燃物来达到这样的温度,比如说铝、镁等。铝燃烧时放出的热量很多,甚至可以将铁融化(熔点大约1500℃)。即使焰火的残渣掉到地上时,内部温度也可以达到300℃。

所以,规定一个安全距离是非常重要的。但是,烟花作为中国文化的一部分,在全球范围内都有其不可替代的影响力的传播力,只要合理使用,按烟花燃放操作规程进行烟花的运输、购买、存储与燃放,烟花的危险性完全是可控的。

优化算法笔记(十三)鲸鱼算法

(以下描述,均不是学术用语,仅供大家快乐的阅读)

鲸鱼算法(Whale Optimization Algorithm)是根据鲸鱼围捕猎物的行为而提出的算法。鲸鱼是一种群居的哺乳动物,在捕猎时它们也会相互合作对猎物进行驱赶和围捕。鲸鱼算法提出时间并不长,也是一个新兴的优化算法,研究应用案例不多。

鲸鱼算法中,每个鲸鱼的位置代表了一个可行解。在鲸鱼群捕猎过程中,每只鲸鱼有两种行为,一种是包围猎物,所有的鲸鱼都向着其他鲸鱼前进;另一种是汽包网,鲸鱼环形游动喷出气泡来驱赶猎物。在每一代的游动中,鲸鱼们会随机选择这两种行为来进行捕猎。在鲸鱼进行包围猎物的行为中,鲸鱼将会随机选择是向着最优位置的鲸鱼游去还是随机选择一只鲸鱼作为自己的目标,并向其靠近。

鲸鱼算法,显而易见,主角就是鲸鱼了。

在D维解空间内每个鲸鱼的位置为

每只鲸鱼随机选择进行包围猎物或者是使用汽泡网驱赶猎物,每只鲸鱼选择这两种行为的该率是等的,即P(包围)=P(汽泡网)=0.5。

鲸鱼在包围猎物时会选择向着最优位置的鲸鱼游动或者向着一只随机鲸鱼游动。

该鲸鱼的位置更新公式入下:

其中 为当前最优的鲸鱼的位置,A的每一维为均匀分布在(-a,a)内的随机数,a的初始值为2,随着迭代次数线性递减至0;C为均匀分布在(0,2)内的随机数。||表示数的绝对值,即 每一维的值都是非负数。

该鲸鱼的位置更新公式入下:

其中 为当前群体中随机选择的鲸鱼的位置。

那么鲸鱼在什么时候选择向最优个体游动,什么时候选择随机个体为目标呢?

这个将由A的值决定

当 时,鲸鱼选择向着最优个体游动。注意A是一个D维的向量,所以是A的模小于1时,鲸鱼向着最优个体游动。

当 时,鲸鱼选择向着随机个体游动。

可以看出在包围猎物的过程中,鲸鱼算法的搜索模式为在距最优个体较近的周围搜索或者在距随机个体较远的附近搜索。

2.2气泡网

鲸鱼在捕猎时会喷出汽包形成气泡网来驱赶猎物。

其中b为常数(没找到定义,默认取1),l为均匀分布在[-1,1]内的随机数。

每次行动之前,每只鲸鱼都会抛个硬币,来决定是选择包围猎物还是使用气泡网来驱赶猎物。

从上面的描述可以看出,鲸鱼算法的流程也十分的简单。

适应度函数

实验一 :标准鲸鱼算法

从图上可以看出算法的收敛性还是很强的,在第35代左右就已经完全收敛。再看最后的结果,已经是非常好的结果了,同样也说明的算法的局部搜索能力很强。这样印证了上一节我的说法,算法收敛速度快,缺少跳出局部最优的能力。

从算法的流程我们可以看出,算法的收敛性大概是由参数a来决定的,由于a从2递减为0,使算法的搜索范围越来越小,从而加速算法的收敛。这应该是一个优化后的参数,现在我们固定住a,来弱化算法,减弱其收敛性,看看全局搜索和跳出局部最优能力是否有所加强。

实验二 :固定参数a

从图像可以看出,算法几乎没有收敛的了,算法的收敛速度依旧很快。

看看实验结果。

结果比标准鲸鱼算法差,能说明参数a影响了算法的搜索精度,参数a对算法收敛性的影响在于a对向量A的影响。固定a=1.5时使A的模较之前相比有更大的概率大于1,此时鲸鱼们在包围猎物的行为中选择游向最优个体的概率更小,从而使算法的收敛速度更慢,同时算法的全局搜索能力有一定的提升。

鲸鱼算法作为一个新兴算法,我对它的研究也不是太多。纵观算法的流程,可以看出标准的鲸鱼算法和萤火虫算法有相似之处,它们都是在算法前期进行全局搜索,而在算法的后期进行局部搜索,也都没有跳出局部最优的操作。在面对简单问题上表现出的优秀性能到了复杂问题上可能会有所下降,但是由于算法流程、结构相对简单,算法的改进点感觉也不是太多。

以下指标纯属个人yy,仅供参考

参考文献

Mirjalili S, Lewis A. The Whale Optimization Algorithm[J]. Advances in Engineering Software, 2016, 95:51-67. 提取码:b13x

目录

上一篇 优化算法笔记(十二)烟花算法

下一篇 优化算法笔记(十四)水波算法

优化算法matlab实现(十三)鲸鱼算法matlab实现

谁有烟花算法的MATLAB程序

function firework()

% 烟花烟花满天飞 

% 2011.6.25  

OldHandle = findobj('Type','figure','Tag','FireWork');

if ishandle(OldHandle)

     close(OldHandle);

end

% 图形窗口初始化 

fig = figure('units','normalized','position',[0.1 0.1 0.8 0.8],...

   'menubar','none','name','烟花满天飞',...

   'numbertitle','off','color',[0 0 0],'tag','FireWork');

% 烟花炸开前的初始位置

h0 = line(0,0,0,'marker','.',...

    'markersize',18,... 

 'MarkerEdgeColor',[1 1 1],...

 'MarkerFaceColor',[1 1 1],...

 'EraseMode','xor',...

 'color',[0 0 0]);

% 设置坐标系显示属性

axis equal

axis([-50 50 -50 50 0 100])

 axis off

view(-42,22)

% 设置参数 

rate = 1:-0.01:0;

% 颜色衰减率

v0 = 45;  % 烟花头初始速度

g = -9.8;   % 重力加速度 

usedtime = -v0/g;  % 烟花头爆炸前所经历时间 

zs = v0*usedtime+0.5*g*usedtime^2;  %烟花头爆炸前达到的最高高度  

theta = rand(250,1)*2*pi;  % 各粒子速度的方位角

 phi =  rand(250,1)*2*pi-pi;  % 各粒子速度的仰角

 age = 20;  % 粒子生存期 

% 常用颜色矩阵 

colormat = [1.0  0.5  0.5

         1.0  0.75  0.5

         1.0  1.0  0.5

         0.75  1.0  0.5

         0.5  1.0  0.5

         0.5  1.0  0.75

         0.5  1.0  1.0         

    0.5  0.75  1.0

     0.5  0.5  1.0

     0.75  0.5  1.0

     1.0  0.5  1.0

     1.0  0.5  0.75]; 

% 随机产生各粒子对应的颜色序号

 colorid = randsample(12,250,true); 

% 粒子对应的颜色矩阵 

colormat = colormat(colorid,:); 

% 粒子颜色与背景色(夜色)的距离

 colordist = sqrt(sum(colormat.^2,2)); 

v1 = 20;  % 粒子的初始速度

 k = 1;   % 颜色衰减率初始序号  

timerA = timer('TimerFcn',@TimerFcnA,... 

    'executionmode','fixedspacing','Period',0.001); 

start(timerA); 

h = getappdata(gcf,'HandleParticle'); 

timerB = timer('TimerFcn',{@TimerFcnB},... 

    'executionmode','fixedspacing','period',0.001);  

%-------------------------------------------------------------------------- 

%  定时器回调函数(烟花头) 

%--------------------------------------------------------------------------

 function TimerFcnA(timerA,event)

 ta = get(timerA,'TasksExecuted')*0.1; 

if ta = usedtime 

    z = v0*ta+0.5*g*ta^2;

     set(h0,'zdata',z,... 

        'MarkerEdgeColor',[1 1 1],...

         'MarkerFaceColor',[1 1 1])

     drawnow

     %pause(0.01)

 else 

    delete(h0)

     stop(timerA);

     x0 = zeros(2,250);

     y0 = zeros(2,250);

     z0 = zs*ones(2,250); 

    h = line(x0,y0,z0,'marker','h',...

        'markersize',12,... 

        'MarkerEdgeColor',[1 1 1],...

         'MarkerFaceColor',[1 1 1],...

         'EraseMode' , 'xor',... 

            'color',[0 0 0]); 

        setappdata(gcf,'HandleParticle',h);

        start(timerB); 

            end

  end

优化算法笔记(十二)烟花算法

(以下描述,均不是学术用语,仅供大家快乐的阅读)

烟花算法(Firework Algorithm,FWA)是一种受烟花爆炸产生火星,并继续分裂爆炸这一过程启发而得出的算法。算法的思想简单,但具体实现复杂。算法提出时间并不长,但是已经有了不少的改进研究和较为全面的应用。

烟花算法中,每一个烟花的位置都代表了一个可行解。烟花的爆炸产生的火星有两种,正常的火星与特别的火星。每个火星都会爆炸产生数个正常火星,某些火星有一定的概率产生一个特别的火星。正常的火星根据当前火星的振幅随机均匀分布在该火星的周围,而特别的火星将在当前火星附近以正态分布方式产生。每次迭代产生的火星数量多于每一代应有的火星数,算法将参照火星位置的优劣,随机留下指定数量的火星,已保持火星数目的稳定。

烟花算法的主角毫无疑问就是烟花了。

式(1)为适应度值越小越优的情况,而式(2)则是适应度值越大越优的情况。 为一个极小的值,以保证分母不为0。

每个火星产生的正常火星数量也由其适应度值来决定。

其中 表示第i个火星将要产生的正常火星数, 是产生正常火星的总数为一个常数,从式(3),(4)可以看出适应度值越好的火星能够产生更多的正常火星,反之,火星适应度越差,能够产生的火星数越少。

由于式(3),(4)计算出的值为小数,烟花算法中使用式(5)将其转化为整数。

从式(3)和式(4)中可以看出,在每一代中将会产生出 个正常火星。产生的正常火星的位置与当前火星的振幅有关,可以从式(1),(2)看出,适应度越优的火星的振幅越小,那么它产生的正常火星将在它自己周围,而适应度越差的火星的振幅越大,它产生的正常火星将会出现在离自己较远的位置。

当前火星每次爆炸会从D维搜索空间内随机选择z维进行更新从而产生新的火星。正常火星的位置由如下公式产生。

其中z为取值1-D的均匀随机正整数,rand(-1,1)表示-1到1内的均匀随机数。从式(6)中可以看出,正常火星的位置与其振幅有直接关系,振幅越大产生的新火星距当前火星的距离约远。

每次迭代过程中,会产生m个特别的火星,即在这N个火星中随机选择m个火星,每个火星产生一个特别的火星。特别的火星的由下面的公式产生:

由上面的过程可知,在每一代中,有N个火星,将会产生出 个正常火星以及m个特别的火星。但是每一代中只能从这 个火星中选择N个火星保留至下一代。

每次会先从 个火星中选择最优的火星保留至下一代,然后再从中选择N-1个火星。选择某个火星的概率如下:

其中R(X)表示该火星距其他所有火星的距离之和,即距其它火星越远的火星,被选择保留至下一代的概率较大。

个火星,而且

,所有烟花算法每次迭代的计算复杂度要大于其他算法,这简直就是一个作弊行为。别的算法每次只搜索了N个位置,而烟花算法却搜索了 个位置。与其他优化算法对比时,其他算法的种群数量应该取 ,否则这将是一场不公正的对决。

适应度函数还是这个简单的小白鼠

实验一 :标准烟花算法

以上数据来自原论文,现在看一看实验的图像以及实验结果。

从图像可以看出每次只选择保留了5个火星,它们的收敛速度很慢,实验结束时距离目标点还有一段距离。

看看实验结果

从实验结果可以看出,算法的性能很不稳定,而造成这一点的原因很可能是其收敛速度较慢,算法仍在收敛过程中,所以结果看上去很差。将最大迭代次数修改为100代,重新试验,其结果如下:

结果好了一些但还是难以接受,为什么烟花算法的结果不理想呢?

原因可能是保留机制(2.3节)的问题,烟花算法中保留火星的概率是根据该火星与其他火星的距离和,距离群体越大的个体被保留下的概率越大。这样做有什么好处呢?好处是火星相对分散,这是一个对抗局部最优的策略,但是,距离群体较远的个体是一个较差的个体的概率非常大,坏处就是,集中于当前最优位置的火星被保留的概率较小,算法的局部搜索能力将较弱。

实验二 . 随机选择的方式保留火星

为了加快烟花算法的收敛速度,增强局部搜索能力,我移除了标准烟花算法的选择过程,使用随机选择的方式保留火星,当然,最优个体依然会被保留至下一代。其他参数保持不变。

可以看出这次的图像相比实验一收敛速度快了不少,在迭代结束时已经相对在一个较小的区域。这次的结果也明显优于实验一。将选择过程改为随机选择后,由于较优的火星产生的较多且分布在自己周围,因此选择到这些较优的火星的概率也相对较大,算法的收敛速度相对较快。与此同时,算法跳出局部最优的能力比修改前要弱。

对于较简单的问题来说当然是随机选择收敛较快结果较好,而复杂的问题则需要更强的跳出局部最优能力。问题的关键仍然是,我们无法在一开始就知道问题的复杂程度。

实验三 .增加火星的种群数量,减少每代产生的正常火星总数

为什么要减少产生的正常火星数,这样算法搜索的次数减少了,效果不会更差吗?其实与直觉相反,减少正常火星总数,增加火星总群数,实际上是让较优的火星产生的正常火星被保留下来的概率变大了,这样也可以解决实验一中的问题,加快算法的收敛速度。

从图像中可以看出,算法在50代之前已经收敛,但是之后只在小范围内进行搜索。实验图像与之前的描述相符,收敛速度加快但是跳出局部最优能力减弱。看看实验结果,实验结果好了不少且结果更加稳定。

其实实验二与实验三,使用了不同的策略,但都达到了同样的目的——保留更多的优质火星到下一代,它们促进了局部搜索但是挤占了较劣火星的位置,削弱了种群的多样性。

每代留下的火星多了,图像看上去是不是更像烟花?

烟花算法的探究远不止如此,几年前作为一个较新的算法来学习时却已经有了大量的论文和书籍,可见大家对烟花算法已经有了较为深入的研究,而我能做的只是应用算法解决问题以及稍作改进让算法与问题的适应性更高。

烟花算法产生正常火星的过程为算法提供了搜索能力,产生特殊火星的过程和选择过程为算法提供了跳出局部最优的能力。但是个人认为选择过程与其他过程的适应性不是很好。标准的选择过程会丢失掉许多较优的个体,使之前产生的正常火星得到的成果没有保留。

烟花算法其实还有比较多的改进点,对算法产生最大的参数应该就是正常火星的总数以及振幅了。简单粗暴的改进:在每一代可以对这两个参数进行变化或者随机化,让算法的搜索能力与跳出局部最优能力在整个流程中动态变化,以均衡两种能力。

以下指标纯属个人yy,仅供参考

参考文献

Tan Y , Zhu Y . Fireworks Algorithm for Optimization[C]// Advances in Swarm Intelligence, First International Conference, ICSI 2010, Beijing, China, June 12-15, 2010, Proceedings, Part I. Springer-Verlag, 2010. 提取码:yaj0

目录

上一篇 优化算法笔记(十一)群搜索算法

下一篇 优化算法笔记(十三)鲸鱼算法

优化算法matlab实现(十二)烟花算法matlab实现

烟花算法源代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python烟花源代码、烟花算法源代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/12791.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载