📄 用vc++编的遗传算法.txt
字号:
#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 + -