- 在线时间
- 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 |
大家请看一下这个程序:
# b+ W7 U8 a4 f0 f9 N, d, Q5 _% ?9 v9 J clear ;clf
, [8 {1 c4 n- N8 w* r$ S) Bpopsize=20; %群体大小 9 F3 ?) n7 g, {* Q i: p' I! w
chromlength=10; %字符串长度(个体长度) 5 X9 i! V# f b5 y
pc=0.6; %交叉概率 + t, G( l1 S( n7 q
pm=0.001; %变异概率 : q3 L" {2 s v0 g' j
pop=initpop(popsize,chromlength); %随机产生初始群体
# L% {' o8 L* v( r) Ifor i=1:20 %20为迭代次数 ; r7 T' V5 a0 _3 H
[objvalue]=calobjvalue(pop); %计算目标函数 " G. }! ]! r, T8 M& {) O
fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度 6 r6 n6 t! }, |! N; v4 u6 t
[newpop]=selection(pop,fitvalue); %复制
7 R4 \0 J! R1 S[newpop]=crossover(pop,pc); %交叉 , E0 B5 y$ ~, c, R! q
[newpop]=mutation(pop,pc); %变异 7 x5 @' X; t/ e
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值 7 I7 E6 {% d; ~3 H2 g# t2 ` ~& L
y(i)=max(bestfit);
/ E0 B- s3 v. A$ P- F5 Gn(i)=i;
& N, g! S% M5 M) M2 h1 Epop5=bestindividual; * K! j7 h9 F9 a! Q7 A: A7 f' a/ G
x(i)=decodechrom(pop5,1,chromlength)*10/1023; R8 l0 G& t: [* V' E
pop=newpop; 8 p0 v( L; W' U( t+ M, b" }
end
6 X! W' j) T) jfplot('10*sin(5*x)+7*cos(4*x)',[0 10]) ' g4 q! F8 |. Z* u% p8 r
hold on 7 M9 x& x5 p' [6 x
plot(x,y,'r*') - A& m" O/ s/ Q1 y
hold off 9 y" c2 r7 `( j: _
%%%%%%%%%%%%7 H0 w, A2 ^1 ^) V7 P
这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?
& h" y, l! I6 E, q% D( X 当我将pop改为newpop时,程序编译时就会出现错误!!!) }" m4 `7 @& ?3 b! z) t) C0 g+ b
真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!
# G5 c8 U; O, a% F( D. F4 [: K 7 a) B4 s3 I0 c
|
zan
|