货郎担问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实际中很多问题都可以归结为货郎担这类问题.
如: 1,物资运输路线中,汽车应该走怎样的路线使路 程最短;
2,工厂里在钢板上要挖一些小圆孔,自动焊接机 的割咀应走怎样的路线使路程最短;
3,城市里有一些地方铺设管道时,管子应走怎样 的路线才能使管子耗费最少,等等
比如说,前面曾经遇到
的排序问题,以前我们是 用0-1整数规划来解决这类 问题的。
货郎担问题当城市数目增加时,用动态规划方 法求解,无论是计算量还是存储量都会大大增加, 所以本方法只适用于n较小的情况.
在很多货郎担问题中,经常会看到dij不等于dji的情 况。
Vj
距离
1
2
3
4
Vi
1
0
6
7
9
2
8
0
9
7
3
5
8
0
8
4
6
5
5
0
• 这是因为:1,各城市之间可能是复线2,两地之 间可能会使用不同的交通工具从而费用不同。
以一个例题来加以说明
设有5个工件需要在机床A,B上加工,加工的顺序是先A后 B,每个工件所需加工时间(单位:小时) 如下表. 问如何安 排加工顺序可使机床连续加工完所有的加工总时间最少?
机床 加工时间 工件号码
1 2 3 4 5
A
B
3
6
7
2
4
7
5
3
7
4
: 解:工件的加工工时矩阵为
• 根据最优排序规则,最优加工顺序为: • 13542
建立动态规划模型:
设S表示从v1到vi中间所可能经过的城市集 合,S实际上是包含除v1和vi两个点之外的其余点 的集合,但S中的点的个数要随阶段数改变。 阶段: S中的点的个数
建立动态规划模型:
状态变量(i,S)表示:从v1点出发,经过S集合中所 有点一次最后到达vi。 最优指标函数fk(i,S)为从v1出发,经过S集合中所 有点一次最后到达vi。 决策变量Pk(i,S)表示:从v1经k个中间城镇的S集合 到vi城镇的最短路线上邻接vi的前一个城镇,则动态规 划的顺序递推关系为:
例12 已知4个城市间距离如下表,求从v1出发,经其余城市 一次且仅一次最后返回v1的最短路径和距离。
Vj
距离
1
Vi
1
0
2
8
3
5
4
6
2
3
4
6
7
9
0
9
7
8
0
8
5
5
0
当k=2时,
从城市V1出发,中间经过2个城镇到达Vi的最短距离.
f2(2,{ 3,4 }) = min[ f1(3,{4})+d 32, f1(4,{3})+ d42 ]
f3(1,{ 2,3, 4 })= min[f2(2,{ 3,4 }) + d 21, f2(3,{ 2,4 })+ d 31, f2(4,{ 2,3 }) + d 41 ] =min[20+8,18+5,22+6]=23
P3(1,{2,3,4})=3
逆推回去,货郎的最短路线是12431, 最短距离为23.
=min[14+8,15+5]=20
P2(2,{3,4})=4
f2(3,{ 2,4 })= min[14+9,13+5]=18 P2(3,{2,4})=4
f2(4,{ 2,3 })= min[15+7,15+8]=22 P2(4,{2,3})=2
当k=3时:
从城市V1出发,中间经过3个城镇最终回到Vi的最短距离.
最短路径问题
Dijkstra提出了一个按路径长度递增的顺序逐步产 生最短路径的方法,称为Dijkstra算法。
在这里,我们同样可以
使用动态规划的方法。而 且相对简单了很多。
排序问题
一,问题的提出:设有n个工件要在机床A,B上加 工,每个工件都必须经过先A后B的两道加工工序, 以ai,bi分别表示工件i(1<=i<=n) 在A,B上的加工 时间.问应如何在两机床上安排工件加工的顺序, 使在机床A上加工第一个工件开始到在机床B上 将最后一个工件加工完为止,所用的加工时间 最
货郎担问题
货郎担问题
小组成员: 卢广桃 谢伟娜 郑理
货郎担问题
货郎担问题一般提法为:一个货郎从某 城镇出发,经过若干个城镇一次,且仅经过 一次,最后仍回到原出发的城镇,问应如何 选择行走路线可使总行程最短,这是运筹学 的一个著名的问题。
实际中有很多问题可以归结为这类问题。
哈密尔顿回路: (环球旅行问题)
这是Johnson在1954年提出 的解法.概括起来,这种解法 的基本思路是:尽量减少在机 床B上等待加工的时间.(A上 加工的时间不受限制)因此, 把在机床B上加工时间长的 工件先加工,在B上加工很多内容和货郎担问题的思想
是相似!
最小生成树的普里姆算法
少?
二,模型及其解法 min(ai,bj)<=min(aj,bi) 这个条件就是工件i应该排在工件j之前,即对于 从头到尾的最优排序而言,它的所有前后相邻的 两个工件所组成的对都必须满足以上不等式.根 据这个条件,得到最优排序的规则如下:
(1)先工作的加工的加工时间的工时矩阵
M= a1 a2 …..an b1 b2 …..bn
(2) 在工时矩阵M中找到最小的元素(若最小的不止 一个,可任选其一);若它在上行,则将相应的工件排在 最前面的位置;若它在下行,则将相应的工件排在最后 面的位置.
(3) 将排定位置的工作所对于能够的列从M中划掉, 然后对余下的工作重复按(2)进行,但那时的最前位置 (或最后位置)是在已排定位置的工件之后(或之前).如 此继续下去,直至把所有工件都排完为止.
即从一个结点出发, 经过所有结点回到 出发点(结点不能
重复经过)。
问题描述:
设v1,v2,……..,vn是已知的n个城镇, 城镇vi到城镇vj的距离为dij,现求从v1出发, 经各城镇一次且仅一次返回v1的最短路程。
解决方案: 1.穷举法? 2.最短路标号法? 3.指派问题? 4.整数规划? 5.动态规划?
9
7
8
0
8
5
5
0
解:K=0 由边界条件(7.21b)知:
f0(2,空集)=d12=6 f0(3,空集)=d13=7 f0(4,空集)=d14=9
当k=1时:
从城市V1出发,经过1个城镇到达Vi的最短距离为:
f1(2,{ 3 }) = f0 (3, 空)+d 32 =7+8=15 f1(2,{ 4 }) = f0 (4, 空)+d 42 =9+8=14 f1(3,{ 2 }) = f0 (2, 空)+d 23 =6+9=15 f1(3,{ 4 }) = f0 (4, 空)+d 43 =9+5=14 f1(4,{ 2 }) = f0 (2, 空)+d 24 =6+7=13 f1(4,{ 3 }) = f0 (3, 空)+d 34 =7+8=15
fk(i,S)= min{ fk-1(j,S、{ j }+dji} j属于S
f0(i,空集)=d1i (k=1,2,…,n-1, i=2,3,…n)
例12 已知4个城市间距离如下表,求从v1出 发,经其余城市一次且仅一次最后返回v1的最短 路径和距离。
Vj
距离
1
Vi
1
0
2
8
3
5
4
6
2
3
4
6
7
9
0
相关文档
最新文档