我是靠谱客的博主 无私煎饼,最近开发中收集的这篇文章主要介绍差分进化算法例题(题目和解答以及Matlab代码),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目:计算函数f(x)= ∑ i = 1 n x i 2 sum_{i=1}^{n}x_i^2 i=1nxi2(-20≤ x i x_i xi≤20)的最小值,其中个体x的维数n=10。
解答:优化结束后,根据所得的图可知,优化后的结果为x=[0.0007 -0.0010 0.0014 -0.0007 0.0015 -0.0005 -0.0001 -0.0008 -0.0019 -0.0011],

clear all;	%清除所有变量
close all;	%清图
clc;	%清屏
NP=50;
%种群数量
D=10;
%变量的维数
G=200;
%最大进化代数
F0=0.4; %初始变异算子
CR=0.1; %交叉算子
Xs=20;
%上限
Xx=-20; %下限
yz=10^-6;
%阈值
%赋初值
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)=func1(x(:,m));
end
trace(1)=min(Ob);
%差分进化循环
for gen=1:G
%变异操作
自适应变异算子
lamda=exp(1-G/(G+1-gen));
F=F0*2^(lamda);
%r1,r2,r3,m互不相同
for m=1:NP
r1=rand(1,1,[1,NP]);
while(r1==m)
r1=randi(1,1,[1,NP]);
end
r2=randi(1,1,[1,NP]);
while(r2==m)|(r2==r1)
r2=randi(1,1,[1,NP]);
end
r3=randi(1,1,[1,NP]);
while(r3==m)|(r3==r1)|(r3==r2)
r3=randi(1,1,[1,NP]);
end
v(:,m)=x(:,r1)+F*(x(:,r2)-x(:,r3));
end
%交叉操作
r=randi(1,1,[1,D]);
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)>Xs)
u(n,m)=rand*(Xs-Xx)+Xx;
end
end
end
%选择操作
for m=1:NP
Ob1(m)=func1(u(:,m));
end
for m=1:NP
if Ob1(m)<Ob(m)
x(:,m)=u(:,m);
end
end
for m=1:NP
Ob(m)=func1(x(:,m));
end
trace(gen+1)=min(Ob);
if min(Ob)<yz
break
end
end
[SortOb,Index]=sort(Ob);
x=x(:,Index);
X=x(:,1);
%最优变量
Y=min(Ob);
%最优值
%画图
figure
plot(trace);
xlabel('迭代次数');
ylabel('目标函数值');
title('DE 目标函数曲线');
%适应度函数
function result=func1(x);
summ=sum(x.^2);
result=summ;
end

最后

以上就是无私煎饼为你收集整理的差分进化算法例题(题目和解答以及Matlab代码)的全部内容,希望文章能够帮你解决差分进化算法例题(题目和解答以及Matlab代码)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部