- 在线时间
- 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 |
大家请看一下这个程序:* U# c) o0 w" p7 M/ D' E, |
clear ;clf
! m7 v- A3 i0 kpopsize=20; %群体大小
7 Q/ |% ^* f7 _; dchromlength=10; %字符串长度(个体长度)
2 s) f& o6 n- c) a, {" Qpc=0.6; %交叉概率 & g$ a. Q [* _ C- A' o- |
pm=0.001; %变异概率 4 Q1 X& `! ~3 r: |" ]
pop=initpop(popsize,chromlength); %随机产生初始群体 : i* G0 `. x, V& b
for i=1:20 %20为迭代次数 * o* N/ }$ \2 f8 ^5 t, r
[objvalue]=calobjvalue(pop); %计算目标函数
9 I7 } A0 q4 `7 K4 ofitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度 - }* i1 D% T! h2 G5 J* _ t
[newpop]=selection(pop,fitvalue); %复制 , O8 a! ?! b3 Z9 z8 S0 a8 }8 B
[newpop]=crossover(pop,pc); %交叉
- N2 F) z$ `- v# [, {[newpop]=mutation(pop,pc); %变异
/ q$ U" c+ l6 P! z& K( [( \/ w[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值
3 i. m0 I+ E+ h( U" u7 ay(i)=max(bestfit);
' m- c3 ]* `+ e, |. `- _$ Y( X3 jn(i)=i; 0 |, b: L% q0 z8 T
pop5=bestindividual; . A9 ]7 {9 f+ z/ u) g' E
x(i)=decodechrom(pop5,1,chromlength)*10/1023; # Y# v' s& `- U! h# B
pop=newpop;
6 B) D" s r/ p1 v! Mend ( N) K, a0 z6 U B' p, l/ y
fplot('10*sin(5*x)+7*cos(4*x)',[0 10])
- K$ \, T& {3 F6 Ghold on + W. _ g; ^5 \4 o# c
plot(x,y,'r*')
9 z! p7 S; J* W# O" g ehold off
8 O4 @0 ~9 t7 g$ A. g5 j3 [" _%%%%%%%%%%%%
) O. B! k- ^6 j* O 这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?
- O2 k. t4 t$ P* x4 Z5 Z 当我将pop改为newpop时,程序编译时就会出现错误!!!, x& q1 p j `' I9 ?, ~0 z4 u
真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!# A J- C3 x ^4 F# m
, v$ Y5 E% u& T- y8 B5 V |
zan
|