分别把前四个函数存成m文件,再运行最后一个。

  1. swap.m
  2. function [ newpath , position ] = swap( oldpath , number )
  3. % oldpath
  4. % number
  5. % position newpath
  6. m = length( oldpath ) ; %
  7. newpath = zeros( number , m ) ;
  8. position = sort( randi( m , number , 2 ) , 2 ); %
  9. for i = 1 : number
  10. newpath( i , : ) = oldpath ;
  11. %
  12. newpath( i , position( i , 1 ) ) = oldpath( position( i , 2 ) ) ;
  13. newpath( i , position( i , 2 ) ) = oldpath( position( i , 1 ) ) ;
  14. end
  15.  
  16. pathfare.m
  17. function [ objval ] = pathfare( fare , path )
  18. % path objval
  19. % path 1 n ,代 访
  20. % fare
  21. [ m , n ] = size( path ) ;
  22. objval = zeros( 1 , m ) ;
  23. for i = 1 : m
  24. for j = 2 : n
  25. objval( i ) = objval( i ) + fare( path( i , j - 1 ) , path( i , j ) ) ;
  26. end
  27. objval( i ) = objval( i ) + fare( path( i , n ) , path( i , 1 ) ) ;
  28. end
  29.  
  30. distance.m
  31. function [ fare ] = distance( coord )
  32. %
  33. % fare coord
  34. [ v , m ] = size( coord ) ; % m
  35. fare = zeros( m ) ;
  36. for i = 1 : m %
  37. for j = i : m %
  38. fare( i , j ) = ( sum( ( coord( : , i ) - coord( : , j ) ) .^ 2 ) ) ^ 0.5 ;
  39. fare( j , i ) = fare( i , j ) ; %
  40. end
  41. end
  42.  
  43. myplot.m
  44. function [ ] = myplot( path , coord , pathfar )
  45. %
  46. % path coord
  47. % pathfar path
  48. len = length( path ) ;
  49. clf ;
  50. hold on ;
  51. title( [ '近似最短路径如下,路程为' , num2str( pathfar ) ] ) ;
  52. plot( coord( 1 , : ) , coord( 2 , : ) , 'ok');
  53. pause( 0.4 ) ;
  54. for ii = 2 : len
  55. plot( coord( 1 , path( [ ii - 1 , ii ] ) ) , coord( 2 , path( [ ii - 1 , ii ] ) ) , '-b');
  56. x = sum( coord( 1 , path( [ ii - 1 , ii ] ) ) ) / 2 ;
  57. y = sum( coord( 2 , path( [ ii - 1 , ii ] ) ) ) / 2 ;
  58. text( x , y , [ '(' , num2str( ii - 1 ) , ')' ] ) ;
  59. pause( 0.4 ) ;
  60. end
  61. plot( coord( 1 , path( [ 1 , len ] ) ) , coord( 2 , path( [ 1 , len ] ) ) , '-b' ) ;
  62. x = sum( coord( 1 , path( [ 1 , len ] ) ) ) / 2 ;
  63. y = sum( coord( 2 , path( [ 1 , len ] ) ) ) / 2 ;
  64. text( x , y , [ '(' , num2str( len ) , ')' ] ) ;
  65. pause( 0.4 ) ;
  66. hold off ;
  67.  
  68. clear;
  69. %
  70. Coord = ... % Coordinates
  71. [ 0.6683 0.6195 0.4 0.2439 0.1707 0.2293 0.5171 0.8732 0.6878 0.8488 ; ...
  72. 0.2536 0.2634 0.4439 0.1463 0.2293 0.761 0.9414 0.6536 0.5219 0.3609 ] ;
  73. t0 = 1 ; % t0
  74. iLk = 20 ; % iLk
  75. oLk = 50 ; % oLk
  76. lam = 0.95 ; % λ lambda
  77. istd = 0.001 ; % istd
  78. ostd = 0.001 ; % ostd
  79. ilen = 5 ; %
  80. olen = 5 ; %
  81. %
  82. m = length( Coord ) ; % m
  83. fare = distance( Coord ) ; % fare
  84. path = 1 : m ; % path
  85. pathfar = pathfare( fare , path ) ; % path fare
  86. ores = zeros( 1 , olen ) ; %
  87. e0 = pathfar ; % e0
  88. t = t0 ; % t
  89. for out = 1 : oLk % 退
  90. ires = zeros( 1 , ilen ) ; %
  91. for in = 1 : iLk %
  92. [ newpath , v ] = swap( path , 1 ) ; %
  93. e1 = pathfare( fare , newpath ) ; %
  94. % Metropolis
  95. r = min( 1 , exp( - ( e1 - e0 ) / t ) ) ;
  96. if rand < r
  97. path = newpath ; %
  98. e0 = e1 ;
  99. end
  100. ires = [ ires( 2 : end ) e0 ] ; %
  101. % :连 ilen istd
  102. if std( ires , 1 ) < istd
  103. break ;
  104. end
  105. end
  106. ores = [ ores( 2 : end ) e0 ] ; %
  107. % :连 olen ostd
  108. if std( ores , 1 ) < ostd
  109. break ;
  110. end
  111. t = lam * t ;
  112. end
  113. pathfar = e0 ;
  114. %
  115. fprintf( '近似最优路径为:\n ' )
  116. %disp( char( [ path , path(1) ] + 64 ) ) ;
  117. disp(path)
  118. fprintf( '近似最优路径路程\tpathfare=' ) ;
  119. disp( pathfar ) ;
  120. myplot( path , Coord , pathfar ) ;

  

