数学建模社区-数学中国

标题: 组合优化算法-现代优化算法(四):改进的遗传算法 [打印本页]

作者: 浅夏110    时间: 2020-5-22 15:31
标题: 组合优化算法-现代优化算法(四):改进的遗传算法
无人机航路规划问题实际上是一个组合优化问题,是优化理论中的 NP—hard 问题。 因为其解空间不连续,解邻域表达困难,所以难以用通常的算法求解。遗传算法作为现代优化算法之一[1],其主要特点是对非线性极值问题能以概率 1 跳出局部最优解,找 到全局最优解。而遗传算法这种跳出局部最优寻找全局最优特性都基于算法中的交叉和 变异。在传统遗传算法的结构中,变异操作在交叉操作基础上进行,强调的是交叉作用, 认为变异只是一个生物学背景机制[2]。在具体交叉操作中,人们通常采用断点交叉法 (段交叉)多点交叉与均匀交叉,其中断点交叉是指随机地在基因序列中选择一个断点, 然后交换双亲上断点右端的所有染色体。在变异操作中,变异算子一般是用 Guassian 分 布的随机变异来实现[3,4]。近年来,也有学者尝试用 Cauchy 分布的随机序列来实现变异[5], 希望通过 Cauchy 分布宽大的两翼特性实现更大范围的变异,以利于找到全局最 优解。[6]从理论上分析了采用 Cauchy 分布随机变异进化算法的局部收敛性。[7]进一 步把二者结合起来, 采用两种分布的线性叠加,但仿真结果显示,算法改进效果并不十 分明显。文献[8]将生物进化看成是随机性加上反馈,并指出其中的随机性主要是由系 统的内在因素所引起,而不是由外部环境的随机扰动所造成。而混沌系统在其混沌域中 表现为随机性,它是确定系统内部随机性的反映,不同于外在的随机特性。2 ~! a- Y. r4 |

7 \$ ~. i9 ~: k9 u4 K5 d本文根据以 上特点对基于求解航路规划的遗传算法进行改进,首先将变异操作从交叉操作中分离出 来,使其成为独立的并列于交叉的寻优操作,在具体遗传操作中,混沌与遗传操作联系 在一起,在交叉操作中,以“门当户对”原则进行个体的配对,利用混沌序列确定交叉 点,实行强度最弱的单点交叉,以确保算法收敛精度,削弱和避免寻优抖振问题;在变异操作中,利用混沌序列对染色体中多个基因进行变异,以避免算法早熟。& G. i' L# C7 }( {5 f2 |

/ j/ U4 W% m  g" r# E下面我们研究 1.2 中同样的问题。
; V& s; Z: g2 P3 B3 a4 ]( g: A  k! w' ?5 [5 O& F/ Z
" C/ S/ u  ?6 R1 c; v

- V7 y! `6 \! r& p
0 W. `: h  [  k$ W2 W. D
8 M! p" j; o2 @9 ?: @我方有一个基地,经度和纬度为(70,40)。假设我方飞机的速度为 1000 公里/小时。 我方派一架飞机从基地出发,侦察完敌方所有目标,再返回原来的基地。在敌方每一目 标点的侦察时间不计,求该架飞机所花费的时间(假设我方飞机巡航时间可以充分长)。
4 u! ]/ H. C; ^# o+ }6 D' K
! y! \+ t7 G2 a! G$ [. m3 }+ O( @7 |: N) X! R
9 r) E- ?; D" K* h# ~1 I
2)我方有三个基地,经度、纬度分别为(70,40),(72,45),(68,48)。假设我方 所有无人侦察机的速度都为 1000 公里/小时。三个基地各派出一架飞机侦察敌方目标, 怎样划分任务,才能使时间最短,且任务比较均衡。
7 }, Y/ S1 r, y; @; s/ b5 ?2 l3 [. @( J
2 模型及算法
# r- p7 Q0 D0 |- z- r' ~与标准的遗传算法相比,我们做了如下的两点改进。
' a3 Y6 O& J& e0 c+ y# [# G% g6 f/ e
(1)交叉操作
% y4 k' z" N& k2 `6 C: K5 v+ t9 k- @8 g8 S

1 v  q- p  U: N% J$ P) u$ X8 @% V+ |9 g: x- @5 N- n0 C' M/ X
( z3 M5 C2 x5 O  F; d6 G$ k

7 }/ e6 m5 Q6 y2 r& J7 }2 h9 \很明显这种单点交叉对原来的解改动很小,这可以削弱避免遗传算法在组合优化应用中 产生的寻优抖振问题,可以提高算法收敛精度。
5 J" j' ]" r; N- T8 `! C' D% d! ?8 C
(2)变异操作& v& {; o% D5 L2 f, J" u! X$ n
变异也是实现群体多样性的一种手段,是跳出局部最优,全局寻优的重要保证。在 本文具体变异算子设计如下,首先根据给定的变异率(本文选为 0.02),随机地取两个在 2 到 101 之间的整数,对这两个数对应位置的基因进行变异,具体变异以当前的基因值 为初值利用混沌序列 x(n +1) = 4x(n)(1− x(n)) 进行适当次数的迭代,得到变异后新的基因 值,从而得到新的染色体。
+ P3 i" `) m4 L% j6 y
5 k1 A) i) l. q3 仿真结果对比及算法性能分析3 }/ S$ M6 ]' U/ h2 X
计算的 MATLAB 程序如下:+ u9 I9 m1 y6 u8 L4 O. i* E, H0 v

) G1 D* w' I: `8 stic
3 L! n: H/ ~* {+ M0 q' y& c* E4 g& mclc,clear
. a+ m7 G) C/ @, T2 C8 W0 @load sj.txt %加载敌方 100 个目标的数据% ^5 G. n2 e0 L9 k6 a
x=sj(:,1:2:8);x=x(;
  x) Q0 A5 d% T9 Q3 W0 Sy=sj(:,2:2:8);y=y(;$ g) c1 k9 c2 P1 T( B1 k
sj=[x y];" c2 G* L5 Q: V
d1=[70,40];: A4 {4 G" }$ A7 @9 M6 U/ j
sj=[d1;sj;d1];
( ?! H8 I9 o0 U4 }%距离矩阵 d8 q) f0 p2 v! q7 E. r( c
sj=sj*pi/180;
+ n) i% q: |, ~9 h- Jd=zeros(102);" j- K2 L6 x/ M9 S2 L. Z
for i=1:1017 P% n+ t  g8 P
    for j=i+1:102
. E  x8 A- U+ A  C4 S9 o        temp=cos(sj(i,1)-sj(j,1))*cos(sj(i,2))*cos(sj(j,2))+sin(sj(i,2))*sin(sj(j,2));
" f  _7 L( _4 o2 z' [3 m        d(i,j)=6370*acos(temp);1 D' ^7 L3 ~& f" }& I6 s
    end9 k; J, t: H) M4 \# A4 g0 e
