- 在线时间
- 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 |
大家请看一下这个程序:$ r) w& M# i' I) t' W. o
clear ;clf " g3 }7 L6 N: c# f0 K
popsize=20; %群体大小 6 E n7 C3 F7 ]* @1 H, N
chromlength=10; %字符串长度(个体长度) 8 T$ e( O; \2 F2 n( {, G
pc=0.6; %交叉概率 ' h" ?1 J {/ o& x( [
pm=0.001; %变异概率 8 T% G5 A% H0 S& f- [, _7 s- a
pop=initpop(popsize,chromlength); %随机产生初始群体 , x8 X+ [2 f3 z, L0 O! ]$ M& g
for i=1:20 %20为迭代次数 - _9 k- A& C$ N5 f( f
[objvalue]=calobjvalue(pop); %计算目标函数
% A D) y0 z5 L$ k" a5 x1 Bfitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度 6 G! E" n7 G- n2 R, z
[newpop]=selection(pop,fitvalue); %复制 7 c+ o. c9 R: y1 r0 `' x+ \! S! ]$ v
[newpop]=crossover(pop,pc); %交叉 , h% s# q [/ l. o. A
[newpop]=mutation(pop,pc); %变异 6 q* K0 [7 u4 @# J
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值
1 u* \/ W1 v) s! c$ b: Qy(i)=max(bestfit); 3 Y, W. O" y; m: r
n(i)=i;
7 |' ^* V" v5 M4 g' i1 g: S* ppop5=bestindividual;
" F& c+ Y& \9 M' c& nx(i)=decodechrom(pop5,1,chromlength)*10/1023; , W) w. U9 x: |8 E! q
pop=newpop;
1 v4 Q! r; B; t( K6 Hend ; s6 z0 I) G) L: Y) l$ H* F
fplot('10*sin(5*x)+7*cos(4*x)',[0 10]) 9 U- P5 f6 r- t3 \
hold on
) `& L2 }' c" G9 h& r# hplot(x,y,'r*')
3 z' s6 ?5 D) G4 L* {hold off
: U" @5 k! K6 l0 A8 V8 W( C%%%%%%%%%%%%2 r: r$ D6 N. @) w
这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?" {3 Y+ n9 ^3 T: k- [! `
当我将pop改为newpop时,程序编译时就会出现错误!!!
) g3 f$ G+ W- H 真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!
' O- l( H$ Y9 |; _0 V6 m9 N" K$ E/ i2 B 4 X1 h3 `+ l9 s4 C) r
|
zan
|