海贼骑士9235 发表于 2016-5-19 20:18

多目标优化

在多目标优化时,优化结果没有同时让目标满足要求,下面是我的主代码和所得结果,请大神帮忙解答:
global u;
%贝塞尔函数求根
%设定模式数为20,对于TE模式需要求得一阶贝塞尔函数的前20个非零根
maxs=20;%要求的贝塞尔函数的非零根个数
incr=4.0;
u(1,1)=fzero(@(x)besselj(1,x),3.9);%一阶贝塞尔函数的第一个解(在3.9附近)
for s=2:maxs
    u(1,s)=fzero(@(x)besselj(1,x),u(1,s-1)+incr);%在第一个解加4附近求零阶贝塞尔函数的第二个及以上的解
end
NIND=40;      %个体数目40
MAXGEN=100;   %最大遗传代数100
NVAR=10;       %变量个数为10,前五个为半径,后五个位直波导长度
PRECI=20;      %变量的二进制位数
GGAP=0.9;      %代沟
trace1=[];
trace2=[];   %性能跟踪器,1、2分别为第一目标函数、第二目标函数的跟踪
%建立区域描述器
FieldD=,);;rep(,)];
Chrom=crtbp(NIND,NVAR*PRECI);        %初始化种群
v=bs2rv(Chrom,FieldD)/1000;               %初始种群十进制转换(单位由mm转换为m)
gen=1;                               %代计数器
%遗传开始
while gen<MAXGEN
    =size(Chrom);
    M=fix(NIND/2);
    ObjV1=Highpass(v(1:M,:));         %分组后高通目标函数值(单位m)
    FitnV1=ranking(-ObjV1);           %分配高通适应度值(求最大值)
    SelCh1=select('sus', Chrom(1:M,:),FitnV1,GGAP);      %调用随机遍历抽样函数sus对第一组种群基于适应度值进行选择
    ObjV2=Lowpass(v(M+1:NIND,:));     %分组后低通目标函数值(单位m)
    FitnV2=ranking(ObjV2);            %分配低通适应度值(求最小值)
    SelCh2=select('sus', Chrom((M+1):NIND,:),FitnV2,GGAP);      %调用随机遍历抽样函数sus对第二组种群基于适应度值进行选择
    SelCh=;            %将两组选择后种群进行合并
    SelCh=recombin('xovsp',SelCh,0.7);%以0.7的交叉概率进行单点交叉重组
    Chrom=mut(SelCh);                 %变异
    %Chrom=reins(Chrom,SelCh);         %随机均匀选择重插入
    v=bs2rv(Chrom,FieldD)/1000;            %将进化后种群十进制转换(单位由mm转换为m)
    trace1(gen,1)=max(Highpass(v));
    trace1(gen,2)=sum(Highpass(v))/length(Highpass(v));
    trace2(gen,1)=min(Lowpass(v));
    trace2(gen,2)=sum(Lowpass(v))/length(Lowpass(v));
    gen=gen+1;
end
figure(1);clf;
plot(trace1(:,1));hold on;plot(trace1(:,2),'-.');
plot(trace1(:,1),'.');plot(trace1(:,2),'.');grid;
legend('解的变化','种群均值的变化')
xlabel('迭代次数');ylabel('高通目标函数值');
figure(2);clf;
plot(trace2(:,1));hold on;
plot(trace2(:,2),'-.');
plot(trace2(:,1),'.');
plot(trace2(:,2),'.');grid;
legend('解的变化','种群均值的变化')
xlabel('迭代次数');ylabel('低通目标函数值');
figure(3);clf;
plot(Highpass(v));hold on;
plot(Lowpass(v),'r-.');grid;

页: [1]
查看完整版本: 多目标优化