问题描述:

  • 旅行商问题(Traveling Salesman Problem,TSP)是旅行商要到若干个城市旅行,各城市之间的费用是已知的,为了节省费用,旅行商决定从所在城市出发,到每个城市旅行一次后返回初始城市,问他应选择什么样的路线才能使所走的总费用最短?此问题可描述如下:设G=(V,E)是一个具有边成本cij的有向图,cij的定义如下,对于所有的i和j,cij>0,若<i,j>不属于E,则cij=∞。令|V|=n,并假设n>1。 G的一条周游路线是包含V中每个结点的一个有向环,周游路线的成本是此路线上所有边的成本和。

  • 旅行商问题(Traveling Saleman Problem,TSP)又译为旅行推销员问题、货郎担问题,简称为TSP问题,是最基本的路线问题,该问题是在寻求单一旅行者由起点出发,通过所有给定的需求点之后,最后再回到原点的最小路径成本。最早的旅行商问题的数学规划是由Dantzig(1959)等人提出。 
  • TSP问题在物流中的描述是对应一个物流配送公司,欲将n个客户的订货沿最短路线全部送到。如何确定最短路线。
  • TSP问题最简单的求解方法是枚举法。它的解是多维的、多局部极值的、趋于无穷大的复杂解的空间,搜索空间是n个点的所有排列的集合,大小为(n-1)。可以形象地把解空间看成是一个无穷大的丘陵地带,各山峰或山谷的高度即是问题的极值。求解TSP,则是在此不能穷尽的丘陵地带中攀登以达到山顶或谷底的过程。

问题分析

  • 旅行商问题要从图G的所有周游路线中求取最小成本的周游路线,而从初始点出发的周游路线一共有(n-1)!条,即等于除初始结点外的n-1个结点的排列数,因此旅行商问题是一个排列问题。排列问题比子集合的选择问题通常要难于求解得多,这是因为n个物体有n!种排列。通过枚举(n-1)!条周游路线,从中找出一条具有最小成本的周游路线的算法,其计算时间显然为O(n!)。

旅行商问题的解法

  旅行推销员的问题,我们称之为巡行(Tour),此种问题属于NP-Complete的问题,所以旅行商问题大多集中在启发式解法。Bodin(1983)等人将旅行推销员问题的启发式解法分成三种:
  1、途程建构法(Tour Construction Procedures)
  从距离矩阵中产生一个近似最佳解的途径,有以下几种解法:
  1)最近邻点法(Nearest Neighbor Procedure):一开始以寻找离场站最近的需求点为起始路线的第一个顾客,此后寻找离最后加入路线的顾客最近的需求点,直到最后。
  2)节省法(Clark and Wright Saving):以服务每一个节点为起始解,根据三角不等式两边之和大于第三边之性质,其起始状况为每服务一个顾客后便回场站,而后计算路线间合并节省量,将节省量以降序排序而依次合并路线,直到最后。
  3)插入法(Insertion procedures):如最近插入法、最省插入法、随意插入法、最远插入法、最大角度插入法等。
  2、途程改善法(Tour Improvement Procedure)
  先给定一个可行途程,然后进行改善,一直到不能改善为止。有以下几种解法:
  1)K-Opt(2/3 Opt):把尚未加入路径的K条节线暂时取代目前路径中K条节线,并计算其成本(或距离),如果成本降低(距离减少),则取代之,直到无法改善为止,K通常为2或3。
  2)Or-Opt:在相同路径上相邻的需求点,将之和本身或其它路径交换且仍保持路径方向性,并计算其成本(或距离),如果成本降低(距离减少),则取代之,直到无法改善为止。
  3、合成启发法(Composite Procedure)
  先由途程建构法产生起始途程,然后再使用途程改善法去寻求最佳解,又称为两段解法(two phase method)。有以下几种解法:
  1)起始解求解+2-Opt:以途程建构法建立一个起始的解,再用2-Opt的方式改善途程,直到不能改善为止。
2)起始解求解+3-Opt:以途程建构法建立一个起始的解,再用3-Opt的方式改善途程,直到不能改善为止。

背包问题

  • 背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。
  • 也可以将背包问题描述为决定性问题,即在总重量不超过W的前提下,总价值是否能达到V?

题目

  • 有N件物品和一个容量为V的背包。第i件物品的费用是c,价值是w。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。

