- 在线时间
- 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 |
大家请看一下这个程序:
$ C3 U+ q4 T+ c2 |* l! P; R- { clear ;clf 9 b% [3 [$ P% T' k2 W3 B4 m6 `
popsize=20; %群体大小 2 S# @# j* Z8 D; ]' g" C
chromlength=10; %字符串长度(个体长度)
9 Z% P: g7 S$ J2 W( Z4 vpc=0.6; %交叉概率
- N8 c0 |, ?" L7 [, Wpm=0.001; %变异概率 3 |2 a- |7 N) U/ l7 g
pop=initpop(popsize,chromlength); %随机产生初始群体 1 T* ?# V6 A7 w1 C1 h. B
for i=1:20 %20为迭代次数
# |5 `7 }0 ]% o0 t[objvalue]=calobjvalue(pop); %计算目标函数
# _2 r1 I; `. U v+ d# c1 y* Tfitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
/ \8 k' ?% l, ~6 r[newpop]=selection(pop,fitvalue); %复制 % w( I8 Q) \9 k9 l/ ]8 h
[newpop]=crossover(pop,pc); %交叉 , {: @& F" {) I# a
[newpop]=mutation(pop,pc); %变异
. v+ m) r4 o. K+ C[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值
) G" k( q T1 h; @y(i)=max(bestfit); ' S* _2 r7 ^' B" a
n(i)=i; - _, K* y, J+ C) Z0 Z$ X
pop5=bestindividual; % c( y& B! Y& E" e4 r
x(i)=decodechrom(pop5,1,chromlength)*10/1023;
2 l! P- g# m0 J5 F) g( h' S! x3 ]pop=newpop; 6 V3 T. d$ A3 P) o
end
6 p; X N6 Y- E8 z1 \4 d) v+ m; lfplot('10*sin(5*x)+7*cos(4*x)',[0 10]) / ]9 q7 T9 B8 S5 R* }; k
hold on
0 t" J) a& l/ L8 m/ ]$ J$ Zplot(x,y,'r*') . @8 i5 v4 L+ P7 W3 f
hold off
0 R1 P6 W5 u3 p6 A# K! d3 T: w%%%%%%%%%%%%: D; f7 Z# l) L% |; d m5 `
这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?
2 o% f5 ]; w! N3 \6 M0 x1 n) d. N 当我将pop改为newpop时,程序编译时就会出现错误!!!5 S" a4 d' K8 D1 Q- @# p- A: K+ G
真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!1 _6 ~" ?7 I' G9 H q, w6 F% U
. T2 x' z: A# Q1 ~) v Q) | |
zan
|