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

📄 用vc++编的遗传算法.txt

📁 自编VC++遗传算法.改进后可应用其它方面.值得看看.
💻 TXT
📖 第 1 页 / 共 2 页
字号:
#include"iostream.h"
#include<stdlib.h>
#include <stdio.h> 
#include<math.h>

#define pi 3.1415926

class GA
{
private:
  double N_random;
        int N_gene[501][5][6];

  double N_integer[501][5];
  double N_integer1[501][5];
  double t_index[501][5];
  double t_index1[501][5];
  double t_down[5],t_up[5];

  double Energy[501];
  double Energy1[501];

    int m_i_th,m_i_th1;                           /* ?üá?×?′ó?μ?ù?úDD  */
double Sum_energy;
  /*float max;*/
  double Fitness[501];
  /*float Sum_fitness;*/
  double q_fitness[501];
  double q_random[501];
    int i_qmax;
    int N_parent[501][21];
  
    int N_newgene[501][21]; 
    int N_supergene[501][21];             /* 3???è?é?ì?*/
        int N_addgene[501][21];             /*??í¨?ùòò+213??ùòò*/

        int Bottle;
        int t_bottle;                       /*??Dòê±?D??±?á? */
        int i_ch,j_ch;                      /* */

        int ic,is,nlose;
        int nochose[501];
  double P_cr;

        int N_select[501][21];
    int N_crosspoint;
    int N_offspringc[501][21];
    

        int jm,im,N_mutate;
  double P_mp[501][21];
    int judge;
    int N_renewgene[501][5][6];

        int i_length;

public:
          GA();
    
void N_changetointeger(void);
void N_changetointeger1(void);
void t_changetoindex(void);     
void t_changetoindex1(void);
             N_3to2();
      E_nergy();
      E_nergy1();
          Makeorder();                   
          Addgene();
      Makeorder1();
          Chose_super();
          F_itness();
     
      crossover();
      mutate();
      N_2to3();
      N_add2to3();
          F_irst();
          C_ircle();

};

GA::GA()
{
        int a;
        int i,j,k;
        
        cout<<"ê?è???èoêy i_length=";
    cin>>i_length;
/*        cout<<"N_gene[][][]"<<endl;*/

        for(i=1;i<=i_length;i++)
    for(j=1;j<=4;j++)
    for(k=1;k<=5;k++)
        {   
                a=rand()%10000/1000;     
                N_gene[i][j][k]=a;      /* 2úéú?-ê????úêy×÷?a?ùòò  */
                        
        /*        cout<<N_gene[i][j][k]<<" " ;     /* ê?3??ùòò  */  
        /*        if(j==4&&k==5)
        cout<<endl;
    */
        }
   
         t_down[1]=-3.0,t_down[2]=4.1,t_down[3]=0,t_down[4]=0;
         t_up[1]=12.1,t_up[2]=5.8,t_up[3]=0,t_up[4]=0;

         
}

void GA::N_changetointeger(void)
{   int i,j,k;
/*        cout<<"N_changetointeger"<<endl;        */
/*        judge=0;
        for(i=1;i<i_length;i++)
    for(j=1;j<=4;j++)
    for(k=1;k<=5;k++)                        
                {
                        if(N_gene[i][j][k]!=N_gene[i+1][j][k])
                        judge=1;
                        
                }
*/
    for(i=1;i<=i_length;i++)
    for(j=1;j<=4;j++)
        {
                N_integer[i][j]=0;
       for(k=1;k<=5;k++)                     /* ???-ê??ùòò×a?ˉ?a??êy  */

           {   
                N_integer[i][j]=N_integer[i][j]+N_gene[i][j][k]*pow(10,(5-k));
           }  
          /* cout<<N_integer[i][j]<<" ";            /* ????êyê?3?  */
/**/  /*        if(j==4)
        cout<<endl;
      */
        }    
}
void GA::N_changetointeger1(void)
{   int i,j,k;

    for(i=1;i<=1.2*i_length;i++)
    for(j=1;j<=4;j++)
        {
                N_integer1[i][j]=0;
       for(k=1;k<=5;k++)                     /* ???-ê??ùòò×a?ˉ?a??êy  */

           {   
                N_integer1[i][j]=N_integer1[i][j]+N_renewgene[i][j][k]*pow(10,(5-k));
           }  
          
        }    
}

