人工智能TSP旅行商问题实验报告Word文档格式.docx

上传人:b****4 文档编号:14338591 上传时间:2022-10-22 格式:DOCX 页数:10 大小:74.91KB
下载 相关 举报
人工智能TSP旅行商问题实验报告Word文档格式.docx_第1页
第1页 / 共10页
人工智能TSP旅行商问题实验报告Word文档格式.docx_第2页
第2页 / 共10页
人工智能TSP旅行商问题实验报告Word文档格式.docx_第3页
第3页 / 共10页
人工智能TSP旅行商问题实验报告Word文档格式.docx_第4页
第4页 / 共10页
人工智能TSP旅行商问题实验报告Word文档格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

人工智能TSP旅行商问题实验报告Word文档格式.docx

《人工智能TSP旅行商问题实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《人工智能TSP旅行商问题实验报告Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。

人工智能TSP旅行商问题实验报告Word文档格式.docx

2要求求出问题最优解,若得不出最优解,请分析原因;

3对实验中的几个算法控制参数进行仔细定义,并能通过实验选择参数的最佳值;

4要求界面显示每次迭代求出的局部最优解和最终求出的全局最优解。

四数据结构

请说明染色体个体和群体的定义方法。

structRanSeTi//染色体的个体的定义方法

{

intcity[cities];

//基因的排列(即城市的顺序,路径的组织)

intadapt;

//记录适应度

doublep;

//记录其在种群中的幸存概率

}RanSeTi[num],RanSeTitemp[num];

//用数组来存储染色体群体方法

五实验算法

1说明算法中对染色体的编码方法,适应度函数定义方法

1)染色体的编码方法:

即为染色体个体定义过程中生成的基因排列(路径中城市的顺序)

intcity[cities];

intadapt;

doublep;

2)适应度函数定义方法:

评价函数即适应度函数,在遗传算法中用来计算一个染色体优劣的函数。

在进行遗传操作和种群进化的时候,每个染色体的适应值是决定它是否进入下一轮种群进化的关键因素。

适应值高的函数被选作新一代个体的可能性就会大。

TSP问题中适应度函数常取路径长度的倒数(或倒数的相关函数),如:

其中,N是个调节参数,根据实验情况进行确定。

for(i=0;

i<

num;

i++)

{

sumdistance=0;

for(j=1;

j<

cities;

j++)

{

n1=RanSeTi[i].city[j-1];

n2=RanSeTi[i].city[j];

sumdistance+=distance[n1][n2];

}

RanSeTi[i].adapt=sumdistance;

//每条染色体的路径总和

biggestsum+=sumdistance;

//种群的总路径

}

2采用的选择、交叉、变异操作算子的具体操作

1)选择操作

我们定义f(xi)为第i(i=1,2,3.....popsize)个染色体的适应度,则每个个体被选中的概率

是:

本题中具体使用的是期望值方法

//初始化梯度概率

for(i=0;

gradient[i]=0.0;

xuanze[i]=0.0;

gradient[0]=group[0].p;

for(i=1;

gradient[i]=gradient[i-1]+group[i].p;

srand((unsigned)time(NULL));

//随机产生染色体的存活概率

xuanze[i]=(rand()%100);

xuanze[i]/=100;

//选择能生存的染色体

for(j=0;

if(xuanze[i]<

gradient[j])

{

xuan[i]=j;

//第i个位置存放第j个染色体

break;

}

}

//拷贝种群

grouptemp[i].adapt=group[i].adapt;

grouptemp[i].p=group[i].p;

grouptemp[i].city[j]=group[i].city[j];

//数据更新

temp=xuan[i];

group[i].adapt=grouptemp[temp].adapt;

group[i].p=grouptemp[temp].p;

group[i].city[j]=grouptemp[temp].city[j];

2)交叉操作:

交叉算子就是把两个父代个体的部分结构加以替换重组而生成新个体的操作。

部分匹配交叉、顺序交叉、改进的启发式顺序交叉

//temp1号染色体和temp2染色体交配

t/2;

point1=rand()%cities;

point2=rand()%cities;

for(j=temp1;

if(jiaopeiflag[j]==1)

temp1=j;

break;

for(j=temp1+1;

temp2=j;

//进行基因交配

if(point1>

point2)//保证point1<

=point2

temp=point1;

point1=point2;

point2=temp;

memset(map1,-1,sizeof(map1));

memset(map2,-1,sizeof(map2));

//断点之间的基因产生映射

for(k=point1;

k<

=point2;

k++)

map1[group[temp1].city[k]]=group[temp2].city[k];

map2[group[temp2].city[k]]=group[temp1].city[k];

//断点两边的基因互换

for(k=0;

point1;

temp=group[temp1].city[k];

group[temp1].city[k]=group[temp2].city[k];

group[temp2].city[k]=temp;

for(k=point2+1;

//处理产生的冲突基因

for(kk=point1;

kk<

kk++)

if(group[temp1].city[k]==group[temp1].city[kk])

group[temp1].city[k]=map1[group[temp1].city[k]];

if(group[temp2].city[k]==group[temp2].city[kk])

group[temp2].city[k]=map2[group[temp2].city[k]];

temp1=temp2+1;

3)变异操作

TSP问题中,经常采取的变异操作主要有:

位点变异、逆转变异、对换变异、插入变异。

//随机产生变异概率

bianyip[i]=(rand()%100);

bianyip[i]/=100;

//确定可以变异的染色体

t=0;

if(bianyip[i]<

pm)

bianyiflag[i]=1;

t++;

//变异操作,即交换染色体的两个节点

if(bianyiflag[i]==1)

temp1=rand()%10;

temp2=rand()%10;

point=group[i].city[temp1];

group[i].city[temp1]=group[i].city[temp2];

group[i].city[temp2]=point;

3实验中采用的算法参数的最佳选择值是多少

#definecities10/30//城市的个数

#defineMAXX150//迭代次数

#definepc0.72/

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

当前位置:首页 > 小学教育 > 语文

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

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