- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
作业2:TSP问题—Matlab实现1120140359 杜剑交通运输规划与管理问题描述旅行商问题(Travelling Salesman Problem),要求每个城市只经过一次,最终回到原点,目标函数是路径里程最小。迄今为止,此问题未找到有效的精确解算法,此处采用模拟退火求满意解。模拟退火算法也属于一种改善法,不断改进解的质量,但模拟退火不属于并行算法,收敛速度较慢。退火设定多级温度界限,外层温度一级一级下降,t= a*t。每一层外层温度t 中,循环内部分子链markov_length温度降低过程,考察固体内能选择并记录优化解。解决TSP问题也可以采用构筑法,它是一种逐步构造解得策略,每一步都寻求当时的最佳结果,循环至得到完整的满意解。但此方法每一步只重视暂时的最佳效益,缺少全局最优化的理念,也没有解得逐步改善过程。但构筑法有助于初始时获得一条较优的完整解,可以与改善法配合使用,用于生成初始解。由于TSP问题的初始解较易构筑,本文未采用构筑法获得初始解。Matlab编码数值输入与参数设计:coordinates是城市的坐标点数据,三列分别为城市序号、横坐标、纵坐标。退火参数包括初始温度t0=100,终止温度tf=3,衰减系数a=0.99,链长度markov_length=1000amount为城市的数量,amount=size(coordinates,1)生成初代解:sol_new=1:amount,效果如下:sol_new = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31设置温度循环:a=0.99;t0=100; tf=3; t=t0;while t=tf{ 内层循环 }t=t.*a;end路径解得更新:更新策略,一定概率选择采用两交换或三交换。if (rand0.5)% 此时采用两交换策略ind1=0;ind2=0;while(ind1==ind2) ind1=ceil(rand.*amount);ind2=ceil(rand.*amount);end %while语句保证不同的交换点tmp1=sol_new(ind1);sol_new(ind1)=sol_new(ind2); %2úéúD??asol_new(ind2)=tmp1;%更新解 else %与上面if对应,rand=0.5情况,采用三交换 ind1=0;ind2=0;ind3=0;while(ind1==ind2)|(ind1==ind3)|(ind2==ind3)|(abs(ind1-ind2)==1) ind1=ceil(rand.*amount); ind2=ceil(rand.*amount); ind3=ceil(rand.*amount); end%while语句保证三个交换点都不同 tmp1=ind1;tmp2=ind2;tmp3=ind3;if (ind1ind2)(ind2ind3)elseif (ind1ind3)(ind3ind2) ind2=tmp3;ind3=tmp2;elseif (ind2ind1)(ind1ind3) ind1=tmp2;ind2=tmp1;elseif (ind2ind3)(ind3ind1) ind1=tmp2;ind2=tmp3;ind3=tmp1;elseif (ind3ind1)(ind1ind2) ind1=tmp3;ind2=tmp1;ind3=tmp2;elseif (ind3ind2)(ind2ind1) ind1=tmp3;ind2=tmp2;ind3=tmp1; end%为三个交换点排序,此语句要求ind1ind2ind3tmplist1=sol_new((ind1+1):(ind2-1));sol_new((ind1+1):(ind1+ind3-ind2+1))=sol_new((ind2):(ind3));sol_new((ind1+ind3-ind2+2):ind3)=tmplist1;%更新解end计算内能:E_new=0;fori=1:(amount-1)
文档评论(0)