遗传算法程序Word格式文档下载.docx
《遗传算法程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《遗传算法程序Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
voidmutation(void);
voidrevise(void);
/*avoidobstacle*/
voidjudge(void);
/*whetherinsideoroutsideobstacle*/
voidsort_newpop(void);
voidsort_oldpop(void);
intrandom(intn)
{
return(rand()%n);
}
doubleobjfunc(doublex[])
doublef;
f=0*x[1]+1*x[2];
/*whetherthex[2]isneeded*/
return(f);
intpop_size,maxgen,gen,m[N+1],mt,sign=-1;
doublepc,pm,ux[N+1],lx[N+1];
POPoldpop[MAX_POP],newpop[MAX_POP];
voidmain(void)
inti;
mp.mpop.eval=9999;
gen=0;
srand((unsigned)time(NULL));
、
ofstreamfout1("
f01.dat"
);
initialize();
for(i=1;
i<
=pop_size;
i++)
newpop[i]=oldpop[i];
do
{
gen++;
generation();
statistics(newpop);
sort_newpop();
fout1<
<
"
gen="
gen<
"
;
for(i=1;
i<
=20;
i++)
fout1<
v"
newpop[i].eval<
endl<
endl;
}
select();
select"
oldpop[i]=newpop[i];
}while(gen<
maxgen);
cout<
bestchromosome="
mp.it<
cout<
v("
=mt;
mp.mpop.chrom[i];
)"
f("
cout.flags(ios:
:
fixed);
/*以定点方式显示float*/
cout.precision(6);
/*当格式为ios:
fixed时,精度为6*/
mp.mpop.x[1]<
"
mp.mpop.x[2]<
mp.mpop.eval<
fout1.close();
voidinitialize(void)
initdata();
mt=26;
initpop();
statistics(oldpop);
voidinitdata(void)
pop_size=1900;
pc=0.40;
pm=0.70;
maxgen=400;
voidinitpop(void)
inti,j;
i++)
for(j=1;
j<
j++)
oldpop[i].chrom[j]=random(10);
}
revise();
i++)/*whethertheoldpop[i].x[2]isneeded*/
oldpop[i].x[1]=decode1(oldpop[i].chrom);
oldpop[i].x[2]=decode2(oldpop[i].chrom);
oldpop[i].eval=objfunc(oldpop[i].x);
doubledecode1(intchrom[])
doublex=0,length=0;
=mt+1;
i++)/*chrom[mt+1]isthelastone*/
{
length=sqrt((chrom[i]-chrom[i-1])*(chrom[i]-chrom[i-1])+1);
x=x+length;
return(x);
doubledecode2(intchrom[])
doublex=0,curvity=0;
i++)/*chrom[mt]isthelastone*/
curvity=abs(2*chrom[i]-chrom[i-1]-chrom[i+1]);
x=x+curvity;
voidstatistics(POPstat[MAX_POP])
inti,j,npop;
doubleminpop;
sign=-sign;
minpop=stat[1].eval;
npop=1;
for(i=2;
if(minpop>
stat[i].eval)
minpop=stat[i].eval;
npop=i;
if(mp.mpop.eval>
stat[npop].eval)
mp.it=gen;
mp.mpop=stat[npop];
sign="
sign<
gen="
number="
npop<
stat[npop].chrom[j];
stat[npop].x[1]<
stat[npop].x[2]<
stat[npop].eval<
voidgeneration(void)
crossover();
mutation();
newpop[i].x[1]=decode1(newpop[i].chrom);
newpop[i].x[2]=decode2(newpop[i].chrom);
newpop[i].eval=objfunc(newpop[i].x);
judge();
voidselect(void)
inti=1,j=1,t=1;
POPtemp[MAX_POP];
sort_oldpop();
while(t<
=pop_size)/*sortnewpop*/
if(oldpop[i].eval<
=newpop[j].eval)
temp[t++]=oldpop[i++];
else
temp[t++]=newpop[j++];
i<
newpop[i]=temp[i];
voidcrossover(void)
inti,j,fl,cpop,pos,tmp[MAX_STRING];
doubler[MAX_POP];
r[i]=(double)rand()/RAND_MAX;
for(fl=0,i=1;
if((fl==0)&
&
(r[i]<
=pc))
cpop=i;
fl=1;
elseif((fl==1)&
=pc))
pos=random(mt-1)+1;
for(j=pos+1;
j++)
{
tmp[j]=newpop[cpop].chrom[j];
newpop[cpop].chrom[j]=newpop[i].chrom[j];
newpop[i].chrom[j]=tmp[j];
fl=0;
voidmutation(void)
inti,j,cpop,pos1,pos2,tmp,pos;
doubler;
POPtempop[MAX_POP];
r=(double)rand()/RAND_MAX;
if(r<
=pm)
pos=random(mt)+1;
/*?
?
*/
newpop[i].chrom[pos]=random(10);
pos=random(mt)+1;
for(j=1;
=3;
{
tempop[1].chrom[j]=newpop[i].chrom[j];
}
for(j=4;
=5;
tempop[1].chrom[j]=newpop[i].chrom[j+21];
for(j=6;
=9;
tempop[1].chrom[j]=newpop[i].chrom[j-2];
for(j=10;
=15;
tempop[1].chrom[j]=newpop[i].chrom[j+7];
for(j=16;
=24;
tempop[1].chrom[j]=newpop[i].chrom[j-8];
for(j=25;
=26;
pos1=random(5)+1;
/*1-5*/
pos2=random(5)+1;
tmp=tempop[1].chrom[pos1];
tempop[1].chrom[pos1]=tempop[1].chrom[pos2];
tempop[1].chrom[pos2]=tmp;
pos1=random(10)+6;
/*6-15*/
pos2=random(10)+6;
pos1=random(9)+16;
/*16-24*/
pos2=random(9)+16;
pos1=random
(2)+25;
/*25-26*/
pos2=random
(2)+25;
newpop[i].chrom[j]=tempop[1].chrom[j];
=5;
newpop[i].chrom[j+21]=tempop[1].chrom[j];
=9;
newpop[i].chrom[j-2]=tempop[1].chrom[j];
=15;
newpop[i].chrom[j+7]=tempop[1].chrom[j];
for(j=16;
=24;
newpop[i].chrom[j-8]=tempop[1].chrom[j];
for(j=25;
=26;
voidrevise(void)/*obstacleavoidance*/
switch(j)
case4:
case5:
case6:
case7:
case17:
case18:
case19:
case20:
case21:
case22:
if((0<
=oldpop[i].chrom[j])&
(oldpop[i].chrom[j]<
=5))/*insideobstacle*/
{
oldpop[i].chrom[j]=random(4)+6;
}
break;
case8:
case9:
case10:
case11:
case12:
case13:
case14:
case15:
case16:
=oldpop[i].chrom[j])&
(oldpop[i].chrom[j]<
=7))
{
oldpop[i].chrom[j]=random
(2)+8;
case23:
case24:
=4))
oldpop[i].chrom[j]=random(5)+5;
}
case1:
case2:
case3:
case25:
case26:
oldpop[i].chrom[j]=random(10);
default:
break;
voidjudge(void)/*whetherinsideoroutsideobstacle*/
=newpop[i].chrom[j])&
(newpop[i].chrom[j]<
newpop[i].eval=9999;
=3))
newpop[i].eval=9999;
voidsort_newpop(void)/*newpop+oldpopfrombesttoworst*/
inti,j,k;
i++)/*sortnewpop*/
minpop=newpop[i].eval;
k=i+1;
for(j=k;
j<
{
newpop[j].eval)
minpop=newpop[j].eval;
temp[1]=newpop[j];
newpop[j]=newpop[i];
newpop[i]=temp[1];
}
}
voidsort_oldpop(void)/*newpop+oldpopfrombesttoworst*/
minpop=oldpop[i].eval;
oldpop[j].eval)
minpop=oldpop[j].eval;
temp[1]=oldpop[j];
oldpop[j]=oldpop[i];
oldpop[i]=temp[1];