📋📋📋本文目录如下:⛳️⛳️⛳️
目录
1 概述
2 象群游牧算法的数学模型
3 部落中大象位置的更新公式
4 运行结果
5 Matlab代码实现
1 概述
在自然界中,一个象群可分为几个氏族,每个氏族都有母象作为首领,在每一代中,一定数量的雄象会离开氏族。对于不同氏族的的大象在族长(氏族中位置最好的大象)的领导下生活,固定数量的雄象在长大后会离开它们所在的氏族,从而执行氏族更新操作来更新氏族中每个大象的位置,得到新的大象氏族位置,随后执行分类操作,进而优化氏族中位置较差的大象位置。
在基本的象群优化算法中氏族代表着局部搜索,离开氏族的雄象则执行全局搜索。在基本的 EHO 算法中,先进行更新操作决定算法的搜索方向和局部搜素详细程度,随后实现分离操作。这个过程包括两个阶段:氏族更新操作和分离操作。
2 象群游牧算法的数学模型
象群的游牧行为非常复杂,但是其中一些行为可以帮助我们寻找全局最优解和局部最优解。对此,进行数学建模为:
(1) 象群的每个部落都有固定数目的大象;
(2) 每次迭代中,部落中都有一定数目的大象离开部落,独自生活并与部落保持一定的联系;
(3) 每个部落都是由女族长领导-----在算法中,女族长是适应度值最大的大象。
3 部落中大象位置的更新公式
1)部落中普通大象的更新公式:
2)族长的位置更新公式:
3)公象的分离公式:
4 运行结果
function [Population, indices] = PopSort(Population)
popsize = length(Population);
Cost = zeros(1, popsize);
indices = zeros(1, popsize);
for i = 1 : popsize
Cost(i) = Population(i).cost;
end
[Cost, indices] = sort(Cost, 2, 'ascend');
Chroms = zeros(popsize, length(Population(1).chrom));
for i = 1 : popsize
Chroms(i, :) = Population(indices(i)).chrom;
end
for i = 1 : popsize
Population(i).chrom = Chroms(i, :);
Population(i).cost = Cost(i);
end