- 在线时间
- 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 |
大家请看一下这个程序:; p1 j1 Y0 A- e
clear ;clf
- W- h% s. p6 dpopsize=20; %群体大小 0 O! q, J3 R. q" J
chromlength=10; %字符串长度(个体长度)
3 o; D9 L' N5 Q7 b5 ^pc=0.6; %交叉概率 & u! x; v1 Z3 Y' i4 d) Q
pm=0.001; %变异概率 : N" N' P9 Q2 j" Z9 z* K
pop=initpop(popsize,chromlength); %随机产生初始群体 7 e/ e/ [8 L D' v
for i=1:20 %20为迭代次数 , G" u: I# K' S( b) t1 e, K
[objvalue]=calobjvalue(pop); %计算目标函数
% C5 \5 h2 w' f) W$ Q+ |fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
3 a8 o, p, y/ q$ L+ c" Y A[newpop]=selection(pop,fitvalue); %复制 6 T, D4 F- t6 B5 }1 p& ~
[newpop]=crossover(pop,pc); %交叉
. s& O" Y0 I' d' A. B9 }4 P/ N[newpop]=mutation(pop,pc); %变异
+ P. g) w3 m4 D! E# X6 m Q[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值 ! E0 t! @- h( ^, B" H
y(i)=max(bestfit); 7 |, A) G6 u# V: T4 ]& r4 H
n(i)=i; : h% o3 W0 |; @& m' x2 i, A, Q0 ^) D
pop5=bestindividual; 4 C8 K) j* e9 X
x(i)=decodechrom(pop5,1,chromlength)*10/1023;
$ `) C/ B' _* G/ L. ~& O% Fpop=newpop; ( M4 T3 c5 ~" D# s4 x
end 0 ~9 S- L' @' b
fplot('10*sin(5*x)+7*cos(4*x)',[0 10])
7 `' K2 r, ~1 i: Whold on , @% i; p- y1 x' m- A5 @* C v) F2 J
plot(x,y,'r*')
; s$ y7 S# v7 Zhold off
0 T4 a9 x' m) F" J" q%%%%%%%%%%%%
* i+ q$ _: G( z 这是遗传算法的主程序。我想问的是:在进行复制、交叉、变异处理时,为什么不代入新的群体矩阵newpop,而使用旧的pop呢?如果按照原程序,那么复制、交叉处理岂不是没有了任何意义?
2 S8 v/ M6 F& g- d/ C1 z 当我将pop改为newpop时,程序编译时就会出现错误!!!
- e8 y4 c5 B, q* B/ \, v7 S! ` 真搞不懂这到底是为什么,希望各位大侠不吝指教,谢谢!!!* x. v7 \. [% Y5 V; y1 J' a5 M
( E" z; }/ P" q+ W3 o3 n7 g! F" X
|
zan
|