// monituihuo.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <iostream>
#include <fstream>
#include <Windows.h>
using namespace std;const int MAXN = 27; //城市数量
const double MAX = 27.0; //城市数量
const double INIT_T = 3000; //初始温度
const double RATE = 0.95; //温度衰减率
const double FINNAL_T = 1E-10; //终止温度
const int IN_LOOP = 15000; //内循环次数
const int LIMIT = 10000; //概率选择上限
const int FINL_LOOP = 1000; //外层循环
double DD=0;
double D_Length[MAXN][MAXN]={0};struct path
{//定义路线结构int citys[MAXN];double length;
}D_BestPath;struct point
{//定义点结构double x;double y;
}D_Point[MAXN];//计算点和点之间的距离
void point_dist()
{int i, j;double x;for(i=0; i<MAXN; i++){for(j=i+1; j<MAXN; j++){x = (D_Point[i].x-D_Point[j].x)*(D_Point[i].x-D_Point[j].x);x += (D_Point[i].y-D_Point[j].y)*(D_Point[i].y-D_Point[j].y);D_Length[i][j] = sqrt(x);D_Length[j][i] = D_Length[i][j];}    }
}
//初始化
void init()
{int i;printf("初始状态路径:");D_BestPath.length = 0;for(i=0; i<MAXN; i++){//初始顺序经过路径D_BestPath.citys[i] = i;printf("%d--", i);}for(i=0; i<MAXN-1; i++){//计算路径长度D_BestPath.length += D_Length[i][i+1];}printf("\n路径长度为:%.3lf\n\n", D_BestPath.length);}
void Dprintf(path p)
{//用于显示过程变化情况,打印int i;printf("路径是:");for(i=0; i<MAXN; i++){printf("%d--", p.citys[i]);}printf("\n路径长度为:%.3lf\n\n", p.length);
}//输入城市坐标信息
void input()
{int i,ll = 1;ifstream f1("C:\\city.txt",ios::in);for(i=0; i<MAXN; i++){if(ll % 2 != 0)f1 >> D_Point[i].x;if(ll % 2 == 0)f1 >> D_Point[i].y;ll++;}f1.close();
}path getnext(path p)
{path ret;int i,  x, y;int te;ret = p;do{x = (int)(MAX*rand()/(RAND_MAX + 1.0));y = (int)(MAX*rand()/(RAND_MAX + 1.0));}while(x == y);te = ret.citys[x];ret.citys[x] = ret.citys[y];ret.citys[y] = te;ret.length = 0;for(i=0; i<MAXN-1; i++){//计算路径长度ret.length += D_Length[ret.citys[i]][ret.citys[i+1]];}Dprintf(ret);DD++;return ret;
}void sa()
{int i, P_L=0, P_F=0;;path curPath, newPath;double T = INIT_T;double p, delta;srand((int)time(0));curPath = D_BestPath;while(true){for(i=0; i<IN_LOOP; i++){newPath = getnext(curPath);delta = newPath.length - curPath.length;if(delta < 0){//更新长度curPath = newPath;P_L = 0;P_F = 0;}else{p = (double)(1.0*rand()/(RAND_MAX+1.0));if(exp(delta/T) < 1 && exp(delta/T) > p){curPath = newPath;}P_L ++;}if(P_L > LIMIT){P_F ++;break;}}if(curPath.length < newPath.length){D_BestPath = curPath;}if(P_F > FINL_LOOP || T<FINNAL_T)break;T = T * RATE;}}void main()
{input();point_dist();init();sa();Dprintf(D_BestPath);printf("\n共测试%.0lf次\n", DD);system("pause");
}

参考:http://blog.csdn.net/oxoxzhu/article/details/8142306

转载于:https://www.cnblogs.com/Key-Ky/p/3452511.html

模拟退火解决TSP问题相关推荐

  1. 【算法】模拟退火算法解决TSP问题的matlab实现

    [算法]模拟退火算法解决TSP问题的matlab实现 参考文章: (1)[算法]模拟退火算法解决TSP问题的matlab实现 (2)https://www.cnblogs.com/wenyehoush ...

  2. 模拟退火算法解决TSP(python实现 110+行代码)【gif生成】

    简述 代码我是基于我之前写的两篇,一篇是遗传算法TSP的Python实现,一篇是模拟退火算法的解决TSP的C++实现. 模拟退火算法理论+Python解决函数极值+C++实现解决TSP问题 遗传算法解 ...

  3. 模拟退火算法解决TSP问题

    模拟退火算法解决TSP问题 参考文章: (1)模拟退火算法解决TSP问题 (2)https://www.cnblogs.com/yangmingustb/p/8641124.html (3)https ...

  4. 人工智能 -- 模拟退火算法解决TSP问题(JAVA版)

    计算由广州市出发走遍省内所有市的最短距离. 模拟退火算法:由两规则三函数组成. 两规则指:外层循环结束规则.内层循环结束规则. 三函数指:温度更新函数(控制温度的变化).状态产生函数(用于产生邻结点) ...

  5. 模拟退火和遗传算法解决TSP问题

    模拟退火和遗传算法解决TSP问题 数据集介绍 采用数据集FRI26 来自标准数据集,共有26个城市,最优解为933: 数据下载链接 图1:数据矩阵 图2:数据集介绍 算法介绍 模拟退火 介绍: 模拟退 ...

  6. 遗传算法(Genetic Algorithm )+C++实现解决TSP问题

    概念 项目所在github https://github.com/Sean16SYSU/Algorithms4N 生物进化中的概念 遗传算法中的作用 环境 适应函数 适应性 适应函数值 适者生存 适应 ...

  7. matlab 遗传优化算法_转载 | 遗传算法解决TSP问题的MATLAB实现

    问题定义: 巡回旅行商问题 给定一组n个城市和俩俩之间的直达距离,寻找一条闭合的旅程,使得每个城市刚好经过一次且总的旅行距离最短. TSP问题也称为货郎担问题,是一个古老的问题.最早可以追溯到1759 ...

  8. 模拟退火法-TSP问题

    模拟退火算法(Simulate Anneal Arithmetic,SAA)是一种通用概率演算法,用来在一个大的搜寻空间内找寻命题的最优解.模拟退火是S.Kirkpatrick, C.D.Gelatt ...

  9. 蚁群算法解决tsp问题python_蚁群算法在解决TSP问题中的应用

    陈灵佳 文章首先对蚁群算法与TSP问题进行简要介绍,在此基础上对蚁群算法在解决TSP问题中的应用进行论述.期望通过本文的研究能够对TSP问题的解决有所帮助. [关键词]蚁群算法 TSP问题 最优解 1 ...

最新文章

  1. 透过认知智能剖析商业本质(iPIN CEO杨洋)丨硬创公开课
  2. ACM入门之【快速幂】
  3. 大连关于领取软考2021年上半年合格证书的通知
  4. HTTP协议容易犯的误区
  5. stylus之内置方法(Built-in Functions)
  6. 年薪30万的程序员为啥找不到女朋友?这是我见过最精彩的回答!
  7. Altium Designer(十):极坐标
  8. 关于二叉树,你该了解这些!
  9. R语言-误差修正模型的建立和结果解读
  10. SVN 下载与安装(超简单)!!!
  11. HTML中包含地图和筛选条件,如何实现DedeCMS多条件筛选并以筛选词为标题
  12. 马克思主义概论(第二章)
  13. python-opencv:在视频中显示fps等opencv快速入门
  14. 使用jq来封装一个瀑布流插件
  15. 通达信股本变迁文件(gbbq)解密方法
  16. 解决chrome浏览器手机调试模式下鼠标指针消失(量化范围设置无效情况)
  17. 万字长文:编写 Dockerfiles 最佳实践
  18. SQL语句,常用的DDL表操作语句
  19. 2020年Java最新面试题整理题库完整版
  20. teradata安装

热门文章

  1. Django多表查询练习题
  2. rinetd 进行转发
  3. DataGridView,Dataset,DataTable,DataRow等使用心得
  4. 【转】增量式PID控制算法
  5. 从天而降的文字,文字掉落效果
  6. 【会议】2008-10-27
  7. STM32之CAN总线例程
  8. 流量超过谷歌的Tiktok,在扩张过程中被质疑“偷窃”OBS代码
  9. 别以为JDK8有了红黑树,HashMap就不会有死循环问题!
  10. JeecgBoot版本4月份新版即将发布,抢先体验。。