模拟退火解TSP问题MATLAB代码的更多相关文章

  1. 调试和运行matlab代码(源程序)的技巧和教程

    转载请标明出处:专注matlab代码下载的网站http://www.downma.com/ 本文主要给大家分享使用matlab编写代码,完成课程设计.毕业设计或者研究项目时,matlab调试程序的技巧 ...

  2. 使用ecilpse(Java)调用Matlab代码

    1 安装java环境: http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载JDK最新版本并安装,CloudSim ...

  3. 一阶RC高通滤波器详解(仿真+matlab+C语言实现)

    文章目录 预备知识 关于电容 HPF的推导 simulink 仿真 simulink 运行结果 matlab 实现 matlab 运行结果 C语言实现 如果本文帮到了你,帮忙点个赞: 如果本文帮到了你 ...

  4. 如何加速MATLAB代码运行

    学习笔记 V1.0 2015/4/17 如何加速MATLAB代码运行 概述 本文源于LDPCC的MATLAB代码,即<CCSDS标准的LDPC编译码仿真>.由于代码的问题,在信息位长度很长 ...

  5. 多分类问题中,实现不同分类区域颜色填充的MATLAB代码(demo:Random Forest)

    之前建立了一个SVM-based Ordinal regression模型,一种特殊的多分类模型,就想通过可视化的方式展示模型分类的效果,对各个分类区域用不同颜色表示.可是,也看了很多代码,但基本都是 ...

  6. 卷积相关公式的matlab代码

    取半径=3 用matlab代码实现上式公式: length=3;for Ki = 1:length for Kj = 1:length for Kk = 1:length Ksigma(Ki,Kj,K ...

  7. JAVA调用matlab代码

    做实验一直用的matlab代码,需要嵌入到java项目中,matlab代码拼拼凑凑不是很了解,投机取巧采用java调用matlab的方式解决. 1.    matlab版本:matlabR2014a ...

  8. 直方图均衡化与Matlab代码实现

    昨天说了,今天要好好的来解释说明一下直方图均衡化.并且通过不调用histeq函数来实现直方图的均衡化. 一.直方图均衡化概述 直方图均衡化(Histogram Equalization) 又称直方图平 ...

  9. 将labelme 生成的.json文件进行可视化的代码+label.png 对比度处理的matlab代码

    labelme_to_dataset 指令的代码实现: show.py文件 #!E:\Anaconda3\python.exe import argparse import json import o ...

随机推荐

  1. WPF界面设计中常用的一些代码片段及属性

    一.窗体去掉标题栏.消除掉标题栏后的白边,把窗体置于屏幕中间,窗口大小不能改变. WindowStyle="None" AllowsTransparency="True& ...

  2. Activiti 接收任务活动

    流程中往往需要特定人接受任务并进行一定操作才能继续进行下去. 代码如下 import java.io.InputStream; import org.activiti.engine.ProcessEn ...

  3. java线程队列

    工作原理 1.线程池刚创建时,里面没有一个线程.任务队列是作为参数传进来的.不过,就算队列里面有任务,线程池也不会马上执行它们. 2.当调用 execute() 方法添加一个任务时,线程池会做如下判断 ...

  4. Python2 Python3 urllib方法对应

    Python2 name Python3 nameurllib.urlopen() urllib.request.urlopen()urllib2.urlopen() urllib.request.u ...

  5. 新增的Java MapReduce API

    http://book.51cto.com/art/201106/269647.htm Hadoop的版本0.20.0包含有一个新的 Java MapReduce API,有时也称为"上下文 ...

  6. 图解nginx配置负载均衡

    1. 在Linux上准备两份tomcat 2. 修改两份tomcat的端口号 修改的端口如图所示: 3. 启动两个tomcat服务器 4. 修改两个服务器上的主页方便测试区分 5. 在nginx配置文 ...

  7. CA证书制作

    目录 手动制作CA证书 1.安装 CFSSL 2.初始化cfssl 3.创建用来生成 CA 文件的 JSON 配置文件 4.创建用来生成 CA 证书签名请求(CSR)的 JSON 配置文件 5.生成C ...

  8. Django项目:CRM(客户关系管理系统)--74--64PerfectCRM实现CRM课程排名详情

    #urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...

  9. day66test

    作业 1. 先有一下成绩单数据 scores = [ { name: 'Bob', math: 97, chinese: 89, english: 67 }, { name: 'Tom', math: ...

  10. Sql Server实现自动增长

    在学习中遇到这个问题 数据库里有编号字段 BH00001 BH00002 BH00003 BH00004 如何实现自动增长 --下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号. --得 ...