1 简介
提出一种基于海洋捕食算法(MPA)和支持向量机(SVM)的股价预测方法.针对SVM预测模型参数难以确定的问题,采用MPA算法对SVM中惩罚因子及核函数参数进行优化,构建MPA-SVM股价预测模型。
2 部分代码
%_________________________________________________________________________ % Marine Predators Algorithm source code (Developed in MATLAB R2015a) % ? function [Top_predator_fit,Top_predator_pos,Convergence_curve]=MPA(SearchAgents_no,Max_iter,lb,ub,dim,fobj) ? ? Top_predator_pos=zeros(1,dim); Top_predator_fit=inf; ? Convergence_curve=zeros(1,Max_iter); stepsize=zeros(SearchAgents_no,dim); fitness=inf(SearchAgents_no,1); ? ? Prey=initialization(SearchAgents_no,dim,ub,lb); Xmin=repmat(ones(1,dim).*lb,SearchAgents_no,1); Xmax=repmat(ones(1,dim).*ub,SearchAgents_no,1); ? Iter=0; FADs=0.2; P=0.5; ? while Iter<Max_iter %------------------- Detecting top predator ----------------- for i=1:size(Prey,1) Flag4ub=Prey(i,:)>ub; Flag4lb=Prey(i,:)<lb; Prey(i,:)=(Prey(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb; fitness(i,1)=fobj(Prey(i,:)); if fitness(i,1)<Top_predator_fit Top_predator_fit=fitness(i,1); Top_predator_pos=Prey(i,:); end end %------------------- Marine Memory saving ------------------- if Iter==0 fit_old=fitness; Prey_old=Prey; end Inx=(fit_old<fitness); Indx=repmat(Inx,1,dim); Prey=Indx.*Prey_old+~Indx.*Prey; fitness=Inx.*fit_old+~Inx.*fitness; fit_old=fitness; Prey_old=Prey; ? %------------------------------------------------------------ Elite=repmat(Top_predator_pos,SearchAgents_no,1); %(Eq. 10) CF=(1-Iter/Max_iter)^(2*Iter/Max_iter); RL=0.05*levy(SearchAgents_no,dim,1.5); %Levy random number vector RB=randn(SearchAgents_no,dim); %Brownian random number vector for i=1:size(Prey,1) for j=1:size(Prey,2) R=rand(); %------------------ Phase 1 (Eq.12) ------------------- if Iter<Max_iter/3 stepsize(i,j)=RB(i,j)*(Elite(i,j)-RB(i,j)*Prey(i,j)); Prey(i,j)=Prey(i,j)+P*R*stepsize(i,j); %--------------- Phase 2 (Eqs. 13 & 14)---------------- elseif Iter>Max_iter/3 && Iter<2*Max_iter/3 if i>size(Prey,1)/2 stepsize(i,j)=RB(i,j)*(RB(i,j)*Elite(i,j)-Prey(i,j)); Prey(i,j)=Elite(i,j)+P*CF*stepsize(i,j); else stepsize(i,j)=RL(i,j)*(Elite(i,j)-RL(i,j)*Prey(i,j)); Prey(i,j)=Prey(i,j)+P*R*stepsize(i,j); end %----------------- Phase 3 (Eq. 15)------------------- else stepsize(i,j)=RL(i,j)*(RL(i,j)*Elite(i,j)-Prey(i,j)); Prey(i,j)=Elite(i,j)+P*CF*stepsize(i,j); end end end %------------------ Detecting top predator ------------------ for i=1:size(Prey,1) Flag4ub=Prey(i,:)>ub; Flag4lb=Prey(i,:)<lb; Prey(i,:)=(Prey(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb; fitness(i,1)=fobj(Prey(i,:)); if fitness(i,1)<Top_predator_fit Top_predator_fit=fitness(i,1); Top_predator_pos=Prey(i,:); end end %---------------------- Marine Memory saving ---------------- if Iter==0 fit_old=fitness; Prey_old=Prey; end Inx=(fit_old<fitness); Indx=repmat(Inx,1,dim); Prey=Indx.*Prey_old+~Indx.*Prey; fitness=Inx.*fit_old+~Inx.*fitness; fit_old=fitness; Prey_old=Prey; ? %---------- Eddy formation and FADs? effect (Eq 16) ----------- if rand()<FADs U=rand(SearchAgents_no,dim)<FADs; Prey=Prey+CF*((Xmin+rand(SearchAgents_no,dim).*(Xmax-Xmin)).*U); ? else r=rand(); Rs=size(Prey,1); stepsize=(FADs*(1-r)+r)*(Prey(randperm(Rs),:)-Prey(randperm(Rs),:)); Prey=Prey+stepsize; end Iter=Iter+1; Convergence_curve(Iter)=Top_predator_fit; end ? ?
3 仿真结果
4 参考文献
[1]束诗雨. 基于集成学习的支持向量机预测优化算法及其应用[D]. 东华大学.?
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
|