end# x8 G6 @* J: w8 \9 D/ k
d=d+d';L=102;w=50;dai=100;
9 e. P, x3 ?4 Y) n%通过改良圈算法选取优良父代 A
' I6 P' H9 N% f& a6 Pfor k=1:w, O6 l! |1 M# K3 ^+ U* G
    c=randperm(100);
4 }. ?# F3 b2 y7 i    c1=[1,c+1,102]; : `0 P. ~' v! y9 Y" _
    flag=1;7 i( b  L: A# U$ M4 j
    while flag>0
! ]! _$ y" B5 p! y& ^        flag=0;
5 |# l- }- f) t$ _7 p' k9 x' g* u        for m=1-3, L: t/ }8 n& o7 B9 l+ `
            for n=m+2-1
$ k7 s& M8 S/ q. M% Y                if d(c1(m),c1(n))+d(c1(m+1),c1(n+1))<d(c1(m),c1(m+1))+d(c1(n),c1(n+1))  f) n% p8 F$ U1 L! J
                    flag=1;7 j' |/ r- C/ V8 w& V! Y# @
                    c1(m+1:n)=c1(n:-1:m+1);
6 w9 \) }4 T% I0 @/ I                end
! t' f7 b. L  v  v5 n3 \            end; s' l. \8 S/ F% G
        end
: v: A2 J! n( g  O     end
- e4 _4 @0 k& W/ Q  d4 k. d2 w, _    J(k,c1)=1:102;- D  f( p9 b8 \
end
2 U9 _' L0 I% Q% `( W2 Z3 VJ=J/102;( [' X3 J( c9 j! X  }
J(:,1)=0;J(:,102)=1;) d# H# ^: q' R$ N
rand('state',sum(clock));* [* @" C7 ^1 I. y; w
%遗传算法实现过程3 u' X& e" ^$ d! M, X/ s
A=J;" W; i) ]) o3 y+ J  v9 C8 Y
for k=1:dai %产生 0~1 间随机数列进行编码
! j$ @7 x7 r) Q( s) R& [    B=A;
! Y$ z4 d+ j7 S: a# K2 B2 |- w %交配产生子代 B
3 Z& C. e2 U8 ^( u- {    for i=1:2:w5 L% M$ A8 w$ w) `: _5 o
        ch0=rand;ch(1)=4*ch0*(1-ch0);
8 p0 U6 q% W/ o+ h5 \# ~        for j=2:502 C- F# G' E9 c' u
            ch(j)=4*ch(j-1)*(1-ch(j-1));" a$ i3 A3 Z7 F$ |  T0 Q) \
        end; z: R( W. f; y2 U" C: l& ^: u6 T
        ch=2+floor(100*ch);
7 w& U5 N0 `/ y; V4 s        temp=B(i,ch);
0 G$ G/ E& S+ W- N) d$ p        B(i,ch)=B(i+1,ch);5 E8 X: w5 U% ^
        B(i+1,ch)=temp;+ c  L" O% V% I0 |! ]
    end& k& }3 b! }0 ?( }4 I