void GA::t_changetoindex(void)
{   int i,j;
/*        cout<<"t_changetoindex"<<endl;  
*/        for(i=1;i<=i_length;i++)
    for(j=1;j<=4;j++)                          /* ????êy×a?ˉ?aóDìa??o?ò?μ?êy  */    
        { 
                t_index[i][j]=t_down[j]+N_integer[i][j]*
                                  ((t_up[j]-t_down[j])/(pow(10,5)-1));
                
        /*        cout<<t_index[i][j]<<" ";           
                if(j==4)
        cout<<endl;
    */
        }       
}
void GA::t_changetoindex1(void)
{   int i,j;

        for(i=1;i<=1.2*i_length;i++)
    for(j=1;j<=4;j++)                          /* ????êy×a?ˉ?aóDìa??o?ò?μ?êy  */    
        { 
                t_index1[i][j]=t_down[j]+N_integer1[i][j]*
                          ((t_up[j]-t_down[j])/(pow(10,5)-1));        
        }       
}

GA::N_3to2()                                   /* èy??êy×é×a?ˉ?a?t??êy×é*/
{   
/*        cout<<endl<<"3to2(èy??êy×é×a?ˉ?a?t??êy×é)"<<endl;  */
    int i,j,k;
        int  m=1;
                           
        for(i=1;i<=i_length;i++)
    for(j=1;j<=4;j++)
    for(k=1;k<=5;k++)
        {
                if(m<=20)
                {
                        N_newgene[i][m]=N_gene[i][j][k];          /* èy??êy×é×a?ˉ?a?t??êy×é*/
                        m++;
                        if(m>20)
                        m=1;
                }
         
        }
/*    cout<<endl<<"N_newgene[][]"<<endl;         /*ê?3?D?μ??t??êy×é*/

/*        for(i=1;i<=i_length;i++)
    for(j=1;j<=20;j++)
        {
                cout<<N_newgene[i][j]<<" ";               
       if(j==20)
        cout<<endl;
                
        }
*/
}

GA::E_nergy()                           /* ?üá?oˉêy  */
{                               
cout<<endl<<"E_nergy()"<<endl;
int i,j=1;
int m;
int max,Fo;
    max=0;
        for(i=1;i<=i_length;i++)
    
        {   Fo=21.5+t_index[i][j]*sin(4*pi*t_index[i][j])
                   +t_index[i][j+1]*sin(20*pi*t_index[i][j+1]);
            
     /*   Energy[i]=Fo;
        
                cout<<"Energy="<<Energy[i]<<"  "; 
              if(i%5==0)
                          cout<<endl;
                                              /* ê?3?×?′ó?üá?oˉêy?μ  */
           if(Fo>=max)
           {
                   max=Fo; 
                   m_i_th=i;
           }
   
        }
   cout<<"±?′?μü′ú×?′ó?üá??ù?úμ?DD£o"<<m_i_th<<endl;
   cout<<"Max Energy="<<max<<"  ";
  /* cout<<"Fitness[i]="<<Fitness[m_i_th]<<"  ";*/
}


