基于遗传算法的投影寻踪模型 Matlab 源码%% “投影寻踪+遗传算法优化”的主仿真程序% GreenSim 团队原创作品,转载请注明% Email:% GreenSim 团队主页:% [color=red]欢迎访问 GreenSim——算法仿真团队→[url=][/url][/color]%% 第一步:仿真参数设置clearclcclose allload Q5.txtDD=Q5;%导入 D 矩阵[n,p]=size(DD);np=15; %训练样本的个数,前面 1~np 个样本用于建立模型,剩下的样本用于预测if np>=n error('用于预测的样本个数不能大于或等于样本总数,请重新设置');endyear=1:np;%选择参加计算的样本,默认选择全部Factor=1:p;%选择部分指标,默认选择全部D=DD(year,Factor);K=50; %迭代次数N=30; %种群规模Pm=0.3; %变异概率LB=-ones(1,p); %决策变量的下界UB=ones(1,p); %决策变量的上界Alpha=0.1; %窗口半径系数,典型取值 0.1b%% 调用遗传算法优化投影寻踪模型的程序[BESTX,BESTY,ALLX,ALLY]=GAUCP(K,N,Pm,LB,UB,D,Alpha)%% 以下均为整理输出结果%所有数据都在 workspace 里,最值得关注的三个数据是% Z 投影指标值,和参考文献里的符号是一致的% Best_a 最佳投影向量,参考文献里也是用的符号 a,这里加了个前缀Best,表示最佳% BESTY 投影寻踪模型中的目标函数的变化情况,文献中的模型是最大化模型,这里根据惯例,对其加了个负号成为最小化模型Best_a=(BESTX{K})';%方向向量disp('最佳投影向量为');disp(Best_a);d=zeros(np,p);DDjmax=max(DD);DDjmin=min(DD);for i=1:np d(i,:)=(DD(i,:)-DDjmin)./(DDjmax-DDjmin);endZ=zeros(np,1);for i=1:np Z(i)=abs(sum(Best_a.*d(i,:)));endZ=abs(Z);%%figure(2)%投影散布图plot(year,abs(Z),'bd','LineWidth',1,'MarkerEdgeColor','k','MarkerFaceColor','b','MarkerSize',5);%axis([1,12,0,2.5]);%图形边界根据需要显示grid onxlabel('Year','FontName','Times New Roman','FontSize',12);ylabel('Projective Value','FontName','Times New Roman','Fontsize',12);%%figure(3)[newZ,I]=sort(Z);newyear=year(I);plot(year,abs(newZ),'bd','LineWidth',1,'MarkerEdgeColor','k','MarkerFaceColor','b','MarkerSize',5);%axis([1,12,0,2.5]);%图形边界根据需要显示grid onxlabel('Year','FontName','Times New Roman','FontSize',12);ylabel('Projective Value','FontName','Times New Roman','Fontsize',12);%%n2=n-np;d2=zeros(n2,p);for i=1:n2 d2(i,:)=(DD(i+np,:)-DDjmin)./(DDjmax-DDjmin);endZ2=zeros(n2,1);for i=1:n2 Z2(i)=abs(sum(Best_a.*d2(i,:)));endZ2=abs(Z2);disp('预测样本的投影预测值为');disp(Z2);%%figure(4)%投影散布图plot([Z;Z2],'bd','LineWidth',1,'MarkerEdgeColor','k','MarkerFaceColor','b','MarkerSize',5);hold onplot((np+1):n,Z2,'bo','LineWidth',1,'MarkerEdgeColor','r','MarkerFaceColor','r','MarkerSize',5);legend('训练样本投影值','预测样本投影值');%axis([1,12,0,2.5]);%图形边界根据需要显示grid onxlabel('Year','FontName','Times New Roman','FontSize',12);ylabel('Projective Value','FontName','Times New Roman','Fontsize',12);