常用智能优化算法改进策略---变异篇(五种变异策略)可用于改进所有智能算法,让小白也会改进智能算法。...

本期文章将讲述常用智能优化算法改进策略---变异篇,一共包含五种常见的变异策略:

高斯变异,t分布扰动变异,自适应t分布扰动变异,柯西变异,差分变异。

五种策略可以方便移植到其他智能算法的改进中!

为了方便大家对变异策略的深入了解,作者将在简单易懂的粒子群算法教大家如何运用这五种策略,今后也方便大家移植到别的智能算法中。

高斯变异:

高斯函数如下:

ef68c8ecea6f16afe48e33b5f2041dee.png

带入粒子群算法中如下:

4ba0de9da67ca0a6712628863708d68f.png

t分布扰动变异:

aae1caf1c758311e8e73a5bf803a8f0e.png

带入粒子群算法中如下:

21e63d8a8e777b358071634eb1c96df0.png

自适应t分布扰动变异;

对C_Iter进行自适应变化,可以在算法前期进行全局搜索,在后期进行局部搜索,从而达到收敛。

 freen = exp(4.*(l/iter).^2);  

然后再带入此式当中:

02a8ac04044fd798991f20453075ea1e.png

柯西变异:

柯西概率密度函数如下:

f1ee7ba1e61f38c017876210ec04b89a.png

带入粒子群算法中:

xnewbest=xbest+xbest×Cauchy(0,1)

随机差分变异:

650163315a8fba3d55284a532881f881.png

Xα是全局最优粒子,X‘(t)是随机粒子,r是一个[0,1]的随机数。

结果展示

在CEC2005函数集进行展示,设置迭代次数1000次,种群个数100个。

其中PSO为原始粒子群,GPSO是高斯变异的粒子群,t-PSO是t分布变异的粒子群,self_adaption_t_PSO是自适应t分布变异的粒子群,CPSO是柯西变异的粒子群,DE-PSO是差分变异的粒子群。

09fdfccdbed07aace757e229a6a07743.png

5d1626e66c2da45ebd59d88ba70b5ed7.png

aa48d3ed1c3db640b299a0f1c71c76ea.png

31b17069ae2632baae7bb15a2363581c.png

注意!本程序代码只是为了教大家如何使用这几种变异策略,如果看到改进后的算法没有原始算法效果好,请不要见怪!

这几种策略并非说用到某种算法上就一定会效果好,关键要看算法本身的原理公式适不适合!要分析其原理并不断进行尝试!

代码展示

%
clear
clc
close all
number='F'; %选定优化函数,自行替换:F1~F23
[lb,ub,dim,fobj]=CEC2005(number);  % [lb,ub,D,y]:下界、上界、维度、目标函数表达式
SearchAgents=100;                      % population members 
Max_iterations=1000;                  % maximum number of iteration


%% 调用PSO算法
[fMin , bestX, PSO_Convergence_curve ] = PSO(SearchAgents, Max_iterations,lb,ub,dim,fobj);
display(['The best optimal value of the objective funciton found by PSO  for ' [num2str(number)],'  is : ', num2str(fMin)]);
fprintf ('Best solution obtained by PSO: %s\n', num2str(bestX,'%e  '));


%% 调用高斯变异的PSO
[Best_score,Best_pos,GPSO_curve]=GPSO(SearchAgents,Max_iterations,lb,ub,dim,fobj);  % Calculating the solution of the given problem using GPSO
display(['The best optimal value of the objective funciton found by GPSO  for ' [num2str(number)],'  is : ', num2str(Best_score)]);
fprintf ('Best solution obtained by GPSO: %s\n', num2str(Best_pos,'%e  '));


%% 调用t分布扰动的PSO算法
[Alpha_score,Alpha_pos,t_PSO_Convergence_curve]=t_PSO(SearchAgents,Max_iterations,lb,ub,dim,fobj);
display(['The best optimal value of the objective funciton found by t_PSO  for ' [num2str(number)],'  is : ', num2str(Alpha_score)]);
fprintf ('Best solution obtained by t_PSO: %s\n', num2str(Alpha_pos,'%e  '));


%% 调用自适应t分布扰动的PSO算法
[Alpha_score,Alpha_pos,self_adaption_t_PSO_Convergence_curve]=self_adaption_t_PSO(SearchAgents,Max_iterations,lb,ub,dim,fobj);
display(['The best optimal value of the objective funciton found by self_adaption_t_PSO  for ' [num2str(number)],'  is : ', num2str(Alpha_score)]);
fprintf ('Best solution obtained by self_adaption_t_PSO: %s\n', num2str(Alpha_pos,'%e  '));
%% 调用柯西变异扰动的PSO算法
[Alpha_score,Alpha_pos,CPSO_Convergence_curve]=CPSO(SearchAgents,Max_iterations,lb,ub,dim,fobj);
display(['The best optimal value of the objective funciton found by CPSO  for ' [num2str(number)],'  is : ', num2str(Alpha_score)]);
fprintf ('Best solution obtained by CPSO: %s\n', num2str(Alpha_pos,'%e  '));
%% 调用差分变异扰动的PSO算法
[Alpha_score,Alpha_pos,DE_PSO_Convergence_curve]=DE_PSO(SearchAgents,Max_iterations,lb,ub,dim,fobj);
display(['The best optimal value of the objective funciton found by DE_PSO  for ' [num2str(number)],'  is : ', num2str(Alpha_score)]);
fprintf ('Best solution obtained by DE_PSO: %s\n', num2str(Alpha_pos,'%e  '));
 %% Figure
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),PSO_Convergence_curve(k),'b-^','linewidth',1);
    hold on
    semilogy(iter(k),GPSO_curve(k),'m-*','linewidth',1);
    hold on
    semilogy(iter(k),t_PSO_Convergence_curve(k),'r->','linewidth',1);
    hold on
    semilogy(iter(k),self_adaption_t_PSO_Convergence_curve(k),'k-p','linewidth',1);
    hold on
    semilogy(iter(k),CPSO_Convergence_curve(k),'g-v','linewidth',1);
    hold on
    semilogy(iter(k),DE_PSO_Convergence_curve(k),'y-+','linewidth',1);


