提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 蛇优化算法
- 算法流程图
- 初始化
- 进化操作
- 搜索阶段(无食物)——全局搜索
- 搜索阶段(有食物)——局部搜索
- 战斗模式
- 交配模式
- 备注
- 测试结果
蛇优化算法
蛇优化算法(SO)主要是来源于蛇的交配行为。通过当前环境的温度、食物判断个体的下一步行为。
(1)当前食物不足时,个体搜索食物。
(2)当食物充足(>0.25),温度低(<0.6)时,个体进行战斗模式/交配模式
(3)当食物充足(>0.25),温度高(>=0.6)时,个体靠近食物
算法流程图
初始化
该算法将群体分为2个数量相同的雄性和雌性群体。
eq:
Nm表示雄性个体的数目,Nf表示雌性个体的数目
进化操作
计算食物Q
计算温度
搜索阶段(无食物)——全局搜索
当无食物的时候**(Q<0.25),蛇随机选择**位置进行移动。
雄性个体的位置移动:
雌性个体的位置移动:
雄性、雌性发现个体的能力
搜索阶段(有食物)——局部搜索
**(1)**Q>=0.25,且Temp>0.6时
个体向食物(最好的个体)靠近。
(2)Q>=0.25,Temp<0.6时,个体进入战斗或交配模式
战斗模式
雄性个体的位置更新
雌性个体的位置更新
雄性、雌性战斗力
交配模式
雄性个体的位置更新:
雌性个体的位置更新
雄性、雌性个体的交配能力
如果孵化出个体,替换雄和雌个体最差的个体
备注
在进行代码复现的时候,觉得在个体在搜索食物——全局搜索中,雌性个体的更新位置有些奇怪,
**雌性个体的更新位置和雄性不同,**这点不知道是什么意思。
测试结果
在代码复现解决F1~F11测试问题时,出现较多测试问题效果不佳的情况,希望大家能给点意见,比如:全局搜索时雌性个体的位置更新是如何的?
function my_fitness=my_function(X)
% n = size(X,2); %计算x的维度
% f = 0;
% for i = 1:n
% f = f+(X(i).^2).^2;
% end
% my_fitness = f;
o=sum(X.^4);
my_fitness=o;
%F1测试问题[-100,100] min=0
% o=sum(X.^2);
% my_fitness=o;
%F2测试问题[-10,10] min=0;
% o=sum(abs(X))+prod(abs(X));
% my_fitness=o;
%F3测试问题——结果极差 min=0
% dim=size(X,2);
% o=0;
% for i=1:dim
% o=o+sum(X(1:i))^2;
% end
% my_fitness=o;
%F4测试问题——结果极差[100,100] min=0
% o=max(abs(X));
% my_fitness=o;
%F5测试问题[-30,30] min=0
% dim=size(X,2);
% my_fitness=sum(100*(X(2:dim)-(X(1:dim-1).^2)).^2+(X(1:dim-1)-1).^2);
%F6测试问题[-100,100] min=0
% o=sum(abs((X+.5)).^2);
% my_fitness=o;
%F7测试问题[-1.28,1.28]——测试结果不佳 min=0
% dim=size(X,2);
% o=sum([1:dim].*(X.^4))+rand;
% my_fitness=o;
%F8测试问题(多峰)[-500,500]——测试结果不佳 min=-12569.5
% o=sum(-X.*sin(sqrt(abs(X))));
% my_fitness=o;
%F9测试问题 [-5.12,5.12]——测试结果不佳 min=0
% dim=size(X,2);
% o=sum(X.^2-10*cos(2*pi.*X))+10*dim;
% my_fitness=o;
%F10测试问题[-32,32]——测试结果不佳 min=0
% dim=size(X,2);
% o=-20*exp(-.2*sqrt(sum(X.^2)/dim))-exp(sum(cos(2*pi.*X))/dim)+20+exp(1);
% my_fitness=o;
%F11测试问题[-600,600] min=0
% dim=size(X,2);
% o=sum(X.^2)/4000-prod(cos(X./sqrt([1:dim])))+1;
% my_fitness=o;
end