⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gafund.asv

📁 运用遗传算法进行聚类分析
💻 ASV
字号:
function gafund(StrAimFunc,StrDataFile,Num)   % straimfunc 计算染色体适应度函数(VRC or MC);strdatafile 基金性质距阵;num 分类数
%----------------These can be modified as you like-----------------------
maxgen=8000;                         % maximum generation
sizepop=200;                        % size of population 
AimFunc=StrAimFunc;                 % this is function of counting fitness
fselect='sus';                      % method of select
                                    % 'rws'随机轮盘赌 or 'sus'随机遍历抽样                                 
fcode='grey';                       % method of coding
                                    % you can only choose 'grey' or 'binary' 
pcross=[0.7];                       % probablity of crossover,between 0 and 1
fcross=[1 0];                       % method of crossover
                                    % fcross(1)表示:1单点交叉,2两点交叉,0洗牌交叉
                                    % fcross(2)表示:0不减少代理,1减少代理
pmutation=[0.7];                    % probability of mutation,between 0 and 1 程序中将对染色体每位变异概率为: pmutation/染色体长度
fmutation='mut';                    % method of mutation
                                    % you can choose 'mut' or 'mutbga'
                                    % 'mutbga' means  实值种群变异,需要在程序中设定FieldDR;
                                  

lenchrom=5;                         % length of bit of every varible
% bound=[0 1;...
%        0 1;...
%        0 1;...
%        0 1;...
%        0 1];
%--------------------------------------------------------------------------

individuals=struct('fitness',zeros(sizepop,1),'chrom',[]); % 种群,包含适应度和染色体
[n q]=size(xlsread(StrDataFile));            % 读取性质距阵,行数n为基金个数,列数q为属性个数,即历史收益率个数
tlenchorm=lenchrom*q*Num;           % total length of chroms,用lenchrom个编码表示每个属性
avgfitness=[];                      % average fitness of population  
bestfitness=[];                     % best fitness of population
bestchrom=[];                       % chromosome of best fitness
% madoid=ones(Num,q);
% inivitialization
    individuals.chrom=crtbp(sizepop,tlenchorm);    % produce new population at random产生sizepop个染色体
    %madoid=
    %x=Decode(lenchrom,bound,individuals.chrom(i,:),fcode);
    % caculate fitness
    % 修改处
    %individuals.fitness(i)=AimFunc(x,heli,id_data,0);
    individuals.fitness=feval(AimFunc,StrDataFile,individuals.chrom,lenchrom);% 计算种群适应度
    %individuals.fitness(:,1)=1:sizepop;
% find minimum value which is best
[bestfitness bestindex]=max(individuals.fitness); % 最优适应度
bestchrom=individuals.chrom(bestindex,:);
avgfitness=sum(individuals.fitness)/sizepop; % 平均适应度
% record average and best fitness of every generation
trace=[avgfitness bestfitness]; % 平均与最优适应度的轨迹
lastg=0; % bestfitness 不变的代数
% evolution begin
for i=1:maxgen
    % selection
    chromtemp=select(fselect,individuals.chrom,individuals.fitness,0.8);  % 选80%的现有种群作为交叉变异算子作用对象
    chrombest=selectbest(individuals.chrom,individuals.fitness,0.1);  % 选出适应度最好的10%的染色体
    %avgfitness=sum(individuals.fitness)/sizepop;
    % crossover
    chromtemp=xovmp(chromtemp,pcross,fcross); 
    %individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,...
    %    sizepop,fcross,[i maxgen]);
    % mutation
    %individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,...
    %   sizepop,fmutation,[i maxgen],bound);
    chromtemp=mutate(fmutation,chromtemp,repmat(2,1,tlenchorm),pmutation/tlenchorm);
    individuals.chrom=cat(1,chromtemp,chrombest,select(fselect,individuals.chrom,individuals.fitness,0.1)); % 下一代种群,由chromtemp,chrombest,10%组成
    % calculate fitness  
    individuals.fitness=feval(AimFunc,StrDataFile,individuals.chrom,lenchrom);
    
    % substitute chromosome of worest fitness
    % find minimum value which is best
    [newbestfitness,newbestindex]=max(individuals.fitness);
    %[worestfitness,worestindex]=max(individuals.fitness);
    % substitute chromosome of worest fitness
    if bestfitness<newbestfitness                              % 计算最优适应度不变代数
        lastg=0;                               
        bestfitness=newbestfitness;
        bestchrom=individuals.chrom(newbestindex,:);
    else
        lastg=lastg+1;
    end
    %individuals.chrom(worestindex,:)=bestchrom;
    %individuals.fitness(worestindex)=bestfitness;
    
    avgfitness=sum(individuals.fitness)/sizepop;
    
    trace=[trace;avgfitness bestfitness];
    if lastg>=400                                             % 最优适应度不变代数超过400退出循环
        break;
    end 
    %disp(i);
end

% draw fitness of every generation
%hfig=findobj('Tag','trace');
% See if it is open
%if ishandle(hfig)
%    figure(hfig);
%else
%    hfig=figure('Tag','trace');
%end
figure(Num);
[r c]=size(trace);
plot([1:r]',trace(:,1),'r-',[1:r]',trace(:,2),'b--');
title(['适应度曲线  ' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');ylabel('适应度');
legend('平均适应度','最佳适应度');
disp(['适应度' num2str(bestfitness)]);              % 给出结果的最优适应度
x=group(StrDataFile,bestchrom,lenchrom);            % 
% show in command window 
%disp('分组:');
%disp(x);
switch Num
    case 2
        save 'saveddata2.txt' x bestfitness -ascii -tabs;
    case 3
        save 'saveddata3.txt' x bestfitness -ascii -tabs;
    case 4
        save 'saveddata4.txt' x bestfitness -ascii -tabs;
    case 5
        save 'saveddata5.txt' x bestfitness -ascii -tabs;
    case 6
        save 'saveddata6.txt' x bestfitness -ascii -tabs;
    case 7
        save 'saveddata7.txt' x bestfitness -ascii -tabs;
    case 8
        save 'saveddata8.txt' x bestfitness -ascii -tabs;
    case 9
        save 'saveddata9.txt' x bestfitness -ascii -tabs;
    case 10
        save 'saveddata10.txt' x bestfitness -ascii -tabs;
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -