|
1 海鸥算法
海鸥在地球上生活了大约三千万年,是生活在沿海的鸟类,它们主要以鱼类为食。海鸥喜欢群体生活,它们能够用声音进行彼此的信息交流,善于从种群的经验中获得利益。群体中的每只海鸥总是朝着最好的生存方向前进,以最低的成本来寻找食物资源。当季节变化时,海鸥会通过它们的迁徙行为和攻击行为进行捕猎。迁徙是指海鸥为了获得足够丰富的食物,在秋季向南移动、在春季向北移动,或者从地面移动到高空,或者在两个海岸之间进行转移。这种迁徙行为描述如下:
1)在迁徙过程中,海鸥成群结队一起旅行。但是它们在海洋上的初始位置差异很大,相互之间不会挨得很近,以避免彼此之间的碰撞。
2)为了快速获得食物,每只海鸥都会向种群当中最适宜生存的个体靠拢。最适宜生存的海鸥被称为最优海鸥,其适应度值是种群当中最低的,这表示它所处位置的食物资源十分丰富。
3)海鸥群朝着最优海鸥所在方向移动,不断地更新它们的位置,每一只海鸥的飞行距离是有差异的。海鸥在迁徙过程中,常常会攻击海面上出现的鱼类和虾类,它们会以螺旋形状的运动方式向目标移动,从而发起攻击。
海鸥算法的实现步骤和算法流程图:
步骤1:参数设置,种群初始化;
步骤2:计算初始种群的适应度值,标记最优个体;
步骤3:根据迁徙和攻击操作更新海鸥位置;
步骤4:计算新种群适应度值,更新最优个体;
步骤5:判断是否达到最大迭代次数,是则停止迭代并输出最优值,否则跳转至步骤3继续迭代。
海鸥算法作为一种新型的群智能优化算法,具有算法结构简单、适用性强的优点,方便进行算法的改进和融合。海鸥算法简单的算法结构带来较低的算法复杂度和高效的计算能力,同时该算法也存在其他群智能算法的通病,在求解复杂优化问题时容易陷入局部最优、收敛精度低、鲁棒性差等问题。
2 算例验证
3 程序运行结果
1)迭代曲线
2)求解结果
4 matlab程序
%% 基于海鸥优化算法的线性规划问题求解
%_________________________________________________________________________%
% 使用方法
%__________________________________________
% fobj = @YourCostFunction 设定适应度函数
% dim = number of your variables 设定维度
% Max_iteration = maximum number of generations 设定最大迭代次数
% SearchAgents_no = number of search agents 种群数量
% lb=[lb1,lb2,...,lbn] where lbn is the lower bound of variable n 变量下边界
% ub=[ub1,ub2,...,ubn] where ubn is the upper bound of variable n 变量上边界
% If all the variables have equal lower bound you can just
% define lb and ub as two single number numbers
% To run SSA: [Best_pos,Best_score,curve]=SOA(pop,Max_iter,lb,ub,dim,fobj)
%__________________________________________
%%
clear
clc
close all
rng('default');
SearchAgents_no=50; % Number of search agents 种群数量
Function_name='F1'; % Name of the test function that can be from F1 to F23 (Table 1,2,3 in the paper) 设定适应度函数
Max_iteration=2000; % Maximum numbef of iterations 设定最大迭代次数
% Load details of the selected benchmark function
[lb,ub,dim,fobj]=Get_Functions_details(Function_name); %设定边界以及优化函数
[Best_pos,Best_score,SOA_curve]=SOA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj); %开始优化
%Draw objective space
figure
plot(SOA_curve,'Color','r')
title('Objective space')
xlabel('Iteration');
ylabel('Best score obtained so far');
axis tight
grid on
box on
legend('SOA')
display(['最优解为 : ', num2str(Best_score)]);
display(['最优变量为 : ', num2str(Best_pos)]);
。。。。。略完整程序连接: |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|