else
    plot(iter(k),PSO_Convergence_curve(k),'b-^','linewidth',1);
    hold on
    plot(iter(k),GPSO_curve(k),'m-*','linewidth',1);
    hold on
    plot(iter(k),t_PSO_Convergence_curve(k),'r->','linewidth',1);
    hold on
    plot(iter(k),self_adaption_t_PSO_Convergence_curve(k),'k-p','linewidth',1);
    hold on
    plot(iter(k),CPSO_Convergence_curve(k),'g-v','linewidth',1);
    hold on
    plot(iter(k),DE_PSO_Convergence_curve(k),'y-+','linewidth',1);
end
grid on;
title('收敛曲线')
xlabel('迭代次数');
ylabel('适应度值');
box on
legend('PSO','GPSO','t-PSO','self-adaption_t-PSO','CPSO','DE-PSO')
set (gcf,'position', [300,300,800,330])

代码目录

bdadf7ce5a90c4bfa17d325c4be80e29.png

直接运行MAIN.m脚本文件即可!

点击下方卡片获取更多代码!

往期独家原创优秀算法:

独家原创!改进蜣螂优化算法,效果极好!三大经典测试集表现均为最佳!精品力荐!
融合鱼鹰和柯西变异的麻雀优化算法,效果好的起飞!改进麻雀,力荐!
多策略改进蜣螂优化--螺旋搜索+最优值引导+反向学习策略
融合柯西变异和自适应莱维飞行的布谷鸟优化算法,改进布谷鸟,MATLAB代码
融合蝴蝶搜索的麻雀优化算法,你见过吗?附MATLAB代码‍
改进蜣螂优化--采用莱维飞行和三角形游走策略‍‍
CEC2005/2017/2019/2021/2022函数集智能优化算法对比实验常用指标一键导出为EXCEL,一文全部搞定!

后续会不定时更新哦~

柯西高斯变异算法是一种常用优化算法,其主要思想是通过将个体间的差异向高斯分布的随机扰动转化,从而实现种群的更新和进化。MATLAB是一种常用的科学计算软件,可以方便地实现柯西高斯变异算法。 下面是一个简单的柯西高斯变异MATLAB代码示例: ```matlab function [x,fval]=cmaes(funfcn,x0,sigma,maxiter,tol) % 输入:funfcn目标函数句柄,x0初始解,sigma初始标准差,maxiter最大迭代次数,tol停止条件 % 输出:x最优解,fval最优解对应的目标函数值 D=length(x0); % 维数 xmean=x0'; % 初始化均值 ps=0; % 累计路径长度 pc=zeros(D,1); % 累计演化路径 C=eye(D); % 协方差矩阵 iter=1; % 迭代次数 while iter<=maxiter % 生成样本集 for k=1:lambda z(:,k)=randn(D,1); % 高斯分布随机数 y(:,k)=xmean+sigma*C*z(:,k); % 样本生成 f(k)=feval(funfcn,y(:,k)); % 计算目标函数值 end % 更新均值和协方差矩阵 [f,idx]=sort(f); % 排序 xmean=xmean+(y(:,idx(1))-xmean)/mu; % 更新均值 ps=(1-cs)*ps+sqrt(cs*(2-cs)*mueff)*(C*z(:,idx(1:mu))*w); % 更新演化路径长度 hsig=norm(ps)/sqrt(1-(1-cs)^(2*iter/lambda))/chiN<D+1.5; % 判断是否需要调整步长 pc=(1-cc)*pc+hsig*sqrt(cc*(2-cc)*mueff)*(xmean-xold)/sigma; % 更新演化路径 C=(1-c1-cmu)*C+c1*(pc*pc'+(1-hsig)*(cc*(2-cc)*C))+cmu*C*(z(:,idx(1:mu))*w)'*(z(:,idx(1:mu))*w); % 更新协方差矩阵 sigma=sigma*exp((norm(pc)/chiN-damps)/sqrt(D)); % 更新标准差 iter=iter+1; % 迭代次数加1 end x=xmean; % 最优解为均值向量 fval=feval(funfcn,x); % 计算最优解对应的目标函数值 end ``` 相关问题: 1. 什么是柯西高斯变异算法? 2. MATLAB中如何实现柯西高斯变异算法? 3. 柯西高斯变异算法有哪些应用场景?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淘个代码_

不想刀我的可以选择爱我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值