' U0 x S2 H6 W a8 t: H' a6 c/ d0 g r! n: J
0 E0 ^8 s4 _6 v" T5 d4 D: N
我方有一个基地,经度和纬度为(70,40)。假设我方飞机的速度为 1000 公里/小时。 我方派一架飞机从基地出发,侦察完敌方所有目标,再返回原来的基地。在敌方每一目 标点的侦察时间不计,求该架飞机所花费的时间(假设我方飞机巡航时间可以充分长)。" z( G& Z& T5 k! ]: A; B
5 c2 @- U6 o( ^ I% B! v6 W5 d u# d- R+ r
/ F, R6 b) p* r3 `- _. j
2)我方有三个基地,经度、纬度分别为(70,40),(72,45),(68,48)。假设我方 所有无人侦察机的速度都为 1000 公里/小时。三个基地各派出一架飞机侦察敌方目标, 怎样划分任务,才能使时间最短,且任务比较均衡。 - l. z$ j" Q) v3 T3 c9 R1 A; m: g' }9 T* P. L
2 模型及算法 * R6 ]" }8 a/ \6 j0 A; Z/ b" m与标准的遗传算法相比,我们做了如下的两点改进。8 Z. S0 r/ V' p n
* E+ G( O7 q4 b(1)交叉操作) I0 r6 a7 `$ g4 Z" I2 n0 a
) d" Z( e; E6 V: d( L " Z9 t( v$ H4 C# T1 N0 P/ z- Y' A; [& Q* z, _4 f * z# v( E) Z8 a- H. j _* O+ X& w
' v( j+ g0 l* d
很明显这种单点交叉对原来的解改动很小,这可以削弱避免遗传算法在组合优化应用中 产生的寻优抖振问题,可以提高算法收敛精度。# [# n4 ?' E) Q! {8 W
: J2 M) a/ w; C) h' h# o- J" _(2)变异操作 7 o3 | o. T) r( n# b* `. e变异也是实现群体多样性的一种手段,是跳出局部最优,全局寻优的重要保证。在 本文具体变异算子设计如下,首先根据给定的变异率(本文选为 0.02),随机地取两个在 2 到 101 之间的整数,对这两个数对应位置的基因进行变异,具体变异以当前的基因值 为初值利用混沌序列 x(n +1) = 4x(n)(1− x(n)) 进行适当次数的迭代,得到变异后新的基因 值,从而得到新的染色体。 : y. `" f& s/ u( y i; \/ U/ B x4 v
3 仿真结果对比及算法性能分析. }; J1 w' |" O* {( q( G6 V3 B8 R
计算的 MATLAB 程序如下:+ P; h( ^5 d ~! l1 C
- H0 z! ^3 G9 w: g# ~tic ( G/ W3 ?5 q6 @" v! i) tclc,clear6 O4 P: @3 A, f3 s/ d2 R
load sj.txt %加载敌方 100 个目标的数据! x4 V; e5 U& _/ t7 T
x=sj(:,1:2:8);x=x(; - ]6 S# R( `( t* [7 |# by=sj(:,2:2:8);y=y(;* C1 k* V: B- T$ g3 r" i( z
sj=[x y];! a1 f7 n) j& a9 q7 u. A
d1=[70,40];( T7 {, w9 l* e. e) Q* B6 F5 B
sj=[d1;sj;d1]; + v# i; Y- X; T8 S1 Y%距离矩阵 d 1 ]; n+ Q- O3 T7 B/ ~& \8 z3 Dsj=sj*pi/180; . @. N) Y2 _1 h' e- j6 K8 e/ Rd=zeros(102); & }: I' V' p0 o& Yfor i=1:101. J' ^9 d9 `' L3 z6 @8 Y
for j=i+1:102 5 P* e3 v: z9 R1 j: O9 p temp=cos(sj(i,1)-sj(j,1))*cos(sj(i,2))*cos(sj(j,2))+sin(sj(i,2))*sin(sj(j,2)); [! W M+ v, P) D6 r
d(i,j)=6370*acos(temp); 3 g# H; o m( U+ g1 j, z3 ^ end) m0 \4 Q' k' h7 K0 S+ H4 V
end) z) ]& H- Z& s$ `0 i @% A
d=d+d';L=102;w=50;dai=100;0 h$ N5 C& E6 E3 ?! E
%通过改良圈算法选取优良父代 A% [; w: @$ ?. e- M! R: K
for k=1:w 0 I, ]3 ]) H: e9 P4 E c=randperm(100); " s: c# K2 [9 S$ i8 e+ r6 S c1=[1,c+1,102]; 6 n3 O( {8 f) c flag=1; ; H: k8 C. P/ C6 u& N while flag>0% W( ~0 L1 m" `" N6 Q/ e- T4 \
flag=0; 3 u- T/ j9 r6 u for m=1-3 / W& p' F' J& l) ? for n=m+2-1 6 h6 M9 h: f7 X* R0 K 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))# }' m/ P/ l1 {% Q( ^
flag=1;. D. o- a5 o, q4 {5 `: Z2 H+ D
c1(m+1:n)=c1(n:-1:m+1); $ I2 `0 R5 x) U, x7 b; w end f5 @6 j0 z! ^4 U5 D& u$ r end 5 M9 y- N! w# b' X( w# ^/ G5 f end * U/ A' N' R5 x; K" Q end, m! R+ |/ t5 X* D0 {8 ^+ I# s& T" d
J(k,c1)=1:102; 5 b: j$ W w0 {: s6 w, q; _end% e u/ L U0 u( U) l
J=J/102; 8 \ c/ p. Z& T$ h O0 {J(:,1)=0;J(:,102)=1;5 m: f3 M: s% E4 S" d+ |
rand('state',sum(clock));5 k+ e. k# z1 h: R2 S
%遗传算法实现过程 7 R! t( ?5 Y9 k1 ~" p' ]A=J; 4 N& b: T- u: f# {5 W5 \' h& k+ z+ _# zfor k=1:dai %产生 0~1 间随机数列进行编码 2 q( n8 P! F3 B/ K2 A. ^ B=A; ; p2 ^+ }3 g- y8 N %交配产生子代 B ! @4 l& }' }+ W8 o4 E2 ~. s for i=1:2:w- ?! p: r# ~( V
ch0=rand;ch(1)=4*ch0*(1-ch0);- G* y% ~' u' ^, ]$ b
for j=2:504 n3 ]8 S0 l- n" D- c, G2 x0 e1 G
ch(j)=4*ch(j-1)*(1-ch(j-1));- D; s- L, x; P @8 ~
end5 U0 d% y& V$ u9 p( |
ch=2+floor(100*ch); 5 i' d& `( B9 K% w; U+ ?. X temp=B(i,ch); 2 Q) ~0 `# u$ J) ]* C+ n& q7 o B(i,ch)=B(i+1,ch);: d6 u0 D6 e2 j+ [5 a3 Z
B(i+1,ch)=temp; : A1 `& ^3 [8 s4 \* x% I end r! G! T/ J/ t%变异产生子代 C 0 u. v! h2 l ?, n5 Y$ n6 L by=find(rand(1,w)<0.1);: S! ~; h& F( C8 P* h1 _! S6 r
if length(by)==0 " Z) M- P* U3 }+ `# N1 M by=floor(w*rand(1))+1; 7 e# n# S4 Z0 o( K4 B end 0 E% R& l8 {- P" Y8 B$ X: k5 B C=A(by,;( A5 P0 J) ?. h' U6 r0 o1 _
L3=length(by);7 T. O6 q: O4 X* t% i
for j=13( t; t) T5 r7 p, p" b2 E0 r
bw=2+floor(100*rand(1,3));* G5 z/ R$ ^6 H4 k8 G2 N
bw=sort(bw); 3 l c& T6 z( r; g6 q C(j,=C(j,[1:bw(1)-1,bw(2)+1:bw(3),bw(1):bw(2),bw(3)+1:102]); 1 E5 P2 D0 m% {0 }end # C' X& A5 _) ~! E' h5 D& U G=[A;B;C]; . a5 \; ?* o/ d% a TL=size(G,1); : D8 V8 c+ m$ X+ M; w %在父代和子代中选择优良品种作为新的父代% f6 J& T) @9 W6 q
[dd,IX]=sort(G,2);temp(1:TL)=0; ; u2 x: z; W& A: I; t t for j=1:TL0 r8 y2 E2 W) g; U* g1 e j2 r. K
for i=1:101 % T0 S& P5 l* O3 P' I) { temp(j)=temp(j)+d(IX(j,i),IX(j,i+1)); : ]2 x& Z& l2 @. A: b end 5 R2 F! y' P* E; q D' E& J/ A end ) z4 T7 y6 k& E8 O [DZ,IZ]=sort(temp); : J! u& v9 i: C4 r A=G(IZ(1:w),; 1 _" t- B: j( c; \" c# D }end( ^# \. k" V: r' k/ j
path=IX(IZ(1), 7 k6 I8 A b& T6 b" u/ a8 D3 [long=DZ(1) 1 Q$ P5 \1 M+ }1 Qtoc 8 j/ o4 a B- s* Y& \" t+ P0 F4 V! R; \" R' O
" e- f, T( v. d1 `1 r
在仿真试验中,我们对文中航路规划问题分别利用断点交叉和换位变异结合的遗传 算法,多点交叉和移位变异结合的遗传算法[10]和文中提出的改进算法进行求解比较。 表 1 是各种算法种群规模( M = 50)和迭代次数(G = 100 )都相同时连续 20 次求 解的平均值(公里),算法平均运算时间(秒)。 4 J9 p0 z* ~+ `* b6 n& K $ ^- W! q3 h3 e b# a* O$ V% O9 Y" J$ O, g% Z
# d! \ A$ Q/ L. z n , S7 T J- ~- y) D. G! m; J* v. A本文从算法结构到具体的遗传操作都进行了改进,其中变异操作从交叉操作中分离 出来,使得遗传算法也可以通过并行计算实现,提高算法实现效率。其次改进后的算法, 分别采用变化强度不同的交叉操作和变异操作,其中交叉操作采用强度最弱的单点交 叉,保证了算法收敛精度,削弱和避免算法因交叉强度大而产生的寻优抖振问题。当然 单一的单点交叉很容易使算法早熟,文中采用较大强度的多个基因变异正好解决早熟问 题。从仿真结果可以看到改进后的算法效果较为明显。9 X: I4 m5 e% g1 n
" \4 L* P5 ?& H& }" U5 {# F+ Y, b
1 L; D- _; ]' l: \ ) [) x M7 p3 `————————————————$ D- C2 k+ H& q3 V; E
版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 $ W' [$ }5 G6 f' [原文链接:https://blog.csdn.net/qq_29831163/article/details/896729862 c2 f g" u* H3 S
' s' C' Y! p. n. ?9 l! P; [3 x w5 Q0 y1 F: |3 Z2 ]4 A4 c/ B/ n5 s