遗传算法程序Word格式文档下载.docx

上传人:b****5 文档编号:20558353 上传时间:2023-01-24 格式:DOCX 页数:17 大小:16.84KB
下载 相关 举报
遗传算法程序Word格式文档下载.docx_第1页
第1页 / 共17页
遗传算法程序Word格式文档下载.docx_第2页
第2页 / 共17页
遗传算法程序Word格式文档下载.docx_第3页
第3页 / 共17页
遗传算法程序Word格式文档下载.docx_第4页
第4页 / 共17页
遗传算法程序Word格式文档下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

遗传算法程序Word格式文档下载.docx

《遗传算法程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《遗传算法程序Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。

遗传算法程序Word格式文档下载.docx

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];

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1