| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1444 人关注过本帖
标题:关于遗传算法的问题
只看楼主 加入收藏
yobey
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-9-8
收藏
 问题点数:0 回复次数:5 
关于遗传算法的问题
请问,这是一个标准遗传算法吗?
function youhuafun
D=code;
N=50;         % Tunable
maxgen=50;     % Tunable
crossrate=0.5; %Tunable
muterate=0.08; %Tunable
generation=1;   
num = length(D);
fatherrand=randint(num,N,3);
score = zeros(maxgen,N);
while generation<=maxgen
   ind=randperm(N-2)+2; % 随机配对交叉
   A=fatherrand(:,ind(1:(N-2)/2));
   B=fatherrand(:,ind((N-2)/2+1:end));
%     多点交叉
   rnd=rand(num,(N-2)/2);
   ind=rnd   tmp=A(ind);
   A(ind)=B(ind);
   B(ind)=tmp;
% % 两点交叉
%     for kk=1:(N-2)/2
%         rndtmp=randint(1,1,num)+1;
%         tmp=A(1:rndtmp,kk);
%         A(1:rndtmp,kk)=B(1:rndtmp,kk);
%         B(1:rndtmp,kk)=tmp;
%     end
   fatherrand=[fatherrand(:,1:2),A,B];
   
   % 变异
   rnd=rand(num,N);
   ind=rnd   [m,n]=size(ind);
   tmp=randint(m,n,2)+1;
   tmp(:,1:2)=0;
   fatherrand=tmp+fatherrand;
   fatherrand=mod(fatherrand,3);
%     fatherrand(ind)=tmp;
   
   %评价、选择
   scoreN=scorefun(fatherrand,D);% 求得N个个体的评价函数
   score(generation,:)=scoreN;
   [scoreSort,scoreind]=sort(scoreN);
   sumscore=cumsum(scoreSort);
sumscore=sumscore./sumscore(end);
   childind(1:2)=scoreind(end-1:end);
   for k=3:N
       tmprnd=rand;
       tmpind=tmprnd       difind=[0,diff(tmpind)];
       if ~any(difind)
           difind(1)=1;
       end
       childind(k)=scoreind(logical(difind));
   end
   fatherrand=fatherrand(:,childind);     
   generation=generation+1;
end
% score
maxV=max(score,[],2);
minV=11*300-maxV;
plot(minV,'*');title('各代的目标函数值');
F4=D(:,4);
FF4=F4-fatherrand(:,1);
FF4=max(FF4,1);
D(:,5)=FF4;
save DData D
function D=code
load youhua.mat
% properties F2 and F3
F1=A(:,1);
F2=A(:,2);
F3=A(:,3);
if (max(F2)>1450)||(min(F2)<=900)
   error('DATA property F2 exceed it''s range (900,1450]')
end
% get group property F1 of data, according to F2 value
F4=zeros(size(F1));
for ite=11:-1:1
   index=find(F2<=900+ite*50);
   F4(index)=ite;
end
D=[F1,F2,F3,F4];
function ScoreN=scorefun(fatherrand,D)
F3=D(:,3);
F4=D(:,4);
N=size(fatherrand,2);
FF4=F4*ones(1,N);

如果我的generation number 是200,population size 是100,crossover rate是0.6,mutation mutation rate是0.05,那么请问,我应该如何改上面的那个程序呢?又或者不能用这个?因为本人从未接触过遗传算法,所以请帮忙详细说明下

[[it] 本帖最后由 yobey 于 2008-11-6 08:27 编辑 [/it]]
搜索更多相关主题的帖子: 算法 应用 遗传 
2008-11-06 01:23
anbcjys
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:6
帖 子:110
专家分:861
注 册:2007-6-8
收藏
得分:0 
那就修改相应的变量呀?有什么错误信息吗

qq604443022
2008-11-07 08:31
yobey
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-9-8
收藏
得分:0 
第一,前两个的变量对应在哪里我都不知道,我对遗传算法是真的一点儿都不会,刚开始看的,第二,这个程序按照我提供的信息能这样写吗?或者有些没必要的东西是可以删掉?
2008-11-08 00:33
yobey
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-9-8
收藏
得分:0 
我想知道我的那个generation number 是200,population size 是100,这两个值对应的是程序哪里??
2008-11-10 08:10
shark168
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-12-1
收藏
得分:0 
genernation number 就是最大进化代数,也就是你上面程序的maxgen,population size就是种群规模,就是你程序里面的N
2008-12-01 11:01
hhl31792006
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-12-8
收藏
得分:0 
5楼说的,应该没问题。
你得先清楚这个算法的思路,才能明白为什么这么设计算法,以及今后如何改进算法。
2008-12-10 23:43
快速回复:关于遗传算法的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025496 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved