- 在线时间
- 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 |
大家请看一下这个程序:
0 j- P- u3 n" m6 [( I' k1 D0 \ clear ;clf
5 g; R$ `" W+ Y6 r* n9 Y% spopsize=20; %群体大小
. t7 q9 o7 ^7 {% ]chromlength=10; %字符串长度(个体长度)
5 x, g0 Z% H$ L8 K: _! Dpc=0.6; %交叉概率 7 t0 F- X3 S0 I' X8 G
pm=0.001; %变异概率
9 I7 C ~: ^' ]2 V0 Q; \pop=initpop(popsize,chromlength); %随机产生初始群体
5 b$ W2 q. S8 v6 xfor i=1:20 %20为迭代次数
# L! a' e6 V! H$ k% v. D' \[objvalue]=calobjvalue(pop); %计算目标函数
9 G& W9 [7 ]/ {+ n1 Afitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度 ' E7 g2 g; z. A% p% ?7 p! I+ Y T
[newpop]=selection(pop,fitvalue); %复制 , z7 y% D2 |* g( i1 @9 ^. U4 T
[newpop]=crossover(pop,pc); %交叉 , o) A/ M H' i/ k. z2 }* q. w. M
[newpop]=mutation(pop,pc); %变异 6 @$ [1 o0 Q; T4 B( K
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值
2 k1 I P+ H, T! h% Vy(i)=max(bestfit);
/ f/ u6 G5 g" R5 ~n(i)=i;
9 Z! K$ Z/ z6 w% }% I' E4 b/ Apop5=bestindividual;
* p' k; }$ H! e: H/ V8 a) T& Sx(i)=decodechrom(pop5,1,chromlength)*10/1023;
3 A7 J" S# K, m3 l' o6 V& }5 Npop=newpop;
) N; _( v& |9 W3 u/ L; Dend
3 O. Y, z( P$ Sfplot('10*sin(5*x)+7*cos(4*x)',[0 10])
% E* J. J) v# M" r9 C6 A. I' K8 shold on $ h5 p/ d' H+ w7 b; R
plot(x,y,'r*') & U/ ]1 D# w9 {& X
hold off
' z X( K0 d" _* h%%%%%%%%%%%%" F/ ^9 X7 H1 ]
这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?
v7 g8 y/ j8 P( x 当我将pop改为newpop时,程序编译时就会出现错误!!! ]3 q/ ~) W& W" P; v8 R5 S) w
真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!/ W+ S l( o2 u/ E. ~) S
+ ~8 {6 U: Z) L7 E0 y" i
|
zan
|