- 在线时间
- 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 |
大家请看一下这个程序:. z h f5 |* \; r
clear ;clf # k5 a" V/ c) i k4 s. W" s9 j# G" J
popsize=20; %群体大小 0 g) i3 x- e) `1 {1 N7 y6 [4 E. L- N
chromlength=10; %字符串长度(个体长度) 7 B$ B M+ \! ^" q% A
pc=0.6; %交叉概率
( H7 I& e' ], l: m4 z! t1 ?pm=0.001; %变异概率 % T1 N6 V# E- F3 j4 L7 \/ b
pop=initpop(popsize,chromlength); %随机产生初始群体
& D1 v# h8 k# p8 s( g6 ~for i=1:20 %20为迭代次数 3 ?' ^1 \0 @) q& E$ @ p
[objvalue]=calobjvalue(pop); %计算目标函数 0 }" Q* J7 ]) j( G$ Q
fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
9 k; `$ D9 h) W2 M% `[newpop]=selection(pop,fitvalue); %复制 ) _1 S j; S' Q
[newpop]=crossover(pop,pc); %交叉 0 H5 L- ~& ~ `. Y4 y
[newpop]=mutation(pop,pc); %变异 3 z e, e% e4 {) _4 b
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值
' D6 f! I: j, Z9 v1 w) z0 C6 ]6 Yy(i)=max(bestfit);
5 C3 q2 @* S) B7 cn(i)=i;
/ D1 r0 K7 G8 R; _) ]2 \5 \pop5=bestindividual; , V$ v4 s' e+ x/ O
x(i)=decodechrom(pop5,1,chromlength)*10/1023; ' H9 o, I% J4 s: S2 E4 K- \6 [7 K" Z
pop=newpop; / C, _6 f' [! t! K2 x& b
end
% Q- U# e9 M* I( Qfplot('10*sin(5*x)+7*cos(4*x)',[0 10]) 7 Q* }/ r; T4 u0 V8 r
hold on
; q- m/ O# a4 r9 n% H) pplot(x,y,'r*')
+ z5 _: R4 i9 J- w- ?' K) Whold off 3 D z" A! u# V9 \: u
%%%%%%%%%%%%
: D" ] k, N' \: t6 ^ 这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?
$ n1 y R' c( P# ` W$ j1 y 当我将pop改为newpop时,程序编译时就会出现错误!!!; z) V& B" i$ G1 J; I W
真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!1 B. X* P5 G. c/ f
/ p j# F) _$ [6 N |
zan
|