- 在线时间
- 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 |
大家请看一下这个程序:! M$ D% D6 q2 ]1 k
clear ;clf
' L7 D" {8 {8 H! X: d' Hpopsize=20; %群体大小
! `& n+ O9 Q& ychromlength=10; %字符串长度(个体长度)
! x* F" T g5 c: _! V6 R. fpc=0.6; %交叉概率
! d3 {; O/ \7 q$ n4 R9 J1 dpm=0.001; %变异概率 & J. ^: ]" n3 k7 p( w9 u ]
pop=initpop(popsize,chromlength); %随机产生初始群体
$ [9 s! N8 l0 R1 A8 E; pfor i=1:20 %20为迭代次数 ; I* x! b: w; u! P8 ]% x! B
[objvalue]=calobjvalue(pop); %计算目标函数 / f2 k" @. i) Y4 ~! Q9 I! J
fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度 7 J/ h' H$ g' e
[newpop]=selection(pop,fitvalue); %复制
" }- k( _- F2 `$ m7 K2 a3 E[newpop]=crossover(pop,pc); %交叉 1 `$ a; G. L8 S% r" h" }# R; g0 J
[newpop]=mutation(pop,pc); %变异 + P9 `% b Q+ I8 E: G: t% K5 l
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值
1 ^, l, @! \5 t% N# ^5 ?y(i)=max(bestfit);
1 Y/ s4 g0 Z. `' p7 S m& Rn(i)=i; 0 p7 v9 v: O3 L3 ~
pop5=bestindividual;
! I5 r2 g( F2 y/ E& Cx(i)=decodechrom(pop5,1,chromlength)*10/1023;
! Z8 p( `" A9 N5 s: {& v4 Y4 {! @pop=newpop;
/ M" e3 f5 W0 z/ M& s* ]end 7 N. R7 I* @, w) }* {4 }" e& u
fplot('10*sin(5*x)+7*cos(4*x)',[0 10])
1 a0 ]$ o# l! ~0 p, h: k' k3 y2 C# Hhold on
% C. S7 W" }& B0 n" o0 R8 e+ |plot(x,y,'r*')
1 r( h$ _8 p" @- c n9 nhold off ; S# Z0 p% V* Z" q) A9 c
%%%%%%%%%%%%
7 l+ d5 E! K" M/ ?( X( e- h) c6 \' m$ @" e 这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?
2 T1 @! @7 _! |, u) L 当我将pop改为newpop时,程序编译时就会出现错误!!!
& w" c* @9 }* G: A 真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!
4 i" j. d0 V+ D* `9 @" ? 2 Q8 \% K5 _, b$ m, r* F4 K
|
zan
|