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