- 在线时间
- 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 |
大家请看一下这个程序:
9 V7 B# E2 g# w1 Z# n' @0 w: q clear ;clf
5 m( f9 u! k! m: Q Apopsize=20; %群体大小 / Y; S z: ^& B, V4 y3 L
chromlength=10; %字符串长度(个体长度)
/ ~' E7 Q1 v, t; H/ Y" jpc=0.6; %交叉概率 2 h/ q4 {1 A7 w' F* s9 L# F
pm=0.001; %变异概率
7 @: `% `) |6 A# J7 ]( U8 Q( |pop=initpop(popsize,chromlength); %随机产生初始群体
) e/ F' z g- F1 Qfor i=1:20 %20为迭代次数 4 @; Q" `2 u5 u$ a$ K
[objvalue]=calobjvalue(pop); %计算目标函数
$ g& ]. Z, h- a) O+ A7 F3 c# C/ Ufitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度 7 s5 ~; X3 y) _: O: E. }8 C# n& ^9 X
[newpop]=selection(pop,fitvalue); %复制 9 V6 L. B b* _) [# N2 C; I
[newpop]=crossover(pop,pc); %交叉 % ^( Q% O6 \2 r! A: _ Z+ f
[newpop]=mutation(pop,pc); %变异 # p* b! T' O2 O$ [. ?
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值 : s% b/ f: C" o$ a1 ~: M
y(i)=max(bestfit); - |# @% L9 s7 Z- {2 i1 j& s. n% a
n(i)=i;
$ o3 h* [* X( _- S% J1 Q9 @pop5=bestindividual; , T' ?2 |2 X( ^0 n
x(i)=decodechrom(pop5,1,chromlength)*10/1023; ; \0 _5 S5 T! [4 {- G/ ~) L+ O5 r
pop=newpop; , x# Z* Q. H5 s
end . m5 h7 |% I# L, @% C9 w
fplot('10*sin(5*x)+7*cos(4*x)',[0 10]) " H% W; s/ R/ }3 a
hold on / a0 K" f3 K5 V4 O+ |; b, i' N! N
plot(x,y,'r*')
8 u! L! n" Z0 b! ]9 w% ghold off 1 u* U8 H' ^$ a9 Q% I- p# |! \
%%%%%%%%%%%%% @* ~% I+ t6 B5 h; T
这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?+ E8 ?: X ^# O; Z( p6 m
当我将pop改为newpop时,程序编译时就会出现错误!!!
" c! v" J+ t2 k% U' ? 真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!: D W6 E% |9 W% t4 ?- ^
) y2 H( q/ }1 d7 E3 O& J |
zan
|