模拟退火解TSP问题MATLAB代码
分别把前四个函数存成m文件,再运行最后一个。
- swap.m
- function [ newpath , position ] = swap( oldpath , number )
- % 对 oldpath 进 行 互 换 操 作
- % number 为 产 生 的 新 路 径 的 个 数
- % position 为 对 应 newpath 互 换 的 位 置
- m = length( oldpath ) ; % 城 市 的 个 数
- newpath = zeros( number , m ) ;
- position = sort( randi( m , number , 2 ) , 2 ); % 随 机 产 生 交 换 的 位 置
- for i = 1 : number
- newpath( i , : ) = oldpath ;
- % 交 换 路 径 中 选 中 的 城 市
- newpath( i , position( i , 1 ) ) = oldpath( position( i , 2 ) ) ;
- newpath( i , position( i , 2 ) ) = oldpath( position( i , 1 ) ) ;
- end
- pathfare.m
- function [ objval ] = pathfare( fare , path )
- % 计 算 路 径 path 的 代 价 objval
- % path 为 1 到 n 的 排 列 ,代 表 城 市 的 访 问 顺 序 ;
- % fare 为 代 价 矩 阵 , 且 为 方 阵 。
- [ m , n ] = size( path ) ;
- objval = zeros( 1 , m ) ;
- for i = 1 : m
- for j = 2 : n
- objval( i ) = objval( i ) + fare( path( i , j - 1 ) , path( i , j ) ) ;
- end
- objval( i ) = objval( i ) + fare( path( i , n ) , path( i , 1 ) ) ;
- end
- distance.m
- function [ fare ] = distance( coord )
- % 根 据 各 城 市 的 距 离 坐 标 求 相 互 之 间 的 距 离
- % fare 为 各 城 市 的 距 离 , coord 为 各 城 市 的 坐 标
- [ v , m ] = size( coord ) ; % m 为 城 市 的 个 数
- fare = zeros( m ) ;
- for i = 1 : m % 外 层 为 行
- for j = i : m % 内 层 为 列
- fare( i , j ) = ( sum( ( coord( : , i ) - coord( : , j ) ) .^ 2 ) ) ^ 0.5 ;
- fare( j , i ) = fare( i , j ) ; % 距 离 矩 阵 对 称
- end
- end
- myplot.m
- function [ ] = myplot( path , coord , pathfar )
- % 做 出 路 径 的 图 形
- % path 为 要 做 图 的 路 径 ,coord 为 各 个 城 市 的 坐 标
- % pathfar 为 路 径 path 对 应 的 费 用
- len = length( path ) ;
- clf ;
- hold on ;
- title( [ '近似最短路径如下,路程为' , num2str( pathfar ) ] ) ;
- plot( coord( 1 , : ) , coord( 2 , : ) , 'ok');
- pause( 0.4 ) ;
- for ii = 2 : len
- plot( coord( 1 , path( [ ii - 1 , ii ] ) ) , coord( 2 , path( [ ii - 1 , ii ] ) ) , '-b');
- x = sum( coord( 1 , path( [ ii - 1 , ii ] ) ) ) / 2 ;
- y = sum( coord( 2 , path( [ ii - 1 , ii ] ) ) ) / 2 ;
- text( x , y , [ '(' , num2str( ii - 1 ) , ')' ] ) ;
- pause( 0.4 ) ;
- end
- plot( coord( 1 , path( [ 1 , len ] ) ) , coord( 2 , path( [ 1 , len ] ) ) , '-b' ) ;
- x = sum( coord( 1 , path( [ 1 , len ] ) ) ) / 2 ;
- y = sum( coord( 2 , path( [ 1 , len ] ) ) ) / 2 ;
- text( x , y , [ '(' , num2str( len ) , ')' ] ) ;
- pause( 0.4 ) ;
- hold off ;
- clear;
- % 程 序 参 数 设 定
- Coord = ... % 城 市 的 坐 标 Coordinates
- [ 0.6683 0.6195 0.4 0.2439 0.1707 0.2293 0.5171 0.8732 0.6878 0.8488 ; ...
- 0.2536 0.2634 0.4439 0.1463 0.2293 0.761 0.9414 0.6536 0.5219 0.3609 ] ;
- t0 = 1 ; % 初 温 t0
- iLk = 20 ; % 内 循 环 最 大 迭 代 次 数 iLk
- oLk = 50 ; % 外 循 环 最 大 迭 代 次 数 oLk
- lam = 0.95 ; % λ lambda
- istd = 0.001 ; % 若 内 循 环 函 数 值 方 差 小 于 istd 则 停 止
- ostd = 0.001 ; % 若 外 循 环 函 数 值 方 差 小 于 ostd 则 停 止
- ilen = 5 ; % 内 循 环 保 存 的 目 标 函 数 值 个 数
- olen = 5 ; % 外 循 环 保 存 的 目 标 函 数 值 个 数
- % 程 序 主 体
- m = length( Coord ) ; % 城 市 的 个 数 m
- fare = distance( Coord ) ; % 路 径 费 用 fare
- path = 1 : m ; % 初 始 路 径 path
- pathfar = pathfare( fare , path ) ; % 路 径 费 用 path fare
- ores = zeros( 1 , olen ) ; % 外 循 环 保 存 的 目 标 函 数 值
- e0 = pathfar ; % 能 量 初 值 e0
- t = t0 ; % 温 度 t
- for out = 1 : oLk % 外 循 环 模 拟 退 火 过 程
- ires = zeros( 1 , ilen ) ; % 内 循 环 保 存 的 目 标 函 数 值
- for in = 1 : iLk % 内 循 环 模 拟 热 平 衡 过 程
- [ newpath , v ] = swap( path , 1 ) ; % 产 生 新 状 态
- e1 = pathfare( fare , newpath ) ; % 新 状 态 能 量
- % Metropolis 抽 样 稳 定 准 则
- r = min( 1 , exp( - ( e1 - e0 ) / t ) ) ;
- if rand < r
- path = newpath ; % 更 新 最 佳 状 态
- e0 = e1 ;
- end
- ires = [ ires( 2 : end ) e0 ] ; % 保 存 新 状 态 能 量
- % 内 循 环 终 止 准 则 :连 续 ilen 个 状 态 能 量 波 动 小 于 istd
- if std( ires , 1 ) < istd
- break ;
- end
- end
- ores = [ ores( 2 : end ) e0 ] ; % 保 存 新 状 态 能 量
- % 外 循 环 终 止 准 则 :连 续 olen 个 状 态 能 量 波 动 小 于 ostd
- if std( ores , 1 ) < ostd
- break ;
- end
- t = lam * t ;
- end
- pathfar = e0 ;
- % 输 入 结 果
- fprintf( '近似最优路径为:\n ' )
- %disp( char( [ path , path(1) ] + 64 ) ) ;
- disp(path)
- fprintf( '近似最优路径路程\tpathfare=' ) ;
- disp( pathfar ) ;
- myplot( path , Coord , pathfar ) ;
模拟退火解TSP问题MATLAB代码的更多相关文章
- 调试和运行matlab代码(源程序)的技巧和教程
转载请标明出处:专注matlab代码下载的网站http://www.downma.com/ 本文主要给大家分享使用matlab编写代码,完成课程设计.毕业设计或者研究项目时,matlab调试程序的技巧 ...
- 使用ecilpse(Java)调用Matlab代码
1 安装java环境: http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载JDK最新版本并安装,CloudSim ...
- 一阶RC高通滤波器详解(仿真+matlab+C语言实现)
文章目录 预备知识 关于电容 HPF的推导 simulink 仿真 simulink 运行结果 matlab 实现 matlab 运行结果 C语言实现 如果本文帮到了你,帮忙点个赞: 如果本文帮到了你 ...
- 如何加速MATLAB代码运行
学习笔记 V1.0 2015/4/17 如何加速MATLAB代码运行 概述 本文源于LDPCC的MATLAB代码,即<CCSDS标准的LDPC编译码仿真>.由于代码的问题,在信息位长度很长 ...
- 多分类问题中,实现不同分类区域颜色填充的MATLAB代码(demo:Random Forest)
之前建立了一个SVM-based Ordinal regression模型,一种特殊的多分类模型,就想通过可视化的方式展示模型分类的效果,对各个分类区域用不同颜色表示.可是,也看了很多代码,但基本都是 ...
- 卷积相关公式的matlab代码
取半径=3 用matlab代码实现上式公式: length=3;for Ki = 1:length for Kj = 1:length for Kk = 1:length Ksigma(Ki,Kj,K ...
- JAVA调用matlab代码
做实验一直用的matlab代码,需要嵌入到java项目中,matlab代码拼拼凑凑不是很了解,投机取巧采用java调用matlab的方式解决. 1. matlab版本:matlabR2014a ...
- 直方图均衡化与Matlab代码实现
昨天说了,今天要好好的来解释说明一下直方图均衡化.并且通过不调用histeq函数来实现直方图的均衡化. 一.直方图均衡化概述 直方图均衡化(Histogram Equalization) 又称直方图平 ...
- 将labelme 生成的.json文件进行可视化的代码+label.png 对比度处理的matlab代码
labelme_to_dataset 指令的代码实现: show.py文件 #!E:\Anaconda3\python.exe import argparse import json import o ...
随机推荐
- WPF界面设计中常用的一些代码片段及属性
一.窗体去掉标题栏.消除掉标题栏后的白边,把窗体置于屏幕中间,窗口大小不能改变. WindowStyle="None" AllowsTransparency="True& ...
- Activiti 接收任务活动
流程中往往需要特定人接受任务并进行一定操作才能继续进行下去. 代码如下 import java.io.InputStream; import org.activiti.engine.ProcessEn ...
- java线程队列
工作原理 1.线程池刚创建时,里面没有一个线程.任务队列是作为参数传进来的.不过,就算队列里面有任务,线程池也不会马上执行它们. 2.当调用 execute() 方法添加一个任务时,线程池会做如下判断 ...
- Python2 Python3 urllib方法对应
Python2 name Python3 nameurllib.urlopen() urllib.request.urlopen()urllib2.urlopen() urllib.request.u ...
- 新增的Java MapReduce API
http://book.51cto.com/art/201106/269647.htm Hadoop的版本0.20.0包含有一个新的 Java MapReduce API,有时也称为"上下文 ...
- 图解nginx配置负载均衡
1. 在Linux上准备两份tomcat 2. 修改两份tomcat的端口号 修改的端口如图所示: 3. 启动两个tomcat服务器 4. 修改两个服务器上的主页方便测试区分 5. 在nginx配置文 ...
- CA证书制作
目录 手动制作CA证书 1.安装 CFSSL 2.初始化cfssl 3.创建用来生成 CA 文件的 JSON 配置文件 4.创建用来生成 CA 证书签名请求(CSR)的 JSON 配置文件 5.生成C ...
- Django项目:CRM(客户关系管理系统)--74--64PerfectCRM实现CRM课程排名详情
#urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...
- day66test
作业 1. 先有一下成绩单数据 scores = [ { name: 'Bob', math: 97, chinese: 89, english: 67 }, { name: 'Tom', math: ...
- Sql Server实现自动增长
在学习中遇到这个问题 数据库里有编号字段 BH00001 BH00002 BH00003 BH00004 如何实现自动增长 --下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号. --得 ...