- 在线时间
- 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 |
大家请看一下这个程序:
+ [- u% }/ P2 P" d2 \4 G; M* F clear ;clf " p8 V, F& `( F6 |
popsize=20; %群体大小 4 I& A: i$ k s! E9 N1 d* \
chromlength=10; %字符串长度(个体长度)
9 X# \ ^2 X; F# _4 u% \" [pc=0.6; %交叉概率 # t! S4 |$ v# b. Z& a
pm=0.001; %变异概率
2 _) m" `% T& T, ^pop=initpop(popsize,chromlength); %随机产生初始群体 4 l4 n! b: U$ _- z$ h
for i=1:20 %20为迭代次数 0 t: \- K2 V6 b, w9 r6 O
[objvalue]=calobjvalue(pop); %计算目标函数
, w. O2 k4 ?# ]( U2 S" N4 A3 {fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度 5 I$ Y. K5 |. a7 N
[newpop]=selection(pop,fitvalue); %复制
6 V k, I, I6 j" {' _1 }7 G% p[newpop]=crossover(pop,pc); %交叉
b- ?% ?' S; R6 Z! P4 O/ w[newpop]=mutation(pop,pc); %变异
$ o0 f4 J4 b5 t[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值
6 n+ N# E1 N& N0 Ly(i)=max(bestfit); ! O- u4 H, e& K D
n(i)=i; % P+ S& b$ U9 O) B5 L4 X
pop5=bestindividual;
) R) z `* H0 I+ e6 |* H0 p& qx(i)=decodechrom(pop5,1,chromlength)*10/1023; / F' _7 s V% q& u" M
pop=newpop; 8 }( q; W6 s8 @+ {) X
end ' T( t* ]5 Y) ?
fplot('10*sin(5*x)+7*cos(4*x)',[0 10]) 7 p$ X; j3 K* }/ s0 \; x- q7 v
hold on ! n4 ]& M" P. X2 ~# x3 w
plot(x,y,'r*')
3 M+ w6 K- w" r1 H/ S5 ^8 L, Qhold off 0 T3 z8 s1 H$ E/ u
%%%%%%%%%%%%1 f' g9 r" [6 U9 V4 Q
这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?& o! @5 c! E7 {- r/ ^% n7 j$ [; j
当我将pop改为newpop时,程序编译时就会出现错误!!!
) G( G: o' I+ T2 u$ Z 真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!
, j7 U9 g A2 }7 ]2 @" K' N
7 j. A3 E$ | Q4 | |
zan
|