GA::Makeorder()
{   cout<<endl;
        
        int i,j;
    
        
        for(j=1;j<=i_length-1;j++)              /*  ???á1???DD??Dò*/
    for(i=1;i<=i_length-j;i++)
        {                                       /* ò?±?ìáè?3?à′3???è?é?ì?*/
                if(Energy[i]<Energy[i+1])
                {
                        t_bottle=Energy[i+1],Energy[i+1]=Energy[i],
                                Energy[i]=t_bottle;
            
                /*        for(i_ch=1;i_ch<i_length;i_ch++)*/
            for(j_ch=1;j_ch<=20;j_ch++)              
                        {
                                Bottle=N_newgene[i+1][j_ch],
                                N_newgene[i+1][j_ch]=N_newgene[i][j_ch],
                                N_newgene[i][j_ch]=Bottle;
                        }
                }
        }
/*  cout<<"??Dòoóμ?Energy:"<<endl;
        for(i=1;i<=i_length;i++)
           {
                cout<<"Energy="<<Energy[i]<<"  ";
           if(i%5==0)
             cout<<endl;
        }
cout<<"??Dòoóμ?N_newgene:"<<endl;
        for(i=1;i<=i_length;i++)
    for(j=1;j<=20;j++)
        {
                cout<<N_newgene[i][j]<<" ";               
       if(j==20)
        cout<<endl;
                
        }
/*        for(i_ch=1;i_ch<=i_length;i_ch++)         /* ê?3???Dòoóμ??ùòò*//* 
    
        {   cout<<"μú"<<i_ch<<"DD";          
                for(j_ch=1;j_ch<=20;j_ch++)
                {
                  cout<<N_newgene[i_ch][j_ch]<<"  ";
           if(j_ch==20)
             cout<<endl;
                }
        }
*/
}

GA::Addgene()
{ 
        int i,j;
        int i_super=1;
    
        for(i=1;i<=i_length;i++)
    for(j=1;j<=20;j++) 
        {
                N_addgene[i][j]=N_newgene[i][j];      /*??D?μ?N_newgene */
        }                                         /*·??úN_addgeneà? */

        for(i=i_length+1;i<=1.2*i_length;i++)
    {
                for(j=1;j<=20;j++) 
                                                      /* ??N_supergene   */
                {
                        N_addgene[i][j]=N_supergene[i_super][j];    /* 21·??úN_addgeneà?   */
                }
     i_super++;
        }
    
  

}

GA::E_nergy1()                           /* 213?oóμ??üá?oˉêy  */
{      cout<<endl;                       
   int i,j=1;
   
   int F1;
    int max=0;
        for(i=1;i<=1.2*i_length;i++)
    
        {   F1=21.5+t_index1[i][j]*sin(4*pi*t_index1[i][j])
                   +t_index1[i][j+1]*sin(20*pi*t_index1[i][j+1]);
            
        Energy1[i]=F1;
        /*        cout<<"Energy1="<<Energy1[i]<<"  "; 
              if(i%5==0)
                          cout<<endl;
        */        
                if(F1>=max)
           {
                   max=F1; 
                   m_i_th1=i;
           }
                           
        }

        /* cout<<"Energy1="<<max<<"  ";*/


}

GA::Makeorder1()
{
        cout<<endl;
        
        int i,j;
            
        for(j=1;j<=1.2*i_length-1;j++)              /*  ???á1???DD??Dò*/
    for(i=1;i<=1.2*i_length-j;i++)
        {                                       /* ò?±?ìáè?3?à′3???è?é?ì?*/
                if(Energy1[i]<Energy1[i+1])
                {
                        t_bottle=Energy1[i+1],Energy1[i+1]=Energy1[i],
                                Energy1[i]=t_bottle;
            
                        /*for(i_ch=1;i_ch<1.2*i_length;i_ch++)*/
            for(j_ch=1;j_ch<=20;j_ch++)              
                        {
                                Bottle=N_addgene[i+1][j_ch],
                                N_addgene[i+1][j_ch]=N_addgene[i][j_ch],
                                N_addgene[i][j_ch]=Bottle;
                        }
                }
        }
  
/*    cout<<endl;
        cout<<"??Dòoóμ?N_addgene:"<<endl;
        for(i=1;i<=1.2*i_length;i++)
    for(j=1;j<=20;j++)
        {
                cout<<N_addgene[i][j]<<" ";               
       if(j==20)
       cout<<endl;

⌨️ 快捷键说明

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