




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模拟退火算法解决TSP问题源程序(C+)/* 模拟退火算法解决TSP问题*/ /* 输入格式(城市坐标.in): 第行:1个整数N,表示城市的数量 第.N+1行:每行有个空格分开的整数x,y,第i+1行的x,y表示城市i的坐标 */ #include #include #include using namespace std; const int MAXN = 501; /最大城市数 const double INIT_T =2000; /初始温度 const double RATE = 0.95; /温度衰减率 const double FINAL_T = 1E-10; /终止温度 const int IN_LOOP = 13000; /内层循环次数 const int OUT_LOOP = 2000; /外层循环次数 const int P_LIMIT = 10000; /概率选择次数 struct path /定义路径结构类型 int CityMAXN; /依次遍历的城市的序号 double Length; /所有城市的路径总长度 ; int N; /城市数量 double DMAXNMAXN; /任意两个城市之间的距离 path bestpath; /最优的遍历路径 inline double dist(int x1, int y1, int x2, int y2) /计算两点之间的距离 return sqrt(double(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1); inline double totaldist(path p) /计算遍历路径P的总长度 int i; double cost = 0; for (i=1; iN; i+) cost += Dp.Cityip.Cityi+1; cost += Dp.City1p.CityN; return cost;void init() /读入数据,并初始化 int CMAXN2; /城市的坐标 int i, j; freopen(城市坐标.in, r, stdin); /freopen(结果输出.out, w, stdout); scanf(%d, &N); for (i=1; i=N; i+) scanf(%d%d, &Ci0, &Ci1); for (i=1; iN; i+) /计算任意两个城市之间的路径长度 for (j=i+1; j=N; j+) Dij = Dji = dist(Ci0, Ci1, Cj0, Cj1); for (i=1; i=N; i+) /最优解的初始状态 bestpath.Cityi = i; bestpath.Length = totaldist(bestpath); srand(unsigned)time(NULL); /* 产生新路径方法 */path getnext(path p) /新解产生函数 int x, y; path ret; ret = p; do x = rand() % N + 1; y = rand() % N + 1; while(x = y); swap(ret.Cityx, ret.Cityy); /交换两城市之间位置顺序 ret.Length = totaldist(ret); return ret; /* 退火和降温过程 */ void sa() double T; /温度 path newpath, curpath; /当前路径和新路径 int i, P_t=0, A_t=0; double delta; T = INIT_T; /赋值初始温度 curpath = bestpath; while(true) for (i=1; i=IN_LOOP; i+) newpath = getnext(curpath); /获取新路径 delta = newpath.Length - curpath.Length; if (delta rnd) curpath = newpath; P_t+; if (P_t =P_LIMIT) A_t+; break; if (curpath.Length= OUT_LOOP | T FINAL_T) break; T = T * RATE; /降温 /* 程序主函数 */int main() init(); printf(初始路径长度: %.4fn, bestpath.Length);for(int i=0;i, bestpath.City+i);printf( %d, bestpath.City1); printf(n); sa(); printf(最优路径长度: %.4fn, bestpath.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商业转让合同(15篇)
- 出纳员年终工作总结(15篇)
- 医务科上半年工作总结
- 2025广东佛山南海农商银行金融科技总监社会招聘模拟试卷及参考答案详解
- 2025黑龙江黑河市爱辉区招聘公益性岗位就业人员32人模拟试卷及答案详解(历年真题)
- 2025国航股份西南分公司乘务员岗位高校毕业生校园招聘(四川)模拟试卷附答案详解
- 不再犯错协议书7篇
- 2025广东南粤银行资金运营中心招聘考前自测高频考点模拟试题及答案详解(有一套)
- 2025年黑龙江广播电视台(黑龙江省全媒体心)第二次公开招聘事业单位编制人员60人考前自测高频考点模拟试题附答案详解(完整版)
- 2025年多导生理记录仪(8导以上)项目合作计划书
- 人民币国际化进程中跨境贸易人民币结算:现状、挑战与路径探索
- 2025-2026学年九年级英语上学期第一次月考 (江苏省连云港专用)原卷
- 2025年食品行业市场风险防范策略方案
- 2025年国有企业中层管理岗位竞聘面试技巧与预测题集
- 电动消防排烟窗施工方案
- 2025年1月浙江省高考政治真题卷含答案解析
- 宗法制度教学课件
- 2025年卫生高级职称面审答辩(消化内科)在线题库及答案(副高面审)
- 智能拐杖产品讲解
- 2025年贵州省中考英语试卷
- 血源性传播疾病暴露后处理
评论
0/150
提交评论