基本思路

  • 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。
  • 用子问题定义状态:即f[v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[v]=max{f[v],f[v-c]+w}。
  • 这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以有必要将它详细解释一下:“将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为v的背包中”;如果放第i件物品,那么问题就转化为“前i-1件物品放入剩下的容量为v-c的背包中”,此时能获得的最大价值就是f [v-c]再加上通过放入第i件物品获得的价值w。

旅行商问题+背包问题--经典问题相关推荐

  1. 【人工智能算法】算法基础之离散优化[旅行商问题 背包问题]

    本文重点: 离散VS连续 旅行商问题 背包问题 旅行商问题 旅行商问题(Traveling Salesman Problem, TSP)是一个难以用传统迭代算法求解的NP困难问题,因此经常用模拟退火算 ...

  2. 背包问题经典实现方法

    背包问题里"背包"的英文是 knopsack ,其基本问题就假设有一个限定重量的背包,若干一定重量的物品,每个物品都有各自的价值, 现在要尽可能的向背包里装入若干物品,使得背包中物 ...

  3. Python数模笔记-模拟退火算法(4)旅行商问题

    1.旅行商问题(Travelling salesman problem, TSP) 旅行商问题是经典的组合优化问题,要求找到遍历所有城市且每个城市只访问一次的最短旅行路线,即对给定的正权完全图求其总权 ...

  4. 2021年6月组会分享--算法竞赛入门及背包问题解析

    一 竞赛简介 万恶之源 各种竞赛知识的汇总. 1. 赛制介绍 赛制介绍 2. 平台介绍 leetcode 主找工作,周赛/双周赛,每周都有,时间短,可查看别人的代码,学习别人的优秀代码和解题思路,成长 ...

  5. 一本通 1267:【例9.11】01背包问题

    01背包问题 经典的01背包问题模板 这里提供两种做法: #include <iostream> #include <cstdio> using namespace std; ...

  6. 01型背包问题解题总结(二维)

    前言:01型背包问题(一维)的链接: https://blog.csdn.net/qq_56430444/article/details/118157798 完全背包问题链接: https://blo ...

  7. labuladong的算法小抄pdf_真漂亮!这份GitHub上爆火的算法面试笔记,助你圆满大厂梦...

    前言 Github作为程序员们的后花园,一直以来都是程序员最喜欢逛逛.学习的地方,小编也不例外,最近看到一份对标BAT等一线大厂的算法面试笔记,已经标星68+K了,很是惊讶,看了一下,觉得知识点整理得 ...

  8. 计算机设计大赛国奖作品_2. 报名材料

    计算机设计大赛国奖作品_2. 报名材料 本系列是2021年中国大学生计算机设计大赛作品"环境监测无人机航线优化"的相关文档,获得2021年西北赛区一等奖,国赛三等奖.学生习作,只供 ...

  9. 计算机设计大赛国奖作品_3. 需求分析

    计算机设计大赛国奖作品_3. 需求分析 本系列是2021年中国大学生计算机设计大赛作品"环境监测无人机航线优化"的相关文档,获得2021年西北赛区一等奖,国赛三等奖.学生习作,只供 ...

最新文章

  1. 本科理工男如何学习Linux
  2. oracle9I收缩表,Oracle 9i删除数据表(转)
  3. PHP反序列化漏洞总结
  4. 【计算机学科】最好的学校排名
  5. 考究Hadoop中split的计算方法
  6. ListView 两列多行实现
  7. Jquery一些常见性能的问题
  8. 浅谈项目管理中的四要素
  9. eclipse怎么升级到java ee,如何为Java EE开发人员升级Eclipse?
  10. Java 获取集合元素的值
  11. C#网络编程(基本概念和操作) - Part.1[转自JimmyZhang博客]
  12. java多线程thread使用_Java多线程——thread及runnable的基本使用及交替执行
  13. 模拟恶劣网络环境常用的几种解决方案
  14. showModalDialog和showModelessDialog使用心得*转*
  15. 学Python必看,Python中encode(),decode()的本质
  16. 简单计算器——两种方法
  17. 单片机交通灯灯c语言程序,51单片机控制交通灯原理图及C语言程序
  18. 一文教你如何挑选深度学习GPU
  19. 六下计算机教学总结,六年级下册信息技术教学工作总结
  20. mac 不显示 外接屏幕_教大家Mac外接显示器设置教程

热门文章

  1. 软考A计划-电子商务设计师-电子商务基础知识
  2. GitHub:社交,贡献,学习
  3. C语言输出杨辉三角形
  4. JavaWeb四大作用域
  5. 一文看懂钢板测宽仪的特征性能
  6. mysql 监听tcp6_切换MySQL以监听TCP
  7. 关于safari浏览器 New Date() 为NaN 的兼容
  8. Worthington丨Worthington 磷酸酶,碱性
  9. Android 发邮件
  10. Dynamic MDETR: A Dynamic Multimodal Transformer Decoder for Visual Grounding 论文阅读笔记