- 在线时间
- 4 小时
- 最后登录
- 2012-11-23
- 注册时间
- 2012-11-7
- 听众数
- 6
- 收听数
- 0
- 能力
- 0 分
- 体力
- 30 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 13
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 6
- 主题
- 3
- 精华
- 0
- 分享
- 0
- 好友
- 10
升级   8.42% TA的每日心情 | 难过 2012-11-9 16:52 |
---|
签到天数: 1 天 [LV.1]初来乍到
- 自我介绍
- 傻傻的,笨笨的。。。
 群组: 学术交流A 群组: 学术交流B |
大家请看一下这个程序:; w( p( Q( v2 U F; O' I
clear ;clf
* G' D8 a( [6 [1 \" A( ]' Q" m1 dpopsize=20; %群体大小
. a2 g) `5 l& y6 A, d& zchromlength=10; %字符串长度(个体长度)
) `/ t' D* r, o y: f2 ^& x# Jpc=0.6; %交叉概率
; n4 J/ Y, u3 O7 ]. u- ?pm=0.001; %变异概率 # j6 E1 w8 ~0 I7 e
pop=initpop(popsize,chromlength); %随机产生初始群体
5 ?) I1 O) b6 s6 x, b8 ufor i=1:20 %20为迭代次数
! D' o# M) r# w* B$ ]' j9 [& A( ~[objvalue]=calobjvalue(pop); %计算目标函数
& l5 c1 E, W; N5 cfitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
8 G0 T9 h' @9 X[newpop]=selection(pop,fitvalue); %复制 ; W6 L9 L9 j; l- k! e
[newpop]=crossover(pop,pc); %交叉 9 `6 w. B1 w9 ~/ {8 |. \3 m
[newpop]=mutation(pop,pc); %变异
8 `* k# h( m; J) u/ `6 O M[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值 6 V$ k+ E d% c) L- T, G8 E
y(i)=max(bestfit); 6 B3 i( P' n3 Y) E5 t! Y
n(i)=i; : ^+ h: H- u" Z
pop5=bestindividual; * u; P T% I5 m2 U% V# Y/ [
x(i)=decodechrom(pop5,1,chromlength)*10/1023; 0 q7 j B6 {( `
pop=newpop; + }" v2 D+ g1 a
end
3 l% Q# ]" E) S2 a. X& E1 Lfplot('10*sin(5*x)+7*cos(4*x)',[0 10]) 8 r1 B' k3 f+ E0 Y7 T8 k
hold on
S8 Z' @6 x: f% q6 Oplot(x,y,'r*') * {4 V4 }$ j. B0 L7 y
hold off
: \* G; g# {+ i) g; a+ i- n%%%%%%%%%%%%3 L: |; ^ |" e# J6 e
这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?
! G2 m9 i7 Z) R5 o0 A' V0 Z 当我将pop改为newpop时,程序编译时就会出现错误!!!; O6 p0 ~" u& x5 V& v
真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!" p. p# c1 Y9 B8 k
+ u3 W5 ] f8 W5 H+ q% { |
zan
|