一种多策略改进小龙虾智能优化算法MSCOA 改进策略:种群初始化精英反向+透镜成像反向学习+黄金正弦变异策略
文章目录
- 一、小龙虾COA基本原理
- 二、改进策略
- 2.1种群初始化 映射
- 2.2 透镜成像反向学习
- 2.3 黄金正弦变异策略
- 三、实验结果
- 四、核心代码
- 五、代码获取
- 六、总结
一、小龙虾COA基本原理
小龙虾优化算法(Lobster Optimization Algorithm,LOA)是一种模拟小龙虾觅食行为的优化算法。其基本原理和步骤如下:
-
初始化:
- 随机生成小龙虾种群的位置(解)和速度。
-
适应度评估:
- 计算每只小龙虾的适应度值(目标函数值)。
-
更新位置:
- 小龙虾通过两种主要行为来更新位置:
- 觅食行为:小龙虾在其当前位置附近搜索更好的解。
- 社会行为:小龙虾根据邻近个体的位置调整自己的位置,以利用群体的知识。
- 小龙虾通过两种主要行为来更新位置:
-
选择最优解:
- 通过比较适应度值,选择当前最优的小龙虾解作为全局最优解。
-
迭代:
- 重复步骤2-4,直到达到最大迭代次数或满足停止准则。
-
输出结果:
- 输出最优解及其适应度值。
小龙虾优化算法的优点包括较强的全局搜索能力和较快的收敛速度,但其效率和效果依赖于具体问题和参数设置。
二、改进策略
2.1种群初始化 映射
六种映射可供选择
tent
chebyshev
Singer
Logistic
Sine
Circle
2.2 透镜成像反向学习
2.3 黄金正弦变异策略
三、实验结果
四、核心代码
%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
% rng(24,'twister'); % 随机种子
%% 参数设置
SearchAgents = 30; % COApulation members
Max_iterations = 500; % maximum number of iteration
number = 'F10'; % 选定优化函数,自行替换:F1~F23
[lb,ub,dim,fobj] = Get_Functions_details(number); % [lb,ub,dim,fobj]:下界、上界、维度、目标函数表达式
%% 循环实验
for i = 1:2
%% MSCOA
[MSCOA_Best_score,MSCOA_Best_pos,MSCOA_cg_curve]=MSCOA(SearchAgents,Max_iterations,lb,ub,dim,fobj);
MSCOA_fitness(i) = MSCOA_Best_score;
%% COA
[COA_Best_score,COA_Best_pos,COA_cg_curve]=COA(SearchAgents,Max_iterations,lb,ub,dim,fobj);
COA_fitness(i)= COA_Best_score;
end
%% 算法的最佳适应度值
% MSCOA
MSCOA_min_value = min(MSCOA_fitness);MSCOA_max_value = max(MSCOA_fitness);MSCOA_mean_value = mean(MSCOA_fitness);MSCOA_std_value = std(MSCOA_fitness);
MSCOA_result = [MSCOA_mean_value,MSCOA_min_value,MSCOA_std_value];
disp('---------------------------MSCOA--------------------------------')
disp(['MSCOA平均值:', num2str(MSCOA_mean_value)])
disp(['MSCOA最优值:', num2str(MSCOA_min_value)])
disp(['MSCOA标准差:', num2str(MSCOA_std_value)])
% COA
COA_min_value = min(COA_fitness);COA_max_value = max(COA_fitness);COA_mean_value = mean(COA_fitness);COA_std_value = std(COA_fitness);
COA_result = [COA_mean_value,COA_min_value,COA_std_value];
disp('---------------------------COA--------------------------------')
disp(['COA平均值:', num2str(COA_mean_value)])
disp(['COA最优值:', num2str(COA_min_value)])
disp(['COA标准差:', num2str(COA_std_value)])
%% 把结果保存
columnNames = {'平均值', '最优值', '标准差'};
RowNames = {'MSCOA', 'COA'};
result = [MSCOA_result',COA_result'];
%% 保存适应度函数
curve = [MSCOA_cg_curve' COA_cg_curve'];
%% 绘图
figure1 = figure('Color',[1 1 1]);
G1=subplot(1,2,1,'Parent',figure1);
func_plot(number)
title(number)
xlabel('x')
ylabel('y')
zlabel('z')
subplot(1,2,2)
G2=subplot(1,2,2,'Parent',figure1);
CNT=20;
k=round(linspace(1,Max_iterations,CNT)); %随机选CNT个点
% 注意:如果收敛曲线画出来的点很少,随机点很稀疏,说明点取少了,这时应增加取点的数量,100、200、300等,逐渐增加
% 相反,如果收敛曲线上的随机点非常密集,说明点取多了,此时要减少取点数量
iter=1:1:Max_iterations;
if ~strcmp(number,'F16')&&~strcmp(number,'F9')&&~strcmp(number,'F11') %这里是因为这几个函数收敛太快,不适用于semilogy,直接plot
semilogy(iter(k),MSCOA_cg_curve(k),'r-','linewidth',1);
hold on
semilogy(iter(k),COA_cg_curve(k),'g-','linewidth',1);
else
plot(iter(k),MSCOA_cg_curve(k),'r-','linewidth',1);
hold on
plot(iter(k),COA_cg_curve(k),'g-','linewidth',1);
end
grid on;
title('收敛曲线')
xlabel('迭代次数');
ylabel('适应度值');
box on
legend('MSCOA','COA')
set (gcf,'position', [300,300,800,330])
五、代码获取
99
六、总结
包括但不限于
优化BP神经网络,深度神经网络DNN,极限学习机ELM,鲁棒极限学习机RELM,核极限学习机KELM,混合核极限学习机HKELM,支持向量机SVR,相关向量机RVM,最小二乘回归PLS,最小二乘支持向量机LSSVM,LightGBM,Xgboost,RBF径向基神经网络,概率神经网络PNN,GRNN,Elman,随机森林RF,卷积神经网络CNN,长短期记忆网络LSTM,BiLSTM,GRU,BiGRU,TCN,BiTCN,CNN-LSTM,TCN-LSTM,BiTCN-BiGRU,LSTM–Attention,VMD–LSTM,PCA–BP等等
用于数据的分类,时序,回归预测。
多特征输入,单输出,多输出