模拟退火算法(MATLAB实现)_第1页
模拟退火算法(MATLAB实现)_第2页
模拟退火算法(MATLAB实现)_第3页
模拟退火算法(MATLAB实现)_第4页
模拟退火算法(MATLAB实现)_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验用例:用模拟退火算法解决如下10个城市的TSP 问题,该问题最优解为691.2 opt f 。表1 10个城市的坐标城市 X 坐标 Y 坐标 城市 X 坐标 Y 坐标 3 0.4000 0.4439 8 0.8732 0.6536 编程实现用MATLAB 实现模拟退火算法时,共编制了5个m 文件,分别如下 1、swap.mfunction newpath , position = swap( oldpath , number % 对 oldpath 进 行 互 换 操 作% number 为 产 生 的 新 路 径 的 个 数 % position 为 对 应 newpath 互 换 的

2、位 置 m = length( oldpath ; % 城 市 的 个 数 newpath = zeros( number , m ;position = sort( randi( m , number , 2 , 2 ; % 随 机 产 生 交 换 的 位 置 for i = 1 : numbernewpath( i , : = oldpath ;% 交 换 路 径 中 选 中 的 城 市newpath( i , position( i , 1 = oldpath( position( i , 2 ;newpath( i , position( i , 2 = oldpath( positi

3、on( i , 1 ; end2、pathfare.mfunction objval = pathfare( fare , path % 计 算 路 径 path 的 代 价 objval% path 为 1 到 n 的 排 列 ,代 表 城 市 的 访 问 顺 序 ; % fare 为 代 价 矩 阵 , 且 为 方 阵 。 m , n = size( path ; objval = zeros( 1 , m ; for i = 1 : mfor j = 2 : nobjval( i = objval( i + fare( path( i , j - 1 , path( i , j ; en

4、dobjval( i = objval( i + fare( path( i , n , path( i , 1 ; end3、distance.mfunction fare = distance( coord % 根据各城市的距离坐标求相互之间的距离% fare 为各城市的距离,coord 为各城市的坐标 , 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、5 ;fare( j , i = fare( i , j ; % 距离矩阵对称endend4、myplot.mfunction = 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

6、 ;for ii = 2 : lenplot( 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 ;endplot( coord( 1 , path( 1 , len , coord( 2 ,

7、 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 ;5、mySAA.m% 模拟退火算法( Simulated Annealing Algorithm MATLAB 程序% 程序参数设定Coord = . % 城市的坐标Coordinates 0.6683 0.6195 0.4 0

8、.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 ; % 初温t0iLk = 20 ; % 内循环最大迭代次数iLkoLk = 50 ; % 外循环最大迭代次数oLklam = 0.95 ; % lambdaistd = 0.001 ; % 若内循环函数值方差小于istd 则停止ostd = 0.001 ; % 若外循环函数值方差小于ostd 则停止ilen = 5 ; % 内循环保存的目标

9、函数值个数olen = 5 ; % 外循环保存的目标函数值个数% 程序主体m = length( Coord ; % 城市的个数mfare = distance( Coord ; % 路径费用farepath = 1 : m ; % 初始路径pathpathfar = pathfare( fare , path ; % 路径费用path fareores = zeros( 1 , olen ; % 外循环保存的目标函数值e0 = pathfar ; % 能量初值e0t = t0 ; % 温度tfor out = 1 : oLk % 外循环模拟退火过程ires = zeros( 1 , ilen

10、 ; % 内循环保存的目标函数值for in = 1 : iLk % 内循环模拟热平衡过程 newpath , = swap( path , 1 ; % 产生新状态e1 = pathfare( fare , newpath ; % 新状态能量% Metropolis 抽样稳定准则r = min( 1 , exp( - ( e1 - e0 / t ;if rand < rpath = newpath ; % 更新最佳状态e0 = e1 ;endires = ires( 2 : end e0 ; % 保存新状态能量% 内循环终止准则:连续ilen 个状态能量波动小于istd if std(

11、ires , 1 < istdbreak ;endendores = ores( 2 : end e0 ; % 保存新状态能量% 外循环终止准则:连续olen 个状态能量波动小于ostd if std( ores , 1 < ostdbreak ;endt = lam * t ;pathfar = e0 ;% 输 入 结 果fprintf( '近似最优路径为:n ' %disp( char( path , path(1 + 64 ; disp(pathfprintf( '近似最优路径费用tpathfare=' ; disp( pathfar ;myplot( path

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论