- 在线时间
- 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 |
大家请看一下这个程序:
& H, K; }( j( y% L: {0 y clear ;clf 4 X% O; B. f1 {- a# w, m- Z* P0 d
popsize=20; %群体大小 ! |0 X' V! q& o4 n) h
chromlength=10; %字符串长度(个体长度)
7 m0 P0 T6 B, ]6 W. P/ f4 hpc=0.6; %交叉概率 ! h/ h; x0 V8 h+ A9 u, @
pm=0.001; %变异概率 - ~6 k3 o& R, G( t5 a- h; w
pop=initpop(popsize,chromlength); %随机产生初始群体
4 x( j1 }5 T, mfor i=1:20 %20为迭代次数 ' C) s$ E; v4 O" f* R1 P* W
[objvalue]=calobjvalue(pop); %计算目标函数
* \0 H0 ~0 D' O) Xfitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度 9 Z8 F% z/ f/ C" }% w" m
[newpop]=selection(pop,fitvalue); %复制 + e1 Y3 b7 \! T9 P4 p
[newpop]=crossover(pop,pc); %交叉 % k2 H* O, {. y; z% X* _5 I& K# }
[newpop]=mutation(pop,pc); %变异 & f. K6 Y# W4 w; J8 E0 i. @8 y
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值
9 {$ X( q4 Q9 c8 ^y(i)=max(bestfit); 9 B+ X: n; Q5 M' b5 v# d! k
n(i)=i; 3 U9 g% Y; J1 W
pop5=bestindividual; ; X' U8 n/ y' i6 j' `
x(i)=decodechrom(pop5,1,chromlength)*10/1023; 9 g, @' P5 _9 y/ J# k' e/ J
pop=newpop;
; G: s2 X2 |# b' Vend
% C2 g/ L1 e" A, w& Q3 |9 \fplot('10*sin(5*x)+7*cos(4*x)',[0 10])
, p% e [ _) p' B4 b' b' ghold on + F% s. p0 G# d( f( Q& J
plot(x,y,'r*')
/ R/ ~5 d- V& S! a2 B, khold off
8 M$ S6 H) j. d4 G$ d- R%%%%%%%%%%%%8 h) {1 ^7 D7 P, J. Z& V
这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?9 }2 v" Z8 G; ~/ q! x5 e! `) w
当我将pop改为newpop时,程序编译时就会出现错误!!!
; ^* p$ t s) T6 h 真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!
. {' W9 Y, |! L1 m + B* Y8 W* \8 ]; h: k. q6 ]
|
zan
|