opt_minmax=1;%目标优化类型;1最大化、-1最小化
num_ppu=60; %种群规模;个体个数
num_gen=100; %遗传最大代数
num_v=2; %变量个数
len_ch=20; %基因长度
gap=0.9; %代沟
sub=-10; %函数取值下限
up=10; %函数取值的上限
cd_gray=1; %为防止汉明悬崖,使用格雷编码;若不使用,则取值为0
sc_log=0;
trace=zeros(num_gen,2);
fieldd=[rep([len_ch],[1,num_v]);rep([sub;up],[1,num_v]);rep([1-cd_gray;sc_log;1;1],[1,num_v])];
chrom=crtbp(num_ppu,len_ch*num_v);%区域描述器
k_gen=0;
x=bs2rv(chrom,fieldd);
fun_v=fun_mutv(x(:,1),x(:,2));%计算目标函数值
[tx,ty]=meshgrid(-10:.1:10);
mesh(tx,ty,fun_mutv(tx,ty))
xlabel(‘x’)
ylabel(‘y’)
zlabel(‘z’)
title(‘多元函数优化结果’)
holdon
whilek_gen<num_gen
fit_v=ranking(-opt_minmax*fun_v); %计算目标函数适应度
selchrom=select(‘rws’,chrom,fit_v,gap);%使用轮盘赌选择
selchrom=recombin(‘xovsp’,selchrom); %交叉
selchrom=mut(selchrom);%变异
x=bs2rv(selchrom,fieldd);%子代个体翻译
fun_v_sel=fun_mutv(x(:,1),x(:,2));%计算子代个体对应目标函数值
fit_v_sel=ranking(-opt_minmax*fun_v_sel);
[chrom,fun_v]=reins(chrom,selchrom,1,1,opt_minmax*fun_v,opt_minmax*fun_v_sel);%根据目标函数值将子代个体插入新种群
[f,id]=max(fun_v); %寻找当前种群最优解
x=bs2rv(chrom(id,:),fieldd);
f=f*opt_minmax;
fun_v=fun_v*opt_minmax;
plot3(x(1,1),x(1,2),f,’k*’)
hold on
k_gen=k_gen+1;
trace(k_gen,1)=f;
trace(k_gen,2)=mean(fun_v);
end
figure
plot(trace(:,1),’r-*’)
holdon
plot(trace(:,2),’b-o’)
legend(‘各子代种群最优解’,’各子代种群平均值’)
xlabel(‘迭代次数’)
ylabel(‘目标函数优化情况’)
title(‘多元函数优化过程’)
functionmy=fun_mutv(x,y) %多元函数的描述
t1=zeros(size(x));
t2=t1;
fori=1:5
t1=t1+i*sin((i+1)*x+i);
t2=t2+i*cos((i+1)*y+i);
end
my=t1.*t2;
end