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

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

📁 自编VC++遗传算法.改进后可应用其它方面.值得看看.
💻 TXT
📖 第 1 页 / 共 2 页
字号:
        }
*/
    for(i_ch=1;i_ch<i_length;i_ch++)       /*è??°??1--i_lengthμ??ùòò */
    for(j_ch=1;j_ch<=20;j_ch++)            /*·??úN_newgeneà? */
        {
                N_newgene[i_ch][j_ch]=N_addgene[i_ch][j_ch];
        }
        
/*        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;
        }
        */
}


GA::Chose_super()
{   cout<<"N_supergene"<<endl;
        int i,j;
        for(i=1;i<=0.2*i_length;i++)
    for(j=1;j<=20;j++) 
        {
                N_supergene[i][j]=N_newgene[i][j];         /* 3???è?é?ì?*/
        /*        cout<<N_supergene[i][j]<<" ";
                if(j==20)
                        cout<<endl;*/
        }
   
        for(i=1;i<=0.2*i_length;i++)
    for(j=1;j<=20;j++) 
        {
                N_newgene[i][j]=rand()%1000/100;         /*213??ùòò*/

        }
    cout<<"N_newgene&&N_offspringc:"<<endl; 
    for(i=1;i<=i_length;i++)
    for(j=1;j<=20;j++) 
        {
                N_offspringc[i][j]=N_newgene[i][j];    /* ?aá???DDN_2to3×a?ˉ */
/*          cout<<N_offspringc[i][j]<<" ";
                if(j==20)
                        cout<<endl;*/
        }
  

}


GA::F_itness()                            /* êêó|?èoˉêy  */
{   int i,j;

    int i_parent;
cout<<endl<<"F_itness()"<<endl; 
        Sum_energy=0;
        for(i=1;i<=i_length;i++)
        {   /*cout<<"Energy="<<Energy[i]<<"  "; 
              if(i%5==0)
                          cout<<endl;
        */
                Sum_energy=Sum_energy+fabs(Energy[i]);
        }
/*        cout<<endl;*/
/*        cout<<endl<<"Sum_energy="<<Sum_energy<<"  ";  */
        for(i=1;i<=i_length;i++)
        {   Fitness[i]=(Energy[i])/(Sum_energy);
        
        /*        cout<<"Fitness="<<Fitness[i]<<"  ";*/
    }

   /* Sum_fitness=0;                                
/*        for(i=1;i<=i_length;i++)
        {   
                Sum_fitness=Sum_fitness+fabs(Fitness[i]);
        }
        cout<<"Sum_fitness="<<Sum_fitness<<"  ";
*/
/*        cout<<endl;*/
    q_fitness[0]=0;
        for(i=1;i<=i_length;i++)
        {
                q_fitness[i]=q_fitness[i-1]+Fitness[i];      /* ????à??y???ê*/
          /* cout<<"q_fitness="<<q_fitness[i]<<endl;*/
        }
        
        for(i=1;i<=i_length;i++)
        {
                q_random[i]=rand()%100/100.0;
        
        }
    for(i=1;i<=i_length;i++)
        {
                /* cout<<"q_random="<<q_random[i]<<endl;*/
        }

    i_parent=1;
        for(i=1;i<=i_length;i++)
    for(i_qmax=1;i_qmax<=i_length;i_qmax++)
        {                                                  /* ??×a????*/
                if(q_random[i]<=q_fitness[i_qmax]) 
                {   /*cout<<"q_random="<<q_random[i]<<endl;*/
                        for(j=1;j<=20;j++)
                        {
                                N_parent[i_parent][j]=N_newgene[i][j];
                        }
                 i_parent++;
                        
                }

        }

}



GA::crossover()                     /*??2?*/
{ /* cout<<endl;*/
    
/*        cout<<endl<<"crossover()"<<endl;*/
        int a;
        
        int i=1,j,m;
        ic=1,nlose=1;
        is=1;

        while(i<=i_length)                             /* ?ú4????èo?D???????? */
        { 
                N_random=rand()%10001/10000.0;    /* ?ú[0,1]????2úéú???úêy */
                P_cr=N_random;                      

                if(P_cr<0.8)                         /* ò?0.7μ????ê???????? */
                {  /* cout<<"μú"<<i<<"DD±?????"<<endl;
                        cout<<"P_cr="<<P_cr<<endl;*/
                        for(j=1;j<=20;j++)
                        {                            /* ??·?o?ì??tμ?????·??úD?μ?êy×é */
                                N_select[ic][j]=N_parent[i][j];   
                            
                        /*        cout<<N_select[ic][j]<<" ";     
                        if(j==20)                    /* ??·?o?ì??tμ?????ê?3? */
            /*    cout<<endl;          */
                        }                            
            ic++;
                }        

                else
                {   
                        nochose[nlose]=i;    /* ??2?·?o?ì??tμ?????μ?DDo?·??úD?μ?êy×é */  
                nlose++;
                /*        cout<<"μú"<<i<<"DD??±?????"<<endl;  */
                }
                 
                i++;
          }
    /*  cout<<"i="<<i<<endl; */
  /*  cout<<"12??2?μ?DDêy ic="<<ic-1<<endl;*/
        

    a=rand()%1900/100;                          /* ?ú[0,19]????2úéú???úêy */
        N_crosspoint=a;                             /* ??μ?????£¨D?óú20£? */
    cout<<"??2?μ? N_crosspoint="<<N_crosspoint<<endl;

        for(i=1;i<ic-1;i++)
        for(j=N_crosspoint;j<=20;j++)
        {
        N_offspringc[i+1][j]= N_select[i][j];
        
                N_offspringc[i][j]= N_select[i+1][j];   
                                                    /*?ú??2?μ?óò±?μ?è?é?ì???2?*/
        }

    for(i=1;i<ic-1;i++)
        for(j=1;j<N_crosspoint;j++)
        {
        N_offspringc[i][j]= N_select[i][j];      /*?ú??2?μ?×ó±?μ?è?é?ì?±£á?*/
        
                N_offspringc[i+1][j]= N_select[i+1][j];   
                                                    
        }
  /*  cout<<"??2?oóμ?è?é?ì?"<<endl;
        for(i=1;i<=ic-1;i++)
    for(j=1;j<=20;j++)
        {
                cout<<N_offspringc[i][j]<<" ";           /*ê?3?????oóμ?è?é?ì?*/
/*           if(j==20)
           cout<<endl;
        }
*/
     j=1;
    for(i=ic;i<=i_length;i++)  
        {
                for(m=1;m<=20;m++)                     /*??????2?μ?????μ?21·??úD?μ?êy×é */
                {   
                        N_offspringc[i][m]=N_parent[nochose[j]][m];
                }
                j++;
        }
/*        cout<<endl<<"N_offspringc[][]="<<endl;
                
        for(i=1;i<=i_length;i++)
    for(j=1;j<=20;j++)
                {
                        cout<<N_offspringc[i][j]<<" ";
                        if(j==20)
                          cout<<endl;
                }
*/
}


