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

📄 llr.java

📁 针对金融方面的pso算法
💻 JAVA
字号:
import java.text.*;

public class llr {
	 public static void main (String[] args)
	  {
	      //粒子规模16个        
		 //学习因子
		            double c1=2.0,c2=2.0;
	                int   i,k;
	                //存放能量最小值
	                double Emin=0.0;
	                int   dum=-1;
	                //惯性权重
	                double  numda=0.35;
	                long ddum=-1,dumm=-1,duum=-1;	                
	             
	             //存放电阻值
	                double R1[]=new double[20];
	                double R2[]=new double[20];
	                double R3[]=new double[20];
	                double R4[]=new double[20];	                
	             //电阻最优值
	                double R1b=0.0;
	                double R2b=0.0;
	                double R3b=0.0;
                    double R4b=0.0;       	         
      	         
                    //个体最优参数值                    
      	           double pbestR1[]=new double[20];
      	           double pbestR2[]=new double[20];
      	           double pbestR3[]=new double[20];
      	           double pbestR4[]=new double[20];
      	        
      	        // 更新各个参数的速度和位置
      	        
      	         double vr1[]=new double[20];
 	             double vr2[]=new double[20];
 	             double vr3[]=new double[20];
 	             double vr4[]=new double[20];
         
	         	  //群体最优相应参数值
		  double gbestR1=0.0,gbestR2=0.0,gbestR3=0.0,gbestR4=0.0;
	         	   //能量值
	         	  
	         	   double E1[]=new double[20];
	         	   double E[][]=new double[200000][20];
	         	  
	         	   //最小暂存值
           	   double Eming[]=new double[200000];
	           double Eminest[]=new double[200000];
	           
	           //存放最小功率
	    	   double Ee[]=new double[20];
	               
	             //随机数
	         	  d6r1F g0=new d6r1F();
	 	          d6r2F g=new d6r2F();
	 	          d6r3F g1=new d6r3F();
	 	          d6r4F g2=new d6r4F();
	 	          
	 	          Energe t1=new Energe();
	 	          minenergy t2=new minenergy();
	 	         // Ebest t3=new Ebest();
	 	         	 	          
	 	         DecimalFormat form = new DecimalFormat("0.000000");	
	 	        
   //	 	   	 设定初始的20个粒子,每个粒子有20个参数	,分别为R1,R2,R3,R4,Vbe
	 	        for(i=0;i<20;i++)
	         	   {	             
    		          R1[i]=10.00000+3*g0.ran0(dum);
	               	  R2[i]=10.00000-3*g0.ran0(ddum);	            	 	
	               	  //R3[i]=10.00000-3*g0.ran0(duum);
	            	  //R4[i]=10.00000+3*g0.ran0(dumm); 
            	 
	               	  dum=g2.ran3_idum;
	            	  ddum=g.ran1_idum;
	            	  dumm=g1.ran2_idum;
	            	  duum=g0.ran0_idum;	
	            	  
          	   }
	 	      	        	   	         	  	     	         	  
	         //K为步数,设定最大算法迭代次数
	           for(k=0;k<20000;k++)
	           {	           	 	        	        	   
	         //调用目标函数,计算每个粒子相应的适应度
	              t1.Energe(R1,R2,R3,R4,E1);	              	              
	            
	         //为每步操作设定粒子相应值	 	
	         	   for(i=0;i<20;i++)
	         	   {
	         		   E[k][i]=E1[i];
             //检测适应度函数的正误
	         		//System.out.print("E1[i]---"+E[k][0]);
	         	   }
	         	 //System.out.println("\n");
            //第k步的能量最小值,全局最小值
	              Eming[k]=t2.minenergy(E1);  
                  Eminest[k]= Eming[k];        
                                   
	   //当粒子群中单步中某粒子能量为最小值时,存储其相关参数值(单步全局)             
            //double Eb[]=new double[20000]; 
            if(k>=0){
              double Ebest=E[k][0];
       	      R1b=R1[0]; R2b=R2[0];R3b=R3[0]; R4b=R4[0];  
       	     
                //循环判断
       	     for(int m=0;m<20;m++)
       	     {
       	        if(E1[m]<Ebest)
       	        {   
       	        	Ebest=E[k][m];       	   
       		        R1b=R1[m];R2b=R2[m];R3b=R3[m];R4b=R4[m];
       	        }        	          	        
       	     }
       	     //Eb[k]=Eeb;
       	  System.out.println(Eminest[k]);     
       	     }
               //个体极值
               if(k >= 1)
               {
                 for (i = 0; i < 20; i++)
                {
                  if (E[k][i] < E[k - 1][i])
                  {                     
                	  pbestR1[i]=R1[i];
                      pbestR2[i]=R2[i];
                      pbestR3[i]=R3[i];
                      pbestR4[i]=R4[i];                          
                }
                 else
                    E[k][i] = E[k-1][i];     
                  //System.out.println("pbestR1>>>"+pbestR1[i]+"  ");
                }
                 
                 if (Eming[k] < Eming[k-1])
                 {
                 	 gbestR1=R1b;          
                     gbestR2=R2b;
                     gbestR3=R3b;
                     gbestR4=R4b; 
                  //System.out.println("0.0000");
                 }
                 else
                 {
               	  Eming[k]=Eming[k-1];                     
                 }
                     Emin=Eming[k];
                //调整精确度
                     //if((Math.abs(Eb[k]-Eb[k-1])<1))
                     if((Math.abs(Eminest[k]-Eminest[k-1])<0.00001))                    	   
                       break;                  	                  
                 }             
	 	        
          //算法核心
               
               for(i=0;i<20;i++)
               {
                 //变量变化
            	   //System.out.print("vr1[i]>>>"+vr1[i]+"   ");
            	   vr1[i] = numda*(vr1[i] + c1* g0.ran0(ddum) * (pbestR1[i] - R1[i]) +
                                  c2*g0.ran0(dum) * (gbestR1 - R1[i]));
                   vr2[i] = numda*(vr2[i] + c1* g1.ran2(dum) * (pbestR2[i] - R2[i]) +
                                  c2*g0.ran0(duum) * (gbestR2 - R2[i]));
                   vr3[i] = numda*vr3[i] + c1*g0.ran0(dumm) * (pbestR3[i] - R3[i]) +
                                  c2*g.ran1(dum) * (gbestR3 - R3[i]);
                   vr4[i] = numda*vr4[i] +c1* g1.ran2(dum) * (pbestR4[i] - R4[i]) +
                                  c2*g1.ran2(dum) * (gbestR4- R4[i]);
             	
                   //System.out.print("vr1[i]>>>"+vr1[i]+"   ");
                   //System.out.print("R1>>>"+form.format(R1[i])+"   ");
             //限定速度范围
                  
                   if(vr1[i]>1.000)
                   {
                   	   vr1[i]=1.0000;
                      }
                   if(vr1[i]<-1.0000)
                   {
                   	   vr1[i]=-1.0000;   
                    }
                   if(vr2[i]>1.0000)
                   {
                   	   vr2[i]=1.000;
                    }
                   if(vr2[i]<-1.000)
                   {
                   	   vr2[i]=-1.000;   
                    }
                   /**if(vr3[i]>1.0000)
                   {
                   	   vr3[i]=1.000;
                   }
                   if(vr3[i]<-1.000)
                   {
                   	   vr3[i]=-1.000;   
                    }
                   if(vr4[i]>1.000)
                   {
                   	   vr4[i]=1.0000;
                   }
                   if(vr4[i]<-1.000)
                   {
                   	   vr4[i]=-1.0000;   
                   }*/
              //参数在速度下变化
             
              R1[i]=R1[i]+vr1[i]; 
              R2[i]=R2[i]+vr2[i];
              //R3[i]=R3[i]+vr3[i];
              //R4[i]=R4[i]+vr4[i];
              
             //System.out.print("vr1[i]>>>"+vr1[i]+"   ");
             //System.out.print("vr2[i]>>>"+vr2[i]+"   ");
             //System.out.print("R1>>>"+form.format(R1[i])+"   ");
             //限制参数活动范围
            
              if(R1[i]>13.0000){
              	   R1[i]=13.0000;   
                 }
              if(R1[i]<7.0000){
              	   R1[i]=7.0000;
                 }
              if(R2[i]>13.0000){
              	   R2[i]=13.0000;   
                 }
              if(R2[i]<7.0000){
              	   R2[i]=7.0000;
                 }
              /**if(R3[i]>13.0000){
              	   R3[i]=13.0000;   
                 }
              if(R3[i]<7.0000){
              	   R3[i]=7.0000;
                 }
              if(R4[i]>13.0000){
              	   R4[i]=13.0000;   
                 }
              if(R4[i]<7.0000){
              	   R4[i]=7.0000;
                 }*/
              dum=g2.ran3_idum;
         	  ddum=g.ran1_idum;
         	  dumm=g1.ran2_idum;
         	  duum=g0.ran0_idum;
              //System.out.println("R1>>>"+form.format(R1[i])+"  ");
              }   
               //System.out.println("\n");           
	           }
	           //System.out.println("\n");
               
	 //输出参数
	     	       System.out.println(" k is ");
	     	       System.out.print(k+"  ");
	        	   System.out.print("\n"); 
	               System.out.println(" the min value is ");
	               System.out.print(form.format(Emin)+"  ");
	              
	               System.out.print("\n");
                    	              
	               System.out.print(form.format(gbestR1)+"  ");
	               System.out.print(form.format(gbestR2)+"  ");
	               System.out.print(form.format(gbestR3)+"  ");
	               System.out.print(form.format(gbestR4)+"  ");
	               System.out.print("\n");
	               
	               System.out.print(form.format(R1b)+"  ");
	               System.out.print(form.format(R2b)+"  ");
	               System.out.print(form.format(R3b)+"  ");
	               System.out.print(form.format(R4b)+"  ");
     	               
	  }	   
  }

⌨️ 快捷键说明

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