- 在线时间
- 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 |
大家请看一下这个程序:' O/ I9 j; x+ K$ F- a5 k Z9 A/ [( ?
clear ;clf . i0 z; x. M& q& k7 A' R. c8 [
popsize=20; %群体大小
5 S& H- G% Q3 dchromlength=10; %字符串长度(个体长度) 3 L! _7 v8 @6 D" ?
pc=0.6; %交叉概率 $ c6 G @! s8 e9 ?3 H5 F9 h
pm=0.001; %变异概率
6 Q3 y! ?' m4 z2 R% f7 v1 f5 }( B' Jpop=initpop(popsize,chromlength); %随机产生初始群体 4 B! t4 a. u0 _; @8 X- I' J
for i=1:20 %20为迭代次数 # R1 W! A$ t. }- E4 ^* s& {
[objvalue]=calobjvalue(pop); %计算目标函数 2 b, D( `9 g; ]
fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
" B) W& q& L3 [( {" e& [8 C2 c[newpop]=selection(pop,fitvalue); %复制
9 ]# P* G* B2 u. U! ]! o[newpop]=crossover(pop,pc); %交叉
$ t' q9 U: w4 S0 [[newpop]=mutation(pop,pc); %变异
' D# P2 j9 I2 f( O7 `[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值
' E% o. f7 q: ~9 L; D6 h: z9 ^y(i)=max(bestfit); , l, t6 w8 |2 w8 _4 u; E f! \
n(i)=i; - i, e& ~' Y* G4 z, {+ x
pop5=bestindividual; ' y3 R4 T8 F; o; k+ `0 w* m8 ?3 i
x(i)=decodechrom(pop5,1,chromlength)*10/1023;
: {7 e! E7 ?* q$ m8 Rpop=newpop; # ], E" b/ q) \: u
end # {7 _" _! s' d' [9 D
fplot('10*sin(5*x)+7*cos(4*x)',[0 10])
1 N) N0 C6 s# E& ihold on
3 \9 l7 v$ }& @plot(x,y,'r*')
6 ^7 Y+ Y" N* K! u! yhold off
: w8 y7 N6 ~6 }0 F%%%%%%%%%%%%3 m, F% E: M; Q! g& u) @! [7 i
这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?
, N- ]4 t5 D' E, z( g 当我将pop改为newpop时,程序编译时就会出现错误!!!
: p! @- Y0 s _* v0 L 真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!7 E* ~" R! s1 m5 Y9 X
" y [1 x p* V5 q$ r' W$ O: z5 x) |
|
zan
|