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 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