%变异产生子代 C6 u* J# I$ D  F* S6 O
    by=find(rand(1,w)<0.1);
7 M' X1 L# }6 r! d8 q% C. l2 N    if length(by)==00 G( u7 z) Q2 U. b% u2 L  R
        by=floor(w*rand(1))+1;    ( B8 |/ Z0 g/ c7 F" i, H0 A
    end
9 p% X% \7 V/ L$ e    C=A(by,;
  @" J( |, h" u- o    L3=length(by);
4 t/ y; Q# P$ t2 s  ^2 D* e& @    for j=13
! w1 C# `' }! Q( D8 P     bw=2+floor(100*rand(1,3));4 F+ z* G4 O9 U1 Y, G
     bw=sort(bw);
* B) P0 g$ N) A# R* s1 ~, i% M     C(j,=C(j,[1:bw(1)-1,bw(2)+1:bw(3),bw(1):bw(2),bw(3)+1:102]); ; Z/ w/ n1 g4 I0 G# a3 C
end/ G4 J$ _' J' L8 c6 \* C
    G=[A;B;C];
5 x1 p" G6 m- w  o+ [! H- P    TL=size(G,1);
5 ]- C/ @  Q: b* e %在父代和子代中选择优良品种作为新的父代
# ]$ C+ e4 R9 H* C    [dd,IX]=sort(G,2);temp(1:TL)=0;9 t! W8 s7 r( Y; o$ Y, A
    for j=1:TL
$ d' d& x3 Z" Q! F        for i=1:101
: a5 E: h: f+ z3 w# A' J            temp(j)=temp(j)+d(IX(j,i),IX(j,i+1));
" x# L: |, R5 P0 Q        end
3 X& i6 F. P/ V! l    end
/ s: {0 \+ u" e; n. f    [DZ,IZ]=sort(temp);% h/ H9 |4 Y+ A2 P3 m) J0 H
    A=G(IZ(1:w),;
, P: c1 M+ d6 h$ _4 {2 xend
, o2 x9 F, W/ c# m" A* }path=IX(IZ(1),
9 o9 Y) W7 E$ G3 `; j) mlong=DZ(1)
4 I3 n1 a2 i2 u. J6 Htoc
- N6 `: [! Z8 _9 R5 ~" t% c7 }/ W, F/ G: h7 j8 ]; F* G
! x, F% Q$ I0 c, Q7 c
在仿真试验中,我们对文中航路规划问题分别利用断点交叉和换位变异结合的遗传 算法,多点交叉和移位变异结合的遗传算法[10]和文中提出的改进算法进行求解比较。 表 1 是各种算法种群规模( M = 50)和迭代次数(G = 100 )都相同时连续 20 次求 解的平均值(公里),算法平均运算时间(秒)。
; M; L3 ?% }/ k' d) \$ A: M& B3 q. v; M3 t8 P+ t4 \& u  ?$ S% r
- h/ _( j( I8 x- F, H* K& X4 j
$ b3 C& D: Z2 G! W5 P( d

- r, r  I( h) c. {, N4 b$ O本文从算法结构到具体的遗传操作都进行了改进,其中变异操作从交叉操作中分离 出来,使得遗传算法也可以通过并行计算实现,提高算法实现效率。其次改进后的算法, 分别采用变化强度不同的交叉操作和变异操作,其中交叉操作采用强度最弱的单点交 叉,保证了算法收敛精度,削弱和避免算法因交叉强度大而产生的寻优抖振问题。当然 单一的单点交叉很容易使算法早熟,文中采用较大强度的多个基因变异正好解决早熟问 题。从仿真结果可以看到改进后的算法效果较为明显。" C0 C- [- ]7 N! a

4 h! a  A* f( c* G3 T0 f, w& `3 i9 v$ Q& }9 p( W* B  ^& m9 u
6 {5 Z8 }& L% C$ Q& y( r1 A
————————————————" |! }7 {) c2 o9 ?  M! _4 y" y, w
版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。6 [6 M9 n9 v0 u( p7 M# ]& ~! a
原文链接:https://blog.csdn.net/qq_29831163/article/details/89672986
4 u: R. u' Y# t: _
% m; D' ~1 T, Y2 ^% h: E2 S% O$ Z5 {- i





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