- 在线时间
- 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 |
大家请看一下这个程序:
/ S( S) u: ^% W! ^ r% o clear ;clf
4 n1 S0 b8 C& }0 m/ npopsize=20; %群体大小 9 D2 {% H# e4 V9 [4 Z% r* ^
chromlength=10; %字符串长度(个体长度)
" O% I' m, k* c6 ~$ u _pc=0.6; %交叉概率 3 g( T, k3 q( ~$ J/ J
pm=0.001; %变异概率 ) p, A, q# [: z. O, s
pop=initpop(popsize,chromlength); %随机产生初始群体 j# z7 T1 ?! s+ z2 n6 V
for i=1:20 %20为迭代次数 ; t+ N9 I* T! v; Y
[objvalue]=calobjvalue(pop); %计算目标函数 & k4 _. e# `+ j) `
fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
2 O) c% }+ n+ Y; `[newpop]=selection(pop,fitvalue); %复制
" d' G+ u% m$ f9 ~3 [[newpop]=crossover(pop,pc); %交叉
9 X2 h" O% _9 c# ~[newpop]=mutation(pop,pc); %变异 4 U4 N9 a3 ]6 H7 d' l
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值
+ x5 Q/ D' G. n2 P% n/ d; a7 c- wy(i)=max(bestfit); + {; Q6 `- b- t0 v% h+ H ^! e
n(i)=i; : q& } F3 |* a I' M) O2 E% N% B
pop5=bestindividual; 3 T ~7 A3 w: n: Z+ W
x(i)=decodechrom(pop5,1,chromlength)*10/1023;
: N6 p G) q3 n) e; ~0 Q6 I" Vpop=newpop;
D0 Q! v# o* c- o! ?end
- u. R3 ]2 B! T' `& k( Rfplot('10*sin(5*x)+7*cos(4*x)',[0 10])
' W! K! N. B* X' U+ A4 W3 ~: Z% Yhold on ) E2 q: S; D, d6 j0 K, w8 Y7 Z
plot(x,y,'r*') 4 M1 _& I. t a" L$ o
hold off 6 J0 }+ C) a4 Y$ U, t4 f! m$ G
%%%%%%%%%%%%
1 B& F4 c. C% V; {' X- e$ ` 这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?9 o6 e: ~! \4 |& R) K
当我将pop改为newpop时,程序编译时就会出现错误!!!1 ~# F: M9 z) y/ R
真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!
" F1 v6 w7 e6 y4 G+ h6 g 2 l6 q2 e7 @1 L) A& Y
|
zan
|