一、动态规划

import java.util.ArrayList;

/**

* @author xifeng.yang

*/

public class TSPEngine {

private ArrayList outputArray = new ArrayList<>();

private int dp[][]; //重叠子问题的记忆, 表示由i出发、途径集合j中的元素、再回到起始点0的最短长度;

private int path[][]; //表示在所选路径最优的情况下, 下一步要到达的点;

private int distance[][];

private int nPow, N;

public static long time;

public ArrayList computeTSP(int[][] inputArray, int n) {

long start = System.nanoTime();

N = n;

nPow = (int) Math.pow(2, n);

dp = new int[n][nPow];

path = new int[n][nPow];

distance = inputArray;

int i, j;

for (i = 0; i < n; i++) {

for (j = 0; j < nPow; j++) {

dp[i][j] = -1;

path[i][j] = -1;

}

}

/* 从i出发, 直接到达起始点0的长度. */

for (i = 0; i < n; i++) {

dp[i][0] = inputArray[i][0];

}

outputArray.add(0);

int result = tsp(0, nPow - 2);

getPath(0, nPow - 2);

outputArray.add(result);

long end = System.nanoTime();

time = (end - start) / 1000;

return outputArray;

}

/**

* 从start出发, 途径集合set中的元素(由二进制中的非0位来表示), 再回到起始点时的最短长度, 即:

* tsp(start, set) = min{start-> {set} -> 0)}.

*

* @param start

* @param set

* @return

*/

private int tsp(int start, int set) {

int masked, mask, result = -1, temp;

if (dp[start][set] != -1) {

return dp[start][set];

} else {

for (int x = 0; x < N; x++) {

mask = nPow - 1 - (int) Math.pow(2, x);

masked = set & mask;

//过滤掉set中未置1的元素.

if (masked != set) {

temp = distance[start][x] + tsp(x, masked);

if (result == -1 || result > temp) {

//更新result的同时, 也更新path.

result = temp;

path[start][set] = x;

}

}

}

dp[start][set] = result;

return result;

}

}

private void getPath(int start, int set) {

if (path[start][set] == -1) {

return;

}

int x = path[start][set];

int mask = nPow - 1 - (int) Math.pow(2, x);

int masked = set & mask;

outputArray.add(x);

getPath(x, masked);

}

public static void main(String[] args) {

int[][] inputArray = {{0, 12, 11, 16}, {15, 0, 15, 10}, {8, 14, 0, 18}, {9, 11, 17, 0}};

TSPEngine tspEngine = new TSPEngine();

System.out.println("result:" + tspEngine.computeTSP(inputArray, 4));

}

}

模拟退火算法解决TSP问题:

思路:

参数选取,包括初始温度、冷却系数(coolingFactor, 一般选取0.98或0.99);

随机选取某个旅行顺序作为起始值;

开始退火过程,步骤如下:

3.1 随机交换当前旅行顺序中的两个元素,计算出新的路径值newEnergy,与现有的currentEnergy作对比:

① 如果newEnergy < currentEnergy,则接受新的方案;

② 如果exp((currentEnergy - newEnergy) / temperature) > Random(0, 1),则接受新的方案。temperature越大,越有可能接受较差的值。

3.2 降温冷却,temperature = temperature * coolingFactor。当温度冷却至1度以下时,结束循环,否则重复执行步骤3。

旅行商问题动态规划matlab,旅行商问题的解法相关推荐

  1. matlab解决多旅游商问题,多旅行商问题的matlab程序

    %多旅行商问题的matlab程序 function varargout = mtspf_ga(xy,dmat,salesmen,min_tour,pop_size,num_iter,show_prog ...

  2. 旅行商问题(动态规划_爬山算法_遗传算法)

    问题描述 ​ 旅行商问题(Travelling Salesman Problem, 简记TSP,亦称货郎担问题):设有n个城市和距离矩阵D=[dij],其中dij表示城市i到城市j的距离,i,j=1, ...

  3. 一节双曲型方程基于MATLAB的求解,双曲方程基于matlab的数值解法

    <双曲方程基于matlab的数值解法>由会员分享,可在线阅读,更多相关<双曲方程基于matlab的数值解法(9页珍藏版)>请在人人文库网上搜索. 1.双曲型方程基于MATLAB ...

  4. 常微分方程数值解matlab欧拉,matlab 常微分方程数值解法 源程序代码

    matlab 常微分方程数值解法 源程序代码 所属分类:其他 开发工具:matlab 文件大小:16KB 下载次数:41 上传日期:2019-02-13 11:03:29 上 传 者:XWLYF 说明 ...

  5. 0-1背包问题动态规划模型的Python解法

    0-1背包问题动态规划模型的Python解法 1.01背包问题 2.Python解决方案 3.01背包问题例题 1.01背包问题 背包问题(Knapsack problem)是一种组合优化的NP完全问 ...

  6. 【机械仿真】基于matlab简化几何解法六轴机械臂位置规划【含Matlab源码 2128期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[机械仿真]基于matlab简化几何解法六轴机械臂位置规划[含Matlab源码 2128期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  7. python 动态规划 旅行商问题_旅行商问题动态规划解法(python版)

    2019年华为实习生第二场笔试第二题是个旅行商问题,虽然只有5个点可以import itertools产生排列遍历5!=120情况求解(当然也可以写个递归自己生成排列),还是查了下动态规划的解法. 原 ...

  8. 【路径规划-TSP问题】基于粒子群结合蚁群算法求解旅行商问题附matlab代码

    1 内容介绍 一种基于粒子群优化的蚁群算法求解TSP问题的方法.该方法在求解TSP问题时,利用粒子群优化的思想,对蚁群算法的参数取值进行优化并选择.在粒子群算法中,将蚁群算法的5个参数(q,α,β,ρ ...

  9. 【路径规划-TSP问题】基于蚁群算法求解实际地图旅行商问题含Matlab源码

    1 内容介绍 旅行商问题的传统求解方法是遗 传算法,此算法收敛速度慢,并不能获得问题的最优解.为了求取旅行商问题的最优解,本文在阐述蚁群算法的基本原理,模型以及在旅行商问题中的实现过程的基 础上,提出 ...

最新文章

  1. 已解决:centos 7.x系统自带的3.10.x内核存在一些bugs,导致运行docker、k8s不稳定,需要升级内核解决此问题。
  2. svm硬间隔与软间隔
  3. [ASP.NET笔记] 5.验证控件
  4. Tomcat6.0 中数据源的配置
  5. testng.xml文件配置
  6. LeetCode MySQL 1112. 每位学生的最高成绩
  7. hbase/thrift/go连接失败
  8. 阿里开发者们的第15个感悟:做一款优秀大数据引擎,要找准重点解决的业务场景
  9. git 分支管理策略 与 物理实现 --author by阮一峰 小鱼
  10. Lucene实践之Query
  11. MATLAB2020安装教程
  12. Activiti7工作流引擎介绍
  13. 终极事务处理(XTP,Hekaton)——万能大招?
  14. postgresq | pg命令
  15. UE4-(场景)后期盒子(PostProcessVolume)之镜头眩光(Lens Flares)、景深(Depth of Field)、图像效果(Image Effects)
  16. js 根据id获取页面元素
  17. 入职Salesforce乙方公司前, 需要了解什么?
  18. c语言自行车存放管理系统,C语言程序编写单片机控制的电动自行车驱动系统程序...
  19. 蜂鸣器实现音乐播放及应用解析、代码实现
  20. 五家共井 穷举法_五户共井问题

热门文章

  1. Python入门学习之异常处理机制
  2. 模拟退火算法求解旅行商问题(python实现)
  3. mysql数据库入门教程(1):数据库的相关概念,存储特点,软件安装教程,数据库启动,服务端登录退出
  4. HMM算例 python 有代码
  5. matplotlib(3)
  6. Java8 EnumMap 源码分析
  7. VTK:合并选择用法实战
  8. JavaScript实现跳跃游戏的贪婪方法的算法(附完整源码)
  9. wxWidgets:wxTextCtrl类用法
  10. boost::multiprecision模块mpfr相关的测试程序