数学建模社区-数学中国

标题: 多目标优化 [打印本页]

作者: 海贼骑士9235    时间: 2016-5-19 20:18
标题: 多目标优化
在多目标优化时,优化结果没有同时让目标满足要求,下面是我的主代码和所得结果,请大神帮忙解答:
. x2 u( {& L/ E1 R) b- fglobal u;& }# `: O5 t' y
%贝塞尔函数求根2 R4 ]3 w5 x8 V
%设定模式数为20,对于TE模式需要求得一阶贝塞尔函数的前20个非零根2 S% \1 _" r- K/ |2 I! [
maxs=20;%要求的贝塞尔函数的非零根个数( e* v/ F' ~1 q) a: c
incr=4.0;
' C7 g, }. m# f" l% d7 \6 hu(1,1)=fzero(@(x)besselj(1,x),3.9);%一阶贝塞尔函数的第一个解(在3.9附近), w* d: q: z+ S2 y7 u
for s=2:maxs8 I) n" r+ k+ s$ C" _$ Q/ F' L
    u(1,s)=fzero(@(x)besselj(1,x),u(1,s-1)+incr);%在第一个解加4附近求零阶贝塞尔函数的第二个及以上的解5 }$ _+ |# Z. P9 K* U
end
/ y3 _5 H* i- l+ |2 E: U; uNIND=40;      %个体数目40
' f/ K* V- u, U0 s, G, fMAXGEN=100;   %最大遗传代数100
/ D& ]3 L! y. W* ^6 t- t, QNVAR=10;       %变量个数为10,前五个为半径,后五个位直波导长度
* K' `& ^9 G# y& cPRECI=20;      %变量的二进制位数
0 f! b; C# i( X, X( x% u7 iGGAP=0.9;      %代沟' w+ H  e: o( H( _: T
trace1=[];! t" i  X8 V$ K2 X5 Q
trace2=[];   %性能跟踪器,1、2分别为第一目标函数、第二目标函数的跟踪# Y6 A6 S8 ^9 u$ s# v4 s
%建立区域描述器. L& R9 i- X: i: J- C& y
FieldD=[rep([PRECI],[1,NVAR]);[20,20,20,20,20,10,10,10,10,10;50,50,50,50,50,100,100,100,100,100];rep([1;0;1;1],[1,NVAR])];
  ^2 f( ~5 R0 h; y, sChrom=crtbp(NIND,NVAR*PRECI);        %初始化种群
" Z) G% D5 u6 t4 N. W$ f# Kv=bs2rv(Chrom,FieldD)/1000;               %初始种群十进制转换(单位由mm转换为m)
, i3 m& {4 r+ p0 x  zgen=1;                               %代计数器
' _, K6 Y0 |; U$ @2 G%遗传开始6 @  \( w& s9 h* {7 }9 t( @, F9 z
while gen<MAXGEN
1 D3 Q+ }! A( @    [NIND,N]=size(Chrom);, O$ R# K3 N' h  g
    M=fix(NIND/2);
5 A8 W' |3 ~5 |3 E6 a* L" a" q( ^    ObjV1=Highpass(v(1:M,);         %分组后高通目标函数值(单位m). W  I2 |& t2 h( S: Q
    FitnV1=ranking(-ObjV1);           %分配高通适应度值(求最大值)
8 R. Q% }! Q( Z2 a) N- ^2 R# K# z    SelCh1=select('sus', Chrom(1:M,,FitnV1,GGAP);      %调用随机遍历抽样函数sus对第一组种群基于适应度值进行选择
# |& X; M! H% k4 c    ObjV2=Lowpass(v(M+1:NIND,);     %分组后低通目标函数值(单位m)7 X2 ]; ^; z- e9 b3 m5 ?. Q
    FitnV2=ranking(ObjV2);            %分配低通适应度值(求最小值)8 |& Y6 ?: L2 H+ f% a# i
    SelCh2=select('sus', Chrom((M+1):NIND,,FitnV2,GGAP);      %调用随机遍历抽样函数sus对第二组种群基于适应度值进行选择( _1 b- S; k* f' G
    SelCh=[SelCh1;SelCh2];            %将两组选择后种群进行合并% T3 ~( B- D7 r9 m
    SelCh=recombin('xovsp',SelCh,0.7);%以0.7的交叉概率进行单点交叉重组* R# m1 b; L! z& t" U" n; v9 V7 q& Y
    Chrom=mut(SelCh);                 %变异
( b7 R: v5 d. ^- X) O    %Chrom=reins(Chrom,SelCh);         %随机均匀选择重插入
3 _6 r) Q5 w  G) O5 d    v=bs2rv(Chrom,FieldD)/1000;            %将进化后种群十进制转换(单位由mm转换为m)3 e8 w- o3 \, r1 J6 q" T8 U& X
    trace1(gen,1)=max(Highpass(v));
, W0 L$ o2 ]9 A: j7 N    trace1(gen,2)=sum(Highpass(v))/length(Highpass(v));; c" C' q! u+ ^5 z5 f# C
    trace2(gen,1)=min(Lowpass(v));
9 t  M9 ]1 [$ p    trace2(gen,2)=sum(Lowpass(v))/length(Lowpass(v));
6 @3 Z* d$ q4 ~& |! S    gen=gen+1;+ J4 y+ p# l- I; G2 O
end+ M3 D7 L5 P) e3 A3 r0 N0 U7 I
figure(1);clf;- ~* a/ j; l% W# ^; t, L" m, \6 @
plot(trace1(:,1));hold on;plot(trace1(:,2),'-.');
3 U! ~2 V7 l& A/ {  P4 h4 |plot(trace1(:,1),'.');plot(trace1(:,2),'.');grid;1 c" A/ o# Z% W
legend('解的变化','种群均值的变化')
8 `- \9 R& ^; }" D/ \7 j* g' @xlabel('迭代次数');ylabel('高通目标函数值');
1 Q# C3 [6 J+ Y; s. D: S1 \figure(2);clf;
4 d% I. F2 ~+ D: Q* zplot(trace2(:,1));hold on;
# p" u  e& _2 T' m0 \( Kplot(trace2(:,2),'-.');0 m+ x$ U$ V# u4 Z- H
plot(trace2(:,1),'.');
* U, N+ l+ p: z: v/ kplot(trace2(:,2),'.');grid;
8 n$ J8 c1 i+ b, z) j( y4 zlegend('解的变化','种群均值的变化')
5 x* j8 \' o" ]+ s& ]+ `4 _xlabel('迭代次数');ylabel('低通目标函数值');1 T% c5 P6 V, S
figure(3);clf;
- W: Y3 G: u7 j$ t2 |plot(Highpass(v));hold on;1 z9 ?) r0 u6 m' e* _8 l
plot(Lowpass(v),'r-.');grid;: g7 m+ V# k. L( M" n

/ h5 o" G/ m: F# W

1.jpg (63.87 KB, 下载次数: 1017)

1.jpg

2.jpg (67.12 KB, 下载次数: 981)

2.jpg

3.jpg (47.82 KB, 下载次数: 952)

3.jpg






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5