- 在线时间
- 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 |
大家请看一下这个程序:3 C- x: N! _# _& A' K* Q0 R; j
clear ;clf
- K+ _" v8 q% z( |6 |popsize=20; %群体大小 3 C; _* k: E: g! q- F Q8 {! G( I
chromlength=10; %字符串长度(个体长度) 6 X- C$ Q& M- c8 m- j; V
pc=0.6; %交叉概率 # q6 L% C$ t& Y" W& n
pm=0.001; %变异概率
3 m7 b( A* M# L2 x# {* E: x7 L+ Fpop=initpop(popsize,chromlength); %随机产生初始群体 + T. U% B$ B- ?7 t y
for i=1:20 %20为迭代次数
1 o8 |7 I% i$ q e$ V5 C[objvalue]=calobjvalue(pop); %计算目标函数 % T; a5 f& ^2 h* B6 Q( }5 p
fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
& S& u5 r! x6 e8 V2 H7 Y[newpop]=selection(pop,fitvalue); %复制
T. _, T5 S6 f, X5 }. D9 x" V[newpop]=crossover(pop,pc); %交叉 7 |- e+ d+ H1 f( q$ v
[newpop]=mutation(pop,pc); %变异 : V: x. p" N2 r
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值
/ h. z( p% ~ k4 A; A9 K( Ky(i)=max(bestfit);
- S7 |( B4 n* j1 p2 @6 D8 U% Yn(i)=i;
# L& s; O1 E; W1 u' Spop5=bestindividual;
* N& b1 g; D/ Ix(i)=decodechrom(pop5,1,chromlength)*10/1023;
2 a! _# H u% d: p8 s& {; z5 qpop=newpop; 2 x: f5 g) N# i" [
end % y# B$ F) E/ r3 S$ e- V1 O6 K
fplot('10*sin(5*x)+7*cos(4*x)',[0 10])
2 h0 ~1 |4 H4 _& C: m$ p4 bhold on
5 p( H) N+ y2 S1 m+ I) i: @$ H: Splot(x,y,'r*')
* e% }+ B# T* G5 V* o2 Yhold off
9 h7 u8 o! [! {%%%%%%%%%%%%
5 P+ p4 I6 J) \) y# Q 这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?" l3 }, u* P( c/ \4 i) l
当我将pop改为newpop时,程序编译时就会出现错误!!!
$ e9 A2 l) g; y# h* p 真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!
1 C& K# l8 N) J7 G" J; C 0 R, D! ~5 ^2 h! E
|
zan
|