- 在线时间
- 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 |
大家请看一下这个程序:
: v/ k3 X% D' G$ g' f clear ;clf . C7 f, W1 l6 h( e! C4 m
popsize=20; %群体大小 ) W1 G, G1 t1 O
chromlength=10; %字符串长度(个体长度)
2 ^4 G# ?/ S) C- Lpc=0.6; %交叉概率
* ~ f' t u. |) G3 ?" Rpm=0.001; %变异概率
6 {8 n: a+ q" n& G1 vpop=initpop(popsize,chromlength); %随机产生初始群体
- _' D# K7 b, d# J# p2 Kfor i=1:20 %20为迭代次数 " N! v$ L/ ~' `
[objvalue]=calobjvalue(pop); %计算目标函数
6 o. a+ K1 G1 i% {0 @! Tfitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
J6 R% c7 d7 _[newpop]=selection(pop,fitvalue); %复制 y" T$ v2 J- K0 ]- C
[newpop]=crossover(pop,pc); %交叉
8 i8 o5 X( C4 @3 {[newpop]=mutation(pop,pc); %变异 5 ~' Q9 K7 R3 e0 g
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值 0 {: E, b5 J+ v9 G: s* F
y(i)=max(bestfit); 5 Z2 m2 V' {* P" `! H) |
n(i)=i;
+ W$ C' l; R. x! Epop5=bestindividual;
1 B' {/ F5 a S8 {# Y3 y( H( @x(i)=decodechrom(pop5,1,chromlength)*10/1023;
* x) B# Q' u, f) n$ V" V. U( Qpop=newpop;
; W: r0 R R1 ` g* ~end
6 z8 Y& O) m2 b1 Z% K; Bfplot('10*sin(5*x)+7*cos(4*x)',[0 10])
( x4 j, N$ I' n) g# E. L1 mhold on
+ T ^( }* |1 s; @! {plot(x,y,'r*') 7 R3 B6 D3 g4 g" u/ z" j
hold off
" J9 ]% w4 B% Z& b6 n) _%%%%%%%%%%%%. m3 \! k: z" r
这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?4 D' [/ [; u: C4 P9 z* Y4 E
当我将pop改为newpop时,程序编译时就会出现错误!!!
8 w4 q7 G3 S8 I% v6 L& B' Z9 y5 j 真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!, y' K1 f1 ~1 @5 T2 N
0 [; Q" V$ @- Q' ^/ @ r3 P; R8 \
|
zan
|