GA::mutate()
{        
/*        cout<<endl;*/
/*        cout<<"mutate()"<<endl;*/

        int a,m;
        m=0;
/*        cout<<"±?òìμ??ùòòêy??£o"<<endl; */
        for(im=1;im<=i_length;im++)
    for(jm=1;jm<=20;jm++)
        {   
                N_random=rand()%10001/10000.0;
                P_mp[im][jm]=N_random;     /*2úéú[0,1]?????ù?è·?2?μ????úêyDòáD*/
        
                if(P_mp[im][jm]<0.15)        /*ò?20%μ????ê·¢éú±?òì*/ 
                {   m++;
                /*        cout<<"μú"<<im<<"DD "; 
            cout<<"μú"<<jm<<"áD?ùòòòa±?ì??? ";  
        */
        /**/        a=rand()%800/100;
                        N_mutate=a;     /*2úéú[0,8]????·?2?μ????úêy×÷?aì???òò×ó*/
           /* cout<<"ì????ùòò£o"<<a<<endl;
        /**/        
                        if(N_mutate==N_offspringc[im][jm])
                        {
                                N_mutate++;         /*è?1?ì???òò×óoí?-à′?àí?£??ò±??ˉ*/ 
                        }
           
                        N_offspringc[im][jm]=N_mutate;  /*ì???òò×óì???μ??-à′òò×ó*/ 
                               
                }
      
                
        }
/*        cout<<m<<" ";*/
    cout<<endl;
/*        cout<<"±?òìoóμ?è?é?ì?£o"<<endl;
        for(im=1;im<=i_length;im++)
    for(jm=1;jm<=20;jm++)
        {
                cout<<N_offspringc[im][jm]<<" ";
                if(jm==20)
                        cout<<endl;
    }
*/
}


GA::N_2to3()
{    
/*        cout<<endl<<"2to3(?t??êy×é×a?ˉ?aèy??ê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)
                {
                                                                   /* ?t??êy×é×a?ˉ?aèy??êy×é*/
            N_renewgene[i][j][k]=N_offspringc[i][m];
            N_gene[i][j][k]=N_renewgene[i][j][k];
                        m++;
                        if(m>20)
                        m=1;
                }
         
        }
  
}
GA::N_add2to3()
{
        int i,j,k;
        int  m=1;
                           
        for(i=1;i<=1.2*i_length;i++)
    for(j=1;j<=4;j++)
    for(k=1;k<=5;k++)
        {
                if(m<=20)
                {
                                                                   /* ?t??êy×é×a?ˉ?aèy??êy×é*/
            N_renewgene[i][j][k]=N_addgene[i][m];
            N_gene[i][j][k]=N_renewgene[i][j][k];
                        m++;
                        if(m>20)
                        m=1;
                }
         
        }

}
GA::F_irst()
{
            N_changetointeger();
            t_changetoindex();
        N_3to2();
        E_nergy();
                Makeorder();
                Chose_super();
        N_2to3();
        N_changetointeger();
            t_changetoindex();

                E_nergy();
            F_itness();

        crossover();                
            mutate();
        Addgene();
            N_2to3();

}

GA::C_ircle()
{   
    F_irst();

        int count;
    int total;
        
        cout<<"ê?è?μü′ú′?êy£o";
    cin>>total;
    for(count=2;count<=total;count++)
           {
                cout<<endl<<endl<<"μú"<<count<<"′?μü′ú:";
        cout<<endl<<"****************";
                
                N_add2to3();
                N_changetointeger1();
        t_changetoindex1();
        
        E_nergy1();
        Makeorder1();
        Chose_super();

        N_2to3();
        N_changetointeger();
            t_changetoindex();
        E_nergy();

            F_itness();        
                
        crossover();
                mutate();
        Addgene();
            N_2to3();
        
        cout<<endl;
        cout<<"*********************************"<<endl;
        }

}

main()
{    
   GA gene1;

  /* gene1.F_irst();*/
  gene1.C_ircle();

   cout<<endl;

return(0);

}

⌨️ 快捷键说明

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