- 在线时间
- 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 |
大家请看一下这个程序:: f# j5 b/ f8 H
clear ;clf
( h+ a9 v/ M4 h- Z) e; j$ @popsize=20; %群体大小
( K5 ?5 u1 o2 P8 cchromlength=10; %字符串长度(个体长度) T; ^1 l1 ^+ o2 q+ ^2 Q
pc=0.6; %交叉概率
( S/ q* K/ Y1 N$ `" z3 }1 M: Opm=0.001; %变异概率
3 \" G* }2 s0 X# Hpop=initpop(popsize,chromlength); %随机产生初始群体
/ O: W/ e# W; ofor i=1:20 %20为迭代次数 2 ]* l% T4 U( g- f
[objvalue]=calobjvalue(pop); %计算目标函数
* Y I0 D8 |5 d0 Ffitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
4 {2 ~+ F# T; Y[newpop]=selection(pop,fitvalue); %复制 3 K6 a, p" V( r q& G7 O3 U" d
[newpop]=crossover(pop,pc); %交叉
5 ?- h, P: g4 _4 c2 K. V% L[newpop]=mutation(pop,pc); %变异 p- C9 R7 u$ G, K+ G) S' Z
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值 7 t* Z! |# }+ T/ N% R
y(i)=max(bestfit); $ h$ A y) a6 U0 N; r. R
n(i)=i;
6 Z/ ~ Q. P8 v! c- A7 @pop5=bestindividual;
2 `1 _4 \. Y( k0 n0 ax(i)=decodechrom(pop5,1,chromlength)*10/1023;
- z6 q- ?4 a9 L7 G Tpop=newpop;
* z' c3 U+ V9 T* a5 _& nend
* G/ N* N) A1 xfplot('10*sin(5*x)+7*cos(4*x)',[0 10])
3 i$ h' p& y% @hold on 9 h- q' C& I( g; u% T
plot(x,y,'r*')
) F, Q; j* y6 `) N3 phold off $ o8 D/ b2 r; X
%%%%%%%%%%%%
- o( _0 Y) o2 h+ u; E% _, `4 W 这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?! l) i* Y9 |& I( u6 M8 O9 N7 J9 _
当我将pop改为newpop时,程序编译时就会出现错误!!!' C7 h b3 ?" ?
真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!
" M) d" d& y9 E2 H+ M - |' s5 X0 | t8 f. k( j( i5 s
|
zan
|