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