为了突出改进智能优化算法的效果,常常会将改进的智能算法与其他算法进行对比。
在一些期刊论文中,经常会看到一个超级大的表格,统计着每个算法的平均值,标准差,最优值,最差值,中位数等指标,例如:
还有的为了比较改进算法与对比算法的区别,会进行秩和检,例如:
还有一些论文为了更直观的表现会放上箱线图,例如:
然而如果一遍一遍的运行代码去手动统计,估计闪电侠都不会这么做吧!
今天就采用matlab工具,教大家直接一键完成统计,并导出EXCEL表格,同时绘制箱线图。
算法替换十分简单,只替换算法名字即可!测试集替换也十分简单!
本期以自适应螺旋飞行麻雀搜索算法(ASFSSA)(点击链接跳转,这个算法可以免费获取)为例,与蜣螂优化算法,麻雀优化算法,粒子群优化算法,灰狼优化算法进行对比。
将每个算法运行30次,在CEC2005函数中进行测试,一键统计最优值,平均值,标准差,中位数,最差值五个指标和秩和检验结果,同时绘制箱线图。
代码目录如下:
其中plotCEC2005_Main.m还是往常的绘制算法对比图的程序,这个一直都有。
重点是:runsCEC2005_Main.m这个脚本,运行后可以一键生成ranksumresult.xls和result.xls两个excel。
其中ranksumresult.xls是秩和检验的结果统计,result.xls是五个指标的统计。结果如下:
ranksumresult.xls表格:
result.xls表格:
程序中设置了可以选择是否绘制箱线图的代码,也可以一键更改。箱线图如下:
部分代码展示
runsCEC2005_Main.m部分代码展示如下:
- clear
- clc
- close all
- addpath(genpath(pwd));
- pop_size=50; %种群数目
- max_iter=500; %迭代次数
-
-
- run = 30;
- box_pp = 1; %可选1,或者其他。当等于1,绘制箱型图,否则不绘制
- RESULT=[]; %统计标准差,平均值,最优值等结果
- rank_sum_RESULT=[]; %统计秩和检验结果
-
-
- if box_pp ==1
- figure('Name', '箱型图', 'Color', 'w','Position', [100 100 1400 700])
- end
-
-
- for func_num = 1:length(F) %CEC2005有23个函数
- % Display the comprehensive results
- disp(['F',num2str(F(func_num)),'函数计算结果:'])
- [lower_bound,upper_bound,variables_no,fhd]=Get_Functions_details(['F',num2str(F(func_num))]);
- resu = []; %统计标准差,平均值,最优值等结果
- rank_sum_resu = []; %统计秩和检验结果
- box_plot = []; %统计箱型图结果
- ……
- end
- %% 将秩和检验结果写入elcex中
- B = string();
- for i = 1:length(F)
- str = string(['F',num2str(F(i))]);
- B(i,1)= str;
- end
- B = cellstr (B);
- B = [B,num2cell(rank_sum_RESULT)];
- title = {" ","DBO","PSO","GWO","SSA"};% 秩和检验是和改进的算法做比较,因此这里没有改进的算法
- B = [title;B];
- xlswrite('ranksumresult.xls', B)
-
-
- %% 将标准差,平均值,最优值等结果写入elcex中
- A = string();
- A = cellstr (A);
- A = [A,num2cell(RESULT)];
- title = {" "," ","ASFSSA","DBO","PSO","GWO","SSA"};
- A = [title;A];
- xlswrite('result.xls', A)
点击下方卡片获取更多代码!