遗传算法与栅格 CWord文档下载推荐.docx
- 文档编号:16956767
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:16
- 大小:17.33KB
遗传算法与栅格 CWord文档下载推荐.docx
《遗传算法与栅格 CWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《遗传算法与栅格 CWord文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
classCLine
{public:
voidGenerateInitialPopulation(void);
voidCalculateObjectValue(void);
voidCalculateFitnessValue(void);
voidFindBestAndWorstIndividual(void);
voidPerformEvolution(void);
voidSelectionOperator(void);
voidCrossoverOperator(void);
voidMutationOperator(void);
voidOutputTextReport(void);
voidInsertOperator(void);
voidDeleOperator(intt);
voidFreeWay(void);
voidSerialWay(void);
voidReachGolf(void);
include"
Line.h"
voidmain()
{inti;
CLinex;
intMaxGeneration=50;
x.GenerateInitialPopulation();
for(i=0;
i<
120;
i++)
x.DeleOperator(i);
x.InsertOperator();
x.ReachGolf();
x.FreeWay();
x.SerialWay();
x.CalculateObjectValue();
x.CalculateFitnessValue();
x.FindBestAndWorstIndividual();
for(intgeneration=0;
generation<
MaxGeneration;
generation++)
{x.SelectionOperator();
x.CrossoverOperator();
x.MutationOperator();
x.PerformEvolution();
x.OutputTextReport();
}}
//Line.cpp
definition.h"
voidCLine:
:
ReachGolf()
{inti;
PopSize2;
if(population2[i].chrom[0]=='
0'
||population2[i].chrom[99]=='
)
population2[i].flag=0;
//不要的路径}
FreeWay()
{inti,j;
for(j=0;
j<
CHROMLENGTH2;
j++)
if(population2[i].chrom[j]=='
1'
switch(j)
{case3:
case9:
case10:
case12:
case13:
case16:
case26:
case31:
case32:
case35:
case41:
case42:
case46:
case48:
case56:
case61:
case63:
case69:
case76:
case77:
case81:
case86:
case91:
case94:
//不要的路径}}
SerialWay()//生成连续路径
{inti,j,x1,x2,y1,y2,z1,z2,s;
{for(j=0;
CHROMLENGTH2-1;
if(population2[i].chrom[0]=='
)
{population2[i].flag=0;
break;
}
else
{if(population2[i].chrom[j]=='
{z1=j;
s=j+1;
//s=Z1+1
while(population2[i].chrom[s]=='
&
&
s<
CHROMLENGTH2)
s++;
if(population2[i].chrom[s]=='
{z2=s;
x1=z1%10;
x2=z2%10;
y1=z1/10;
y2=z2/10;
if(__max(abs(x2-x1),abs(y2-y1))!
=1)
elsez1=z2;
//继续循环}}}}}
GenerateInitialPopulation(void)
srand((unsigned)time(NULL));
{population2[i].chrom[0]=population2[i].chrom[99]='
;
for(j=1;
{switch(j)
population2[i].chrom[j]='
default:
population2[i].chrom[j]=(rand()%10<
5)?
'
population2[i].chrom[CHROMLENGTH2]='
\0'
}}}
//删除操作
voidCLine:
DeleOperator(intt)
{inti,j,x1,x2,y1,y2,num=0;
{if(population2[t].chrom[i]=='
{x1=i%10;
y1=i/10;
for(j=i+1;
{if(population2[t].chrom[j]=='
{x2=j%10;
y2=j/10;
if(__max(abs(x2-x1),abs(y1-y2))==1)
num=j;
if(num!
=0)
num;
population2[t].chrom[j]='
num=0;
}}}}
//插入操作
InsertOperator()
{inti,j,x1,x2,x3,y1,y2,y3,z1,z2,N,flag,a,zhi,s;
i++)
flag=1;
{z2=s;
while(__max(abs(x2-x1),abs(y2-y1))!
=1)//z1与z2不相邻时
{x3=(x1+x2)/2;
y3=(y1+y2)/2;
N=x3+10*y3;
switch(N)
flag=0;
{if(population2[i].chrom[N]=='
)//新插入点已在路径上
else{population2[i].chrom[N]='
j=0;
}//插入成功继续从头插入令j=0}}
if(flag==1)break;
if(flag==0)
if((N-1)!
=z1&
(N-1)!
=z2)
{flag=1;
switch(N-1)
{
if(population2[i].chrom[N-1]=='
else{population2[i].chrom[N-1]='
if((N+1)!
(N+1)!
{flag=1;
switch(N+1)
{if(population2[i].chrom[N+1]=='
else{population2[i].chrom[N+1]='
if(flag==0)break;
zhi=1;
for(a=0;
a<
a++)
if(population2[i].chrom[a]!
='
population2[i].chrom[a]!
{zhi=0;
if(zhi==0)break;
if(flag==0||population2[i].chrom[0]=='
||population2[i].chrom[CHROMLENGTH2]=='
{population2[i].flag=0;
elsepopulation2[i].flag=1;
//计算目标函数值
CalculateObjectValue(void)
{inti,j,x1,x2,y1,y2,N1,N2,num,s;
doublesum;
{if(population2[i].flag==1)
{N1=0;
sum=0;
num=1;
while(j<
{s=j+1;
{num++;
N2=s;
x1=N1%10;
x2=N2%10;
y1=N1/10;
y2=N2/10;
sum+=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
//球两个栅格之间的距离}
j=s;
N1=N2;
if(j>
=CHROMLENGTH2)
population2[i].value=(1.0+1.0/sqrt(num-1))*sum;
elsepopulation2[i].value=0;
//计算适应度
CalculateFitnessValue(void)
doubletemp;
{
if(FunctionMode2==MAXIMIZATION2)
{if((population2[i].value+Cmin2)>
0.0)
{temp=Cmin2+population2[i].value;
else{temp=0.0;
if(FunctionMode2==MINIMIZATION2)
{if(population2[i].value<
Cmax2)
{temp=Cmax2-population2[i].value;
population2[i].fitness=temp;
elsepopulation2[i].fitness=0.0;
//求最佳个体和最差个体
FindBestAndWorstIndividual(void)
{inti,s=0;
doublesum=0.0;
while(population2[s].flag!
=1&
PopSize2)
if(population2[s].flag==1&
{bestindividual2=population2[s];
worstindividual2=population2[s];
for(i=1+s;
{if(population2[i].fitness>
bestindividual2.fitness)
{bestindividual2=population2[i];
best_index2=i;
elseif(population2[i].fitness<
worstindividual2.fitness)
{worstindividual2=population2[i];
worst_index2=i;
sum+=population2[i].fitness;
if(generation2==0)
{currentbest2=bestindividual2;
elseif(bestindividual2.fitness>
currentbest2.fitness&
bestindividual2.flag==1)
{cout<
<
currentbest2.chrom[i];
if((i+1)%10==0)
cout<
endl;
//演示评价结果(精英保留)
PerformEvolution(void)
{if(bestindividual2.fitness>
currentbest2.fitness)
{currentbest2=population2[best_index2];
population2[worst_index2]=currentbest2;
else{population2[worst_index2]=currentbest2;
//比例选择算法
//首先用rand()函数产生0~1间的选择算子,当适应度累计值不为零时,比较各个体所占总的适应度百分比的累计和与选择算子,直到达到选择算子的值那个个体就被选出,即适应度为fi的个体以fi/∑fk的概率继续存在;
显然,个体适应度愈高,被选中的概率愈大。
但是,适应度小的个体也有可能被选中,以便增加下一代群体的多样性。
SelectionOperator(void)
{inti,index;
doublep,sum=0.0;
doublecfitness[POPSIZE2];
structindividual2newpopulation[POPSIZE2];
{sum+=population2[i].fitness;
{cfitness[i]=population2[i].fitness/sum;
for(i=1;
i++)////计算中间累计适应度值
{cfitness[i]=cfitness[i-1]+cfitness[i];
{p=rand()%1000/1000.0;
index=0;
while(p>
cfitness[index])
index++;
newpopulation[i]=population2[index];
{population2[i]=newpopulation[i];
//交叉
CrossoverOperator(void)
{inti,j,s,k;
intindex[POPSIZE2],flag[CHROMLENGTH2];
intpoint,temp;
doublep;
charch;
i++)//个体排序
{index[i]=i;
{point=rand()%(PopSize2-i);
temp=index[i];
index[i]=index[point+i];
index[point+i]=temp;
PopSize2-1;
i+=2)
if(p<
Pc2)
{s=0;
//相同点交叉
for(k=0;
k<
k++)
if(population2[index[i]].chrom[k]==population2[index[i+1]].chrom[k]&
population2[index[i]].chrom[k]=='
{flag[s+1]=k;
if(s)
point=flag[rand()%s+1];
elsepoint=rand()%(CHROMLENGTH2-1)+1;
//单点交叉
for(j=point;
{ch=population2[index[i]].chrom[j];
population2[index[i]].chrom[j]=population2[index[i+1]].chrom[j];
population2[index[i+1]].chrom[j]=ch;
//变异
Mutatio
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 遗传算法与栅格 遗传 算法 栅格