- 在线时间
- 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 |
大家请看一下这个程序:
2 S7 n! U, Y: w# H* u" p clear ;clf : G5 C& O+ U- F8 A
popsize=20; %群体大小 , Y$ t; n' r- m. l% g$ |8 u
chromlength=10; %字符串长度(个体长度) & l' Y% E1 D7 w
pc=0.6; %交叉概率
! o, Y; Y. ]+ E) x) f! Wpm=0.001; %变异概率 ( c, P/ x, @3 `4 J& N) D
pop=initpop(popsize,chromlength); %随机产生初始群体
* e8 D* [% Z* @/ \5 ^9 ^. W+ {2 Ffor i=1:20 %20为迭代次数
6 Y3 l2 d( W, O' e3 x6 p! P9 r[objvalue]=calobjvalue(pop); %计算目标函数
S* m) P5 V9 ?% f" Yfitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
$ Y4 m/ b) L: }: p* H1 N) [. E[newpop]=selection(pop,fitvalue); %复制
6 F0 b" }1 F f# W2 j2 p[newpop]=crossover(pop,pc); %交叉 3 X; H7 z" A3 k& `" L6 e5 M
[newpop]=mutation(pop,pc); %变异 . f% h6 s) n* j0 K9 Q
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值 - P. i3 c9 U$ V' K* U) t
y(i)=max(bestfit); ! }3 @' N$ R2 J# R) k% }# y
n(i)=i; ! L6 M u( T* k
pop5=bestindividual; J. h: v4 Y4 U* j
x(i)=decodechrom(pop5,1,chromlength)*10/1023;
9 e3 W) a6 m, U' Xpop=newpop;
. R; N) l! C* ?( cend
; f+ v, G/ d' \/ s$ nfplot('10*sin(5*x)+7*cos(4*x)',[0 10]) 7 j! I9 a* Q$ U, t, s
hold on
0 |3 I q, g% _2 u) jplot(x,y,'r*')
4 j9 C+ _7 A4 Whold off
7 m% E- W6 b0 q" \ y! v%%%%%%%%%%%%4 T* r. K4 V6 ]) H, Y" y D3 J% p
这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?! E4 f, a: F( |- ~" z" j$ h
当我将pop改为newpop时,程序编译时就会出现错误!!!
0 J; v* p* N% [- ]4 ^" P3 O8 i* M, s 真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!9 f! ]- r; |: I
3 a8 P2 K( `3 K2 `4 C7 o; T6 z |
zan
|