模拟退火算法(C++版)_第1页
模拟退火算法(C++版)_第2页
模拟退火算法(C++版)_第3页
模拟退火算法(C++版)_第4页
模拟退火算法(C++版)_第5页
全文预览已结束

下载本文档

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

文档简介

/* * 使用模拟退火算法(SA)求解TSP问题(以中国TSP问题为例) * 参考自Matlab 智能算法30个案例分析 * 模拟退火的原理这里略去,可以参考上书或者相关论文 * update: 16/12/11 * author:lyrichu * email:919987476 */#include#include#include#include#include#define T0 50000.0 / 初始温度#define T_end (1e-8)#define q 0.98 / 退火系数#define L 1000 / 每个温度时的迭代次数,即链长#define N 27 / 城市数量int city_listN; / 用于存放一个解double city_posN2 = 41,94,37,84,53,67,25,62,7,64,2,99,68,58,71,44,54,62, 83,69,64,60,18,54,22,60,83,46,91,38,25,38,24,42,58,69,71,71,74,78,87,76, 18,40,13,40,82,7,62,32,58,35,45,21; / 中国27个城市坐标/41 94;37 84;53 67;25 62;7 64;2 99;68 58;71 44;54 62;83 69;64 60;18 54;22 60;/83 46;91 38;25 38;24 42;58 69;71 71;74 78;87 76;18 40;13 40;82 7;62 32;58 35;45 21/函数声明double distance(double *,double *); / 计算两个城市距离double path_len(int *); / 计算路径长度void init(); /初始化函数void create_new(); / 产生新解/ 距离函数double distance(double * city1,double * city2) double x1 = *city1; double y1 = *(city1+1); double x2 = *(city2); double y2 = *(city2+1); double dis = sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2); return dis;/ 计算路径长度double path_len(int * arr) double path = 0; / 初始化路径长度 int index = *arr; / 定位到第一个数字(城市序号) for(int i=0;iN-1;i+) int index1 = *(arr+i); int index2 = *(arr+i+1); double dis = distance(city_posindex1-1,city_posindex2-1); path += dis; int last_index = *(arr+N-1); / 最后一个城市序号 int first_index = *arr; / 第一个城市序号 double last_dis = distance(city_poslast_index-1,city_posfirst_index-1); path = path + last_dis; return path; / 返回总的路径长度/ 初始化函数void init() for(int i=0;i T_end) / 当温度低于结束温度时,退火结束 for(int i=0;i= 0) r = (double)rand()/(RAND_MAX); if(exp(-df/T) = r) / 保留原来的解 memcpy(city_list,city_list_copy,N*sizeof(int); T *= q; / 降温 count+; finish = clock(); / 退火过程结束 double duration = (double)(finish-start)/CLOCKS_PER_SEC; / 计算时间 printf(采用模拟退火算法,初始温度T0=%.2f,降温系数q=%.2f,每个温度迭代%d次,共降温%d次,得到的TSP最优路径为:n,T0,q,L,count); for(int i=0;i,city_listi); printf(%dn,city_listN-1); double len

温馨提示

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

评论

0/150

提交评论