模拟退火求解TSP问题

模拟退火算法步骤

1.寻找下一个解
2.计算下一个解的能量
3.决定是否接受这个解
4.降温

算法模板

double randfloat() {return rand()/(RAND_MAX+0.0);
}double T0 = 1000000,Tk = 1,T = T0,d = 0.9999;
int x = initx();//当前解(初始解)
int ansE,nowE;//全局最优解的能量,当前解的能量ansE = nowE = E(x);while(T > Tk) {//1.产生新解int newx = generate(x);//2.计算新解的能量int newE = E(newx);//3.确定是否接受if(newE < nowE || randfloat() > exp((nowE-newE)/T)){nowE = newE;x = newx;}//4.降温T *= d;//5.更新全局最优解Optimize(ansE,newE);
}

TSP问题代码

交题链接
http://acm.zjnu.edu.cn/CLanguage/showproblem?problem_id=1420

#include <iostream>
#include <algorithm>
#include <cstring>
#include <ctime>
#include <cmath>
#include <assert.h>
#define pr(x) std::cout << #x << ':' << x << std::endl
#define rep(i,a,b) for(int i = a;i <= b;++i)
#define int long long
int G[21][21];
int n,m;
int run(int x[]){int ans = 0;rep(i,1,n) {ans += G[x[i-1]][x[i%n]];}return ans;
}double randfloat() {return rand()/(RAND_MAX+0.0);
}int solve() {srand(time(NULL));int x[22];rep(i,0,n-1) x[i] = i+1;double T0 = 100000000,Tk = 1,T = T0,d = 0.99;int ans = run(x);int preans = ans;while(T > Tk) {//1.产生新解int a = rand()%n;int b = rand()%n;//std::swap(x[a],x[b]);std::reverse(x+a,x+b+1);//2.计算下一个解的能量int newans = run(x);Min(ans,newans);//3.确定是否接受if(newans >= preans) {if(randfloat() > exp((preans-newans)/T))//std::swap(x[a],x[b]);std::reverse(x+a,x+b+1);else preans = newans;}else preans = newans;//4.降温T *= d;}return ans;
}signed main() {std::cin >> n >> m;//setinf(G);if(n == 1) return 0*puts("0");rep(i,1,n) rep(j,1,n) {G[i][j] = 1e11;}rep(i,1,m) {int a,b,c;std::cin >> a >> b >> c;Min(G[a][b],c);Min(G[b][a],c);}std::cout << solve() << std::endl;
}

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

  1. SA模拟退火求解TSP问题

    SA模拟退火求解TSP问题 算法介绍 import numpy as np import random as rd from matplotlib import pyplot as plt impor ...

  2. 局部搜索、模拟退火和遗传算法求解TSP问题

    模拟退火和遗传算法求解TSP问题 源代码传送门:GITHUB 数据传送门:TSPLIB 文章目录 模拟退火和遗传算法求解TSP问题 摘要 1 导言 1.1 问题重述 1.2 TSP问题选择 1.3 思 ...

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

    模拟退火算法是一种基于MonteCarlo迭代求解策略的一种随机寻优算法.该算法从某一较高初温出发,伴随温度参数的不断下降,结合概率的突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概 ...

  4. 求解TSP的改进模拟退火算法研究

    文章目录 一.理论基础 1.传统模拟退火算法 (1)模拟退火算法基本原理 (2)模拟退火算法模型流程 <1> 编码方式 <2> 目标函数 <3> 冷却进度表 < ...

  5. 模拟退火算法 java_转 | 模拟退火算法(SA)和迭代局部搜索(ILS)求解TSP的Java代码分享...

    以下文章来源于数据魔术师 ,作者周航 前言 大家好呀!我们你们好久不见的...咳咳,初次见面的小编! 之前重新整理了ILS的代码,有人留言问能不能提供java版. 正好最近在学启发式算法和java,为 ...

  6. 计算机设计大赛国奖作品_5. 模拟退火求解旅行商问题

    计算机设计大赛国奖作品_5. 模拟退火求解旅行商问题 本系列是2021年中国大学生计算机设计大赛作品"环境监测无人机航线优化"的相关文档,获得2021年西北赛区一等奖,国赛三等奖. ...

  7. 蚁群算法求解TSP问题的源代码

    蚁群算法求解TSP问题的源代码 分类: 智能算法2014-05-07 17:25 524人阅读 评论(1) 收藏 举报 蚁群算法 TSP win32程序设计 旅行商问题大都是用遗传算法求解,不过蚁群算 ...

  8. 五种常见启发式算法求解TSP问题-总结篇

    1. 前言 本文将总结先前设计的五个启发式算法的求解效果,算法文章如下表: 智能优化算法类别 启发式算法求解TSP问题系列博文 进化算法 遗传算法求解TSP问题 仿人智能优化算法 禁忌搜索算法求解TS ...

  9. 基于改进禁忌搜索算法求解TSP问题(Matlab代码实现)

    目录 1 概述 2 改进禁忌搜索算法 3 运行结果 4 参考文献 5 Matlab代码实现 1 概述 当城市数量较少时,理论上可以通过穷举法来列举出最优方案,然而当城市数量较多时,所有路线之和将呈指数 ...

最新文章

  1. Android性能优化典范 - 第6季
  2. 【MySQL】计算 TPS,QPS 的方式
  3. BZOJ 4238 电压 解题报告
  4. SAP License:中国集团管控存在的主要问题
  5. Java 内存溢出(java.lang.OutOfMemoryError)解决
  6. python 中的堆栈 用列表实现
  7. php.h not found,编译错误“fatal error: 'xxxx.h' file not found” 如何解决
  8. SpringBoot从入门到进阶——学会Logback日志的配置和搭建
  9. 466.统计重复个数
  10. Mysql基础增删改查语句
  11. 基于聚类分析和因子分析的空气质量研究
  12. 网站开发进阶(七十):CSS 实现圆角有立体感的 DIV 边框
  13. STM32F407ZGT6之硬件介绍
  14. 几乎全面的食品英文总结 (吃遍英文单词
  15. 杰理695N系列I2S使用说明
  16. 启明星辰 天清汉马USG防火墙(后台弱口令/任意用户权限)
  17. 施耐德电气举办金融数据中心研讨会,“大咖”齐聚共话智慧未来
  18. java 驱动级模拟键盘,易语言开源驱动级模拟键盘工具(可绕过wegame屏蔽)
  19. JavaScript前端CRUD
  20. java操作华为OBS对象存储服务器

热门文章

  1. python求函数极值_python 遗传算法求函数极值的实现代码
  2. categories php,manage-categories.php
  3. 判断 服务器架构性能 数据,服务器架构之性能扩展-第五章(6)
  4. mysql数据转储方法_Mysql数据库各种导出导入数据方式的区别(我的理解错误还望指正)...
  5. 紧跟月影大佬的步伐,一起来学习如何写好JS(下)
  6. 浅谈Web前端安全策略xss和csrf,及又该如何预防?
  7. html列表变成三个一行,HTML列表仅限第一行缩进
  8. [Java网络编程基础]TCP发送和接收数据
  9. C++ class实现邻接矩阵存储的图(完整代码)
  10. 微信小程序点击按钮弹出弹窗_微信小程序实现的点击按钮 弹出底部上拉菜单功能示例...