1 简介
正弦余弦算法( sine cosine algorithm,SCA) 是由澳大利亚学者 Mirjalili于 2016 年提出的一种新型群体智能优化算法。本文提出一种改进的正弦余弦算法(简记为ISCA).受粒子群优化(PSO)算法的启发,引入惯性权重以提高正弦余弦算法的收敛精度和加快收敛速度.此外,采取反向学习策略产生初始个体以提高种群的多样性和解的质量.采用八个高维基准测试函数进行仿真实验:在相同的最大适应度函数评价次数下,ISCA总体性能上均优于基本SCA和HGWO算法;当维数较高(D=1 000)时,ISCA所用计算量远小于HDEOO算法.实验结果表明ISCA在收敛精度和收敛速度指标上均优于对比算法.
2 部分代码
%% 清除环境变量 clear clc %% 参数设置 N = 50; % 种群规模 Function_name = 'F1'; % 从F1到F23的测试函数的名称(本文中的表1、2、3) Max_iteration = 1000; % 最大迭代次数 % 加载所选基准函数的详细信息 [lb, ub, fobj] = Get_Functions_details(Function_name); cnt_max = 30; Curve_ISCA_100 = zeros(1, Max_iteration); Curve_ISCA_500 = zeros(1, Max_iteration); Curve_ISCA_1000 = zeros(1, Max_iteration); for cnt = 1:cnt_max % 初始化种群位置 % 100维 dim = 100; X1 = initialization(N, dim, ub, lb); [ISCA_Best_score_100(cnt), ISCA_Best_pos_100(cnt, :), ISCA_Curve_100] = ISCA(X1, N, Max_iteration, lb, ub, dim, fobj); % 500维 dim = 500; X2 = initialization(N, dim, ub, lb); [ISCA_Best_score_500(cnt), ISCA_Best_pos_500(cnt, :), ISCA_Curve_500] = ISCA(X2, N, Max_iteration, lb, ub, dim, fobj); % 1000维 dim = 1000; X3 = initialization(N, dim, ub, lb); [ISCA_Best_score_1000(cnt), ISCA_Best_pos_1000(cnt, :), ISCA_Curve_1000] = ISCA(X3, N, Max_iteration, lb, ub, dim, fobj); Curve_ISCA_100 = Curve_ISCA_100+ISCA_Curve_100; Curve_ISCA_500 = Curve_ISCA_500+ISCA_Curve_500; Curve_ISCA_1000 = Curve_ISCA_1000+ISCA_Curve_1000; end Curve_ISCA_100 = Curve_ISCA_100/cnt_max; Curve_ISCA_500 = Curve_ISCA_500/cnt_max; Curve_ISCA_1000 = Curve_ISCA_1000/cnt_max; std_isca_100 = std(ISCA_Best_score_100); std_isca_500 = std(ISCA_Best_score_500); std_isca_1000 = std(ISCA_Best_score_1000); best_isca_100 = min(ISCA_Best_score_100); best_isca_500 = min(ISCA_Best_score_500); best_isca_1000 = min(ISCA_Best_score_1000); worst_isca_100 = max(ISCA_Best_score_100); worst_isca_500 = max(ISCA_Best_score_500); worst_isca_1000 = max(ISCA_Best_score_1000); mean_isca_100 = mean(ISCA_Best_score_100); mean_isca_500 = mean(ISCA_Best_score_500); mean_isca_1000 = mean(ISCA_Best_score_1000); %% 画图 % % 1、画出所选基准函数的三维立体图形 figure; func_plot(Function_name); title(Function_name) xlabel('x_1'); ylabel('x_2'); zlabel([Function_name,'( x_1 , x_2 )']) img =gcf; %获取当前画图的句柄 print(img, '-dpng', '-r600', './运行结果.png') %即可得到对应格式和期望dpi的图像 % 2、画出目标函数值变化曲线图 figure; t = 1:Max_iteration; semilogy(t, Curve_ISCA_100, 'bo-', t, Curve_ISCA_500, 'ms-', t, Curve_ISCA_1000, 'rd-',... 'linewidth', 1.5, 'markersize', 8, 'MarkerIndices', 1:50:Max_iteration); title(Function_name) xlabel('迭代次数'); ylabel('平均值'); axis tight grid on box on legend('D=100', 'D=500', 'D=1000'); img =gcf; %获取当前画图的句柄 print(img, '-dpng', '-r600', './运行结果2.png') %即可得到对应格式和期望dpi的图像
3 仿真结果
4 参考文献
[1]徐松金, & 龙文. (2018). 求解高维优化问题的改进正弦余弦算法. 计算机应用研究, 35(09), 20-23.