差分进化算法
来源:互联网 发布:数值最优化 pdf 编辑:程序博客网 时间:2024/06/08 11:09
差分进化算法(DE)是一种新兴的进化计算技术,它是由 Storn 等人于1995年提出,其最初的设想是用于解决切比雪夫多项式问题,后来成为解决复杂优化问题的有效技术。
差分进化算法的操作如下:
(1)初始化
(2)变异
(3)交叉
(4)选择
(5)边界条件处理
差分进化算法流程图:
matlab仿真实例:
求函数f(x,y)=3cos(xy)+x+y的最小值,其中x的取值范围为[-4,4], y的取值范围为[-4,4](多个局部极值的函数)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%差分进化算法求函数极值%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear all;close all;clc;NP=20; %种群数量D=2; %变量的维数G=100; %最大进化代数F=0.5; %变异算子CR=0.1; %交叉算子Xs=4; %上限Xx=-4; %下限%%%%%%%%%%%%%%%%%%%%%%%%%%%%%赋初值%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%x=zeros(D,NP); %初始种群v=zeros(D,NP); %变异种群u=zeros(D,NP); %选择种群x=rand(D,NP)*(Xs-Xx)+Xx; %赋初值%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%计算目标函数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%for m=1:NP Ob(m)=func2(x(:,m));endtrace(1)=min(Ob);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%差分进化循环%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%for gen=1:G %%%%%%%%%%%%%%%%%%%%%%变异操作%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%r1,r2,r3和m互不相同%%%%%%%%%%%%%%%%%%%%%% for m=1:NP r1=randint(1,1,[1,NP]); while(r1==m) r1=randint(1,1,[1,NP]); end r2=randint(1,1,[1,NP]); while(r2==m)|(r2==r1) r2=randint(1,1,[1,NP]); end r3=randint(1,1,[1,NP]); while((r3==m)|(r3==r1)|(r3==r2)) r3=randint(1,1,[1,NP]); end v(:,m)=x(:,r1)+F*(x(:,r2)-x(:,r3)); end %%%%%%%%%%%%%%%%%%%%%%交叉操作%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% r=randint(1,1,[1,NP]); for n=1:D cr=rand(1); if(cr<CR)|(n==r) u(n,:)=v(n,:); else u(n,:)=x(n,:); end end %%%%%%%%%%%%%%%%%%%%%%边界条件的处理%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%边界吸收%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for n=1:D for m=1:NP if u(n,m)<Xx u(n,m)=Xx; end if u(n,m)>Xs u(n,m)=Xs; end end end %%%%%%%%%%%%%%%%%%%%%%选择操作%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for m=1:NP Ob1(m)=func2(u(:,m)); end for m=1:NP if Ob1(m)<Ob(m) %小于先前的目标值 x(:,m)=u(:,m); end end for m=1:NP Ob(m)=func2(x(:,m)); end trace(gen+1)=min(Ob);end [SortOb,Index]=sort(Ob); x=x(:,Index); X=x(:,1); %最优变量 Y=min(Ob); %最优值 disp('最优变量'); disp(X); disp('最优值'); disp(Y); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%画图%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% figure plot(trace); %plot(X,Y,'-ro'); xlabel('迭代次数'); ylabel('目标函数值'); title('DE目标函数曲线');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%适应度函数计算%%%%%%%%%%%%%%%%%%%%%%%%%%%% function value=func2(x) value=3*cos(x(1)*x(2))+x(1)+x(2); end运行效果如下:
0 0
- 差分进化算法
- 差分进化算法
- 差分进化算法
- 差分进化算法
- 差分进化算法
- 差分进化算法DE
- 差分进化算法DE
- 智能算法之微分进化算法(差分进化算法)
- 差分进化算法(Differential Evolution)
- 差分进化算法(Differential Evolution)
- 差分进化算法(Differential Evolution)
- 优化算法——差分进化算法(DE)
- 遗传算法与差分进化算法总结比较
- 优化算法——差分进化算法(DE)
- 【DE算法】差分进化算法原理及python代码
- 差分进化算法(Differential Evolution) JAVA代码样例
- 带约束条件的差分进化算法(python实现)
- 差分进化g05测试代码
- 数据库连接池druid wallfilter配置
- 如何做好基层技术管理工作?
- C#索引器
- 数据库基础第二天
- 成功管理计划(Managing Successful Programmes, MSP)
- 差分进化算法
- 三角形图标绘制(对话框中三角形)
- (转)深入理解JavaScript系列(3):全面解析Module模式
- Git push remote rejected {change ### closed}
- “这个世界最可怕的不是很多人比你牛,而是比你牛的人比你还努力。”
- C/C++编写教务管理系统
- tomcat 插件式 热部署
- iOS APPDelegate中方法详解
- redis简单的主从关系设置