旅行商问题动态规划matlab,旅行商问题的解法
一、动态规划
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,旅行商问题的解法相关推荐
- matlab解决多旅游商问题,多旅行商问题的matlab程序
%多旅行商问题的matlab程序 function varargout = mtspf_ga(xy,dmat,salesmen,min_tour,pop_size,num_iter,show_prog ...
- 旅行商问题(动态规划_爬山算法_遗传算法)
问题描述 旅行商问题(Travelling Salesman Problem, 简记TSP,亦称货郎担问题):设有n个城市和距离矩阵D=[dij],其中dij表示城市i到城市j的距离,i,j=1, ...
- 一节双曲型方程基于MATLAB的求解,双曲方程基于matlab的数值解法
<双曲方程基于matlab的数值解法>由会员分享,可在线阅读,更多相关<双曲方程基于matlab的数值解法(9页珍藏版)>请在人人文库网上搜索. 1.双曲型方程基于MATLAB ...
- 常微分方程数值解matlab欧拉,matlab 常微分方程数值解法 源程序代码
matlab 常微分方程数值解法 源程序代码 所属分类:其他 开发工具:matlab 文件大小:16KB 下载次数:41 上传日期:2019-02-13 11:03:29 上 传 者:XWLYF 说明 ...
- 0-1背包问题动态规划模型的Python解法
0-1背包问题动态规划模型的Python解法 1.01背包问题 2.Python解决方案 3.01背包问题例题 1.01背包问题 背包问题(Knapsack problem)是一种组合优化的NP完全问 ...
- 【机械仿真】基于matlab简化几何解法六轴机械臂位置规划【含Matlab源码 2128期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[机械仿真]基于matlab简化几何解法六轴机械臂位置规划[含Matlab源码 2128期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...
- python 动态规划 旅行商问题_旅行商问题动态规划解法(python版)
2019年华为实习生第二场笔试第二题是个旅行商问题,虽然只有5个点可以import itertools产生排列遍历5!=120情况求解(当然也可以写个递归自己生成排列),还是查了下动态规划的解法. 原 ...
- 【路径规划-TSP问题】基于粒子群结合蚁群算法求解旅行商问题附matlab代码
1 内容介绍 一种基于粒子群优化的蚁群算法求解TSP问题的方法.该方法在求解TSP问题时,利用粒子群优化的思想,对蚁群算法的参数取值进行优化并选择.在粒子群算法中,将蚁群算法的5个参数(q,α,β,ρ ...
- 【路径规划-TSP问题】基于蚁群算法求解实际地图旅行商问题含Matlab源码
1 内容介绍 旅行商问题的传统求解方法是遗 传算法,此算法收敛速度慢,并不能获得问题的最优解.为了求取旅行商问题的最优解,本文在阐述蚁群算法的基本原理,模型以及在旅行商问题中的实现过程的基 础上,提出 ...
最新文章
- 已解决:centos 7.x系统自带的3.10.x内核存在一些bugs,导致运行docker、k8s不稳定,需要升级内核解决此问题。
- svm硬间隔与软间隔
- [ASP.NET笔记] 5.验证控件
- Tomcat6.0 中数据源的配置
- testng.xml文件配置
- LeetCode MySQL 1112. 每位学生的最高成绩
- hbase/thrift/go连接失败
- 阿里开发者们的第15个感悟:做一款优秀大数据引擎,要找准重点解决的业务场景
- git 分支管理策略 与 物理实现 --author by阮一峰 小鱼
- Lucene实践之Query
- MATLAB2020安装教程
- Activiti7工作流引擎介绍
- 终极事务处理(XTP,Hekaton)——万能大招?
- postgresq | pg命令
- UE4-(场景)后期盒子(PostProcessVolume)之镜头眩光(Lens Flares)、景深(Depth of Field)、图像效果(Image Effects)
- js 根据id获取页面元素
- 入职Salesforce乙方公司前, 需要了解什么?
- c语言自行车存放管理系统,C语言程序编写单片机控制的电动自行车驱动系统程序...
- 蜂鸣器实现音乐播放及应用解析、代码实现
- 五家共井 穷举法_五户共井问题