- 在线时间
- 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 |
大家请看一下这个程序:
) s, u, P2 Z5 J7 e clear ;clf
2 M9 R* v r1 N+ O/ q% ]popsize=20; %群体大小 6 ?) g6 @+ a; Z1 m( `- Y! I
chromlength=10; %字符串长度(个体长度)
( ]8 Z& h1 |0 ^8 [( m+ p+ X& Epc=0.6; %交叉概率 2 L# d! b. N6 u$ ^) R
pm=0.001; %变异概率
$ `% h* s- b; S4 x' P5 Bpop=initpop(popsize,chromlength); %随机产生初始群体
4 h6 I% J0 s: x. G; cfor i=1:20 %20为迭代次数 4 o& h R& b2 v' f! g* s3 p2 P+ p6 i
[objvalue]=calobjvalue(pop); %计算目标函数 . ~4 V9 G7 r5 S$ F
fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
; w$ l, x( r0 `% i$ k% X8 c( r# M2 i[newpop]=selection(pop,fitvalue); %复制
7 i4 b2 d' m* T% c- r/ m3 u[newpop]=crossover(pop,pc); %交叉 $ I3 ^0 G" t$ M5 @
[newpop]=mutation(pop,pc); %变异
1 P2 \" x0 w: }% E w6 S[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值
; W9 k5 J4 [* [/ Ky(i)=max(bestfit); . x# g6 B: J' [2 C! `
n(i)=i;
M- \! Y, `( J0 [$ X8 Xpop5=bestindividual; 9 D8 F/ v, i+ Z2 W7 q2 n# ]9 ?
x(i)=decodechrom(pop5,1,chromlength)*10/1023;
* j' ~6 P- D9 H0 a% vpop=newpop;
, V- Q4 i9 S" M2 ?. ]5 u/ X" |end
8 ~. y1 y Y& W1 E; Tfplot('10*sin(5*x)+7*cos(4*x)',[0 10]) 4 U3 T/ @4 ~7 {; H2 _
hold on
" G7 R( E' r" Oplot(x,y,'r*') - S7 H# V: ]2 u1 I, j* ~
hold off
' l$ L& V7 h/ D; X _* z%%%%%%%%%%%%( O0 a$ r0 y1 c, j, x) ^
这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?4 q9 }/ Q/ `, M3 E+ |+ J
当我将pop改为newpop时,程序编译时就会出现错误!!!
1 R1 M, M- |% E3 a/ e 真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!3 m8 I& C. E& K3 y
( y7 q' I8 B: ^% j' x5 {
|
zan
|