✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,
代码获取、论文复现及科研仿真合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab完整代码及仿真定制内容点击👇
智能优化算法 神经网络预测 雷达通信 无线传感器 电力系统
信号处理 图像处理 路径规划 元胞自动机 无人机
🔥 内容介绍
混合进化方法结合了从不同进化计算技术中提取的方法来构建单一优化方法。此类系统的设计代表了进化优化文献中的当前趋势。在混合算法中,目标是扩展集成方法的潜在优势并消除其主要缺点。在此实现中,提出了一种解决优化问题的混合方法。所提出的方法结合了(A)侵入性杂草优化方法的探索性特征,(B)估计分布算法的概率模型和(C)混合高斯-柯西分布的分散能力,以产生自己的搜索策略。有了这些机制,该方法根据概率模型和现有解的适应度值对值得特别关注的搜索区域进行优化策略。在所提出的方法中,种群中的每个个体在其自身位置周围生成新元素,并根据混合分布进行分散。新元素的数量取决于个体相对于整个种群的相对适应度值。在此过程之后,由(a)新元素和(b)原始个体从集合化合物中选择一组有前途的解决方案。根据选定的解决方案,建立一个概率模型,从中抽取一定数量的成员 (c)。然后,集合(a)、(b)和(c)中的所有个体被加入到一个组中,并根据它们的适应度值进行排名。最后,选择群体中最好的元素来替代原来的群体。重复该过程直到达到终止标准。为了测试我们方法的性能,我们与其他著名的元启发式方法进行了一些比较。比较包括分析统计框架内不同标准基准函数的优化结果。基于比较的结论展示了所提出方法的准确性、效率和稳健性。比较包括分析统计框架内不同标准基准函数的优化结果。基于比较的结论展示了所提出方法的准确性、效率和稳健性。比较包括分析统计框架内不同标准基准函数的优化结果。基于比较的结论展示了所提出方法的准确性、效率和稳健性。
📣 部分代码
function [BestFitt, BestCosts,BestSolu,GY] =IWO(CostFunction,nPop,nVar,MaxIt,VarMin,VarMax)
%
VarSize = [1 nVar]; % Decision Variables Matrix Size
VarSize = [1 nVar]; % Decision Variables Matrix Size
%% IWO Parameters
nPop0 = 10; % Initial Population Size
Smin = 0; % Minimum Number of Seeds
Smax = 5; % Maximum Number of Seeds
Exponent = 2; % Variance Reduction Exponent
sigma_initial = 0.5; % Initial Value of Standard Deviation
sigma_final = 0.001; % Final Value of Standard Deviation
%% Initialization
% Empty Plant Structure
empty_plant.Position = [];
empty_plant.Cost = [];
pop = repmat(empty_plant, nPop0, 1); % Initial Population Array
for i = 1:numel(pop)
% Initialize Position
pop(i).Position = unifrnd(VarMin, VarMax, VarSize);
% Evaluation
pop(i).Cost = CostFunction(pop(i).Position);
end
% Initialize Best Cost History
BestCosts = zeros(MaxIt, 1);
%---------------------------
GY=ones(1,(nPop*MaxIt)+1);
GY(1)=pop(1).Cost; %reference to compare
fcl=1;
%------------
%% IWO Main Loop
for it = 1:MaxIt
% Update Standard Deviation
sigma = ((MaxIt - it)/(MaxIt - 1))^Exponent * (sigma_initial - sigma_final) + sigma_final;
% Get Best and Worst Cost Values
Costs = [pop.Cost];
BestCost = min(Costs);
WorstCost = max(Costs);
% Initialize Offsprings Population
newpop = [];
% Reproduction
for i = 1:numel(pop)
ratio = (pop(i).Cost - WorstCost)/(BestCost - WorstCost);
S = floor(Smin + (Smax - Smin)*ratio);
for j = 1:S
% Initialize Offspring
newsol = empty_plant;
% Generate Random Location
newsol.Position = pop(i).Position + sigma * randn(VarSize);
% Apply Lower/Upper Bounds
newsol.Position = max(newsol.Position, VarMin);
newsol.Position = min(newsol.Position, VarMax);
% Evaluate Offsring
newsol.Cost = CostFunction(newsol.Position);
if newsol.Cost < GY(fcl)
GY(fcl+1)=newsol.Cost;%if beter update
else
if fcl>=1
GY(fcl+1)=GY(fcl);%otherwise last better
end
end
fcl=fcl+1;%CallFnctio counter
% Add Offpsring to the Population
newpop = [newpop
newsol]; %#ok
end
end
% Merge Populations
pop = [pop
newpop];
% Sort Population
[~, SortOrder]=sort([pop.Cost]);
pop = pop(SortOrder);
% Competitive Exclusion (Delete Extra Members)
if numel(pop)>nPop
pop = pop(1:nPop);
end
% Store Best Solution Ever Found
BestSol = pop(1);
% Store Best Cost History
BestCosts(it) = BestSol.Cost;
% Display Iteration Information
disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCosts(it))]);
end
BestSolu=BestSol.Position;
BestFitt=BestCosts(it);
%% Results
end
⛳️ 运行结果
🔗 参考文献
Cuevas, E., Rodríguez, A., Valdivia, A. et al. A hybrid evolutionary approach based on the invasive weed optimization and estimation distribution algorithms. Soft Computing (2019), In press.
https://link.springer.com/article/10.1007/s00500-019-03902-x