- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
模拟退火求解TSP问题实验报告
模拟退火求解TSP问题实验报告
实验要求:
旅行商问题(Travelling Salesman Problem, 简记TSP,亦称货郎担问题):设有n个城市和距离矩阵D=[dij],其中dij表示城市i到城市j的距离,i,j=1,2 … n,则问题是要找出遍访每个城市恰好一次的一条回路并使其路径长度为最短。
实验思路:
1)指标函数:访问所有城市的路径的长度
2)新解的产生: 选择两个城市间的位置交换方式得到一个可能解的邻域,在随机选择一个解
3)新解的接受准则:exp(-(fj-fi)/t)
4)初始温度的确定:产生一组解,使其平均接受概率为0.9
5)内循环次数:n
6)温度的衰减系数:0.95
7)算法的停止准则:温度低于.01获没有新解产生
实验代码:
/*
指标函数:访问所有城市的路径的长度
新解的产生: 选择两个城市间的位置交换方式得到一个可能解的邻域,在随机选择一个解
新解的接受准则:exp(-(fj-fi)/t)
初始温度的确定:产生一组解,使其平均接受概率为.9
内循环次数:n
温度的衰减系数:.95
算法的停止准则:温度低于.01获没有新解产生
*/
#includestdlib.h
#includestdio.h
#includemath.h
#includetime.h
const long MAX=100;
struct
double x,y;
} city[MAX];
//函数:读入数据--返回城市数目
long initial()
{
long i,n;
//读入城市的数目、x坐标、y坐标
scanf(%d,n);
for(i=0;in;i++)
scanf(%lf%lf,city[i].x,city[i].y);
return n;
}
//函数:计算指标函数f(i)的值
double cal_f(long *path,long n)
{
long pre,i;
double len;
len=0.0;
pre=path[0];
for(i=1;in;i++){
len+=sqrt((city[path[i]].x-city[pre].x)*(city[path[i]].x-city[pre].x)
+(city[path[i]].y-city[pre].y)*(city[path[i]].y-city[pre].y));
pre=path[i];
}
len+=sqrt((city[path[0]].x-city[pre].x)*(city[path[0]].x-city[pre].x)
+(city[path[0]].y-city[pre].y)*(city[path[0]].y-city[pre].y));
return len;
}
void generate_path(long *path,long n);
//函数:计算初始温度
double cal_temperature(long num)
{
long j,n;
double t,sum,fi,fj;
long path[MAX];
t=1.0;
n=20*num;
while(1){
sum=0.0;
generate_path(path,num);
fi=cal_f(path,num);
for(j=0;jn;j++){
generate_path(path,num);
fj=cal_f(path,num);
sum+=fi-fj;
fi=fj;
}
if(exp(-(sum/n)/t)=0.9)
break;
t*=1.05;
};
return t;
}
//函数:生成一个序列作为解
void generate_path(long *path,long n)
{
long i,cnt,temp;
long mark[MAX];
for(i=0;in;i++)
mark[i]=0;
cnt=0;
//srand(time(NULL)); //pay attention to随机数的生成??
while(cntn){
temp=rand()%n;
if(mark[temp]==0){
mark[temp]=1;
path[cnt]=temp;
cnt++;
}
}
}
long main()
{
freopen(10.txt,r,stdin);
clock_t start,finish;
struct Neighbour{
long path[MAX];
bool flag;//true--未选择;false--已选择
} ne
您可能关注的文档
最近下载
- 蔬菜配送合同.docx VIP
- 2024年3月16日四川省绵阳市直遴选笔试真题及解析.docx VIP
- 2025年新人教版数学二年级上册全册课件.pptx
- 电气测量技术(完整课件).pdf VIP
- 中国国家标准 GB/T 22749-2022饮食加工设备 电动设备 切片机.pdf
- 2022变应性支气管肺曲霉病诊治专家共识修订版(完整版).docx VIP
- 高中班级管理制度以及实施细则.doc
- 《HBZ112-1986-材料疲劳试验统计分析方法》.pdf VIP
- 个人简历——【标准模板】.doc VIP
- 2013 kid box 3 yle单元测试答案键test answer key.pdf VIP
文档评论(0)