📄 gafund.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 + -