- 在线时间
- 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 |
大家请看一下这个程序:
/ d6 M0 n" ~4 \# c/ N X5 W5 p& P/ o clear ;clf
, p, C5 M. Z. ]popsize=20; %群体大小 - M, `/ x p- b9 k# A0 c' I
chromlength=10; %字符串长度(个体长度) 9 o5 Z% v4 ], e1 a4 D1 j1 o
pc=0.6; %交叉概率 % q! ]3 k5 _6 L# B3 L
pm=0.001; %变异概率 ; } S) U# G/ \6 w
pop=initpop(popsize,chromlength); %随机产生初始群体
9 [& L; Q' A0 c5 Q- jfor i=1:20 %20为迭代次数 ! S& s) w: M4 j
[objvalue]=calobjvalue(pop); %计算目标函数 * y# O; H9 |. N( A' O
fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
4 t2 i+ m; r. }! z[newpop]=selection(pop,fitvalue); %复制 * p) A7 C1 S6 d' C ]
[newpop]=crossover(pop,pc); %交叉
3 f. t0 u: j3 Y3 M0 l6 f4 o( A[newpop]=mutation(pop,pc); %变异 / h& T& O* f8 ]* W+ a! ?' H( m
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值
. a0 _8 |+ Y5 @+ N' Ay(i)=max(bestfit);
' }, Q0 o, o( S! g- o2 a% b# Mn(i)=i;
. A' k: [( }; h5 Cpop5=bestindividual; ; p: ~9 W$ d5 A! {. G1 i; h }
x(i)=decodechrom(pop5,1,chromlength)*10/1023;
; f0 N5 x2 {4 D% p8 r6 Z% tpop=newpop; 8 D* M% X9 ]8 \2 v& M2 ~+ x
end n7 _& z0 f/ E% w
fplot('10*sin(5*x)+7*cos(4*x)',[0 10]) & ?$ y% p" L0 |4 x
hold on
' W, Q& Q& Q* V% Tplot(x,y,'r*') * ]% C }( |: o$ v: ?. U4 m
hold off
9 b$ b0 E) f# ]%%%%%%%%%%%%
$ M1 j3 u6 T8 }7 F 这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?3 L0 \+ Z8 m" |8 c9 b. u/ K# u, Q. m
当我将pop改为newpop时,程序编译时就会出现错误!!!0 L8 [5 H/ B6 Y1 {: E" K# o
真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!
/ ?: ?# ^4 J8 P# W) R 9 n8 Y) W, u$ E/ P. d4 N& w
|
zan
|