- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
模拟退火求解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--已选择
} nei
您可能关注的文档
最近下载
- 2025年教师资格考试初级中学学科知识与教学能力体育与健康试题及解答参考.docx VIP
- 燃气轮机发电机组可靠性评价指标的计算公式.PDF
- 山东省2022年度基本公共卫生服务项目经费测算和任务分工指导意见(75元)6.23 (1).xlsx VIP
- 离婚登记申请受理回执单(模板).pdf
- 2023-2024学年江苏省连云港市译林版(三起)六年级上册期末质量检测英语试卷(含答案解析).pdf
- 远程教育学丁兴富.pdf
- 2025年中考语文一轮复习阅读理解专题22 《经典常谈》(知识梳理+练习)(含答案).docx VIP
- 雾化吸入操作考核评分标准.docx
- (第五章导数与微分.doc VIP
- 哈锅600MW锅炉系统图.pdf
文档评论(0)