- 积分
- 0
- 注册时间
- 2009-9-27
- 仿真币
-
- 最后登录
- 1970-1-1
|
本帖最后由 caoyuanlang 于 2011-7-20 14:19 编辑
%****************************************************
%问题描述
%min f(x)=-2πx-∑sin(2^(i+1)πx),i=0,1,...,10
%s.t. x∈[0,1]
%****************************************************
%枚举法获得最优值f_min及最优解x_best
% x=0:0.0001:1;
% for i=1:length(x)
% f(i)=-2*pi*x(i);
% for j=0:10
% f(i)=f(i)-sin(2^(j+1)*pi*x(i));
% end
% end
% plot(x,f);
% [f_min,index]=min(f);
% x_best=x(index);
%***************************************************
clc
clear
tic
Nmax=40;%种群规模
Gmax=100;%迭代终止次数
sigma=0.9;%变量服从的正态分别的标准差
x=rand(1,Nmax);
for i=1:Nmax
f(i)=-2*pi*x(i);
for j=0:10
f(i)=f(i)-sin(2^(j+1)*pi*x(i));
end
end
[f_min,index_min]=min(f);
t=0;
temp=f_min;
flag=0;%标记是否是第一次计算
flag_stop=0;
while flag_stop<Gmax
if abs(f_min-flag*temp)<1e5
flag_stop=flag_stop+1;
end
flag=1;
temp=f_min;
E(t+1)=f_min;
%压缩因子
if t<=Gmax/2
a=1;
else
a=0.03;
end
for i=1:Nmax
x(Nmax+i)=x(i)+a*normrnd(0,sigma);
while x(Nmax+i)<0||x(Nmax+i)>1
x(Nmax+i)=x(i)+a*normrnd(0,sigma);
end
end
%计算新个体的函数值
for i=1:Nmax
f(Nmax+i)=-2*pi*x(Nmax+i);
for j=0:10
f(Nmax+i)=f(Nmax+i)-sin(2^(j+1)*pi*x(Nmax+i));
end
end
[f_sort,index]=sort(f);
for i=1:Nmax
xx(i)=x(index(i));
end
f_min=f_sort(1);
x_best=x(index(1));
x(1:Nmax)=xx;
f(1:Nmax)=f_sort(1:Nmax);
t=t+1;
end
toc
plot(E,'*-')
grid on |
|