指派问题

合集下载

第5章 整数-指派问题

第5章 整数-指派问题

(if i ≠ k ); cij , bij = ckj + a, (if i = k ).
则以b 则以 ij为系数的新指派问题的目标函数为 n n z = ∑i =1 ∑ j =1 bij xij
= ∑i ≠ k ∑ j =1 cij xij + ∑ j =1 (ckj + a ) xkj
n n
= ∑i =1 ∑ j =1 cij xij + a ∑ j =1 xkj = z + a
n n n
利用性质1, 利用性质 ,可使原系数矩阵变换为含 有很多0元素的新系数矩阵 元素的新系数矩阵, 有很多 元素的新系数矩阵,而最优解保 持不变,在系数矩阵(b 中 持不变,在系数矩阵 ij)中,我们关心位 于不同行不同列的0元素 元素, 于不同行不同列的 元素,以下简称为独 立的0元素. 立的 元素. 元素 利用性质2,若能在系数矩阵(b 中找 利用性质 , 若能在系数矩阵 ij)中找 个独立的0元素 出n个独立的 元素;则令解矩阵 ij)中对 个独立的 元素;则令解矩阵(x 中对 应这n个独立的 元素的元素取值为1, 个独立的0元素的元素取值为 应这 个独立的 元素的元素取值为 ,其 他元素取值为0. 他元素取值为 .将其代入目标函数中得 到zb=0,它一定是最小. ,它一定是最小. 这就是以 ij)为系数矩阵的指派问题的 这就是以(b 为系数矩阵的指派问题的 最优解.也就得到了原问题的最优解. 最优解.也就得到了原问题的最优解.
解 按上述第一步,将这系数矩阵进行变换.
min 12 7 9 7 9 7 5 0 2 0 8 9 6 6 6 6 2 3 0 0 7 17 12 14 9 7 → 0 10 5 7 15 14 6 6 10 6 9 8 0 0 4 10 7 10 9 4 0 6 3 6 2 0 2 4 5

第4章整数规划——指派问题

第4章整数规划——指派问题

4 指派问题
解: 可行解{c12=0, c24 =0, c31 =0, c43 =0}是一个独立零元素组, c12=0, c24 =0, c31 =0, c43 =0分别称 为独立零元素; {c12=0, c23 =0, c31 =0, c44 =0}也 是一个独立零元素组,而{c14=0, c23 =0, c31 =0, c44 =0}就不是独立零元素 组.
4 指派问题
1)对新矩阵中所有不含“*”元素的行打√ ; 2)对打√的行中,所有打×零元素所在的列打√; 3)对所有打√列中标记“*”元素所在行打√; 4)重复上述2),3)步,直到不能进一步打√为止; 5)对未打√的每一行划一直线,对已打√的每一列划一纵线, 即得到覆盖当前0元素的最少直线数。 第四步:对矩阵未被直线覆盖过的元素中找最小元素,将打 √行的各元素减去这个最小元素,将打√列的各元素加上这个最小 元素(以避免打√行中出现负元素),这样就增加了零元素的个 数,返回第二步。 【例5】 求解例1和例2
X (2)
都是指派问题的最优解。
4 指派问题
4.3 指派问题的求解 指派问题既是一类特殊的整数规划问题,又是特殊的运输问 题,因此可以用多种相应的解法来求解,然而这些解法都没有充 分利用指派问题的特殊性质,有效地减少计算量,直到1955年库 恩(W. W. Kuhn)提出的匈牙利法才有效地解决了指派问题。 匈牙利法的理论基础 定义2 独立零元素组 在效率矩阵中,有一组在不同行不同 列的零元素,称为独立零元素组,其每个元素称为独立零元素。 5 0 2 0 2 3 0 0 C 【例4】 已知效率矩阵 0 5 6 7 4 8 0 0 求其独立零元素组。
0 , 不 指 派 Ai 承 建 商 店 B j x ij ( i , j 1, 2 ,3, 4 ,5 ) 1, 指 派 Ai 承 建 商 店 B j

指派问题的四个计算步骤

指派问题的四个计算步骤

指派问题的四个计算步骤
指派问题是一种优化问题,旨在找到最佳的分配方式。

解决指派问题通常有四个计算步骤:
1. 创建代价矩阵:将问题抽象为一个二维矩阵,其中每个元素表示将某个任务分配给某个工人的成本或者效益。

代价矩阵的大小为n行m列,其中n表示任务的数量,m表示工人的数量。

2. 匹配行和列:通过在代价矩阵中查找每一行和列的最小元素,将其标记为零。

如果需要,通过减去每一行和列的最小元素,可以使矩阵中至少有n个零。

3. 寻找最佳分配方案:通过选择代价矩阵中的一个零,并将其标记为星号,然后将与该零所在行或列相交的所有其他零标记为井号。

如果井号的数量等于n,则找到了一个最佳分配方案。

如果不是,请执行第4步。

4. 修改代价矩阵:通过选择未被标记的最小元素,并从该元素中减去所有未被标记的行和列的最小值,可以修改代价矩阵。

然后,返回第2步继续迭代,直到找到一个最佳分配方案。

这些计算步骤被称为匈牙利算法或者KM算法。

通过依次执
行这些步骤,可以找到指派问题的最优解。

第六章_指派问题资料

第六章_指派问题资料

Solution:
1 当分配第 i 人完成第 j 项任务
设 xij 0 否则
i, j 1, 2, , n
§2 指派问题
显然,这是一个 0-1
任务 人员
E
J
G R ai
规划问题, 也是一个 A 2 15 13 4 1
特殊的运输问题 .
B 10 4 14 15 1
所以,分配问题可用
C 9 14 16 13 1
在第一节的人员工作安排问题中,分配工作时, 只考虑人员有工作做 . 但事实上,由于工作的性质和 个人的特长不同,在完成不同的任务时,其效益是不 同的(成本、时间、利润、费用 etc.).
设有 n 个人员去完成 n 项任务,第 i 人完成第 j 项
任务的效益为 cij 0 ,要求每人完成且仅完成一项,
可用图和矩阵给出它的数学模型及求解方法 .
§1 最大基数匹配问题 Graph Vertex Edge
Definition 4.1 设图 G = ( V,E )
15、、如如果果 MM是一E匹,配且,对而对 ei ,eejj,GM,与M ee无i j 不e j是 G
公的共匹顶 配点 ,, 则则 称称M边是子G集的M一是个极G大的匹一配个匹. 配;
列在 Y-T 中,这与 N(S) T 矛盾. 显然 M C .
而 M B , 所以 B 是最小覆盖 .
证毕
§2 指派问题
1 0 0 0
显然,Ex . 2 的可行解可 用一个 0-1 矩阵表示 .
(
xij
)
0 0
0 1
0 0
1
0
表示: A E, B R, C J, D G.
0
0
cij

运筹学__指派问题

运筹学__指派问题

•下面要证明M m. 如图假定覆盖所有0元素的m条直线 有r行、c列,m=r+c.
所有r行上不在j1,…,jc列上的0元 素个数≥ r,这些0元素至少有r个位
于不同列
同理:所有c列上不在i1,…,ir行上
j1 j2
的0元素个数≥c ,且这些0元素至
少有c个位于不同
i1 i2
ir jc
若上述两部分0个数总和为S,则S≥m;其中有m 个,又它们必无重复元素,彼此独立,则SM,故 有m≤M, 故可得M=m.
覆盖所有“0”元素的最少直线数 = 独立的“0”元素 的最多个数
推论1:覆盖所有“0”元素的直线数≥ 不同行不同列的“0”元素的最多个数(m)
推论2:覆盖所有“0”元素的最少直线数≥ 不同行不同列的“0”元素的个数
定理2说明: 1. 只要表中含有不同行或不同列的“0”元素,
都可以通过直线覆盖的方式来找到它们 2. 当覆盖直线的最少条数达到m条时,
(二)算法的基本原理 匈牙利数学家狄·康尼格(D·Konig)证明的两个定理
定理1 如果从指派问题效率矩阵[cij]的每一行元素中分别 减去(或加上)一个常数ui(被称为该行的位势), 从每一列分别减去(或加上)一个常数vj(称为该列的位势) 得到一个新的效率矩阵[bij], 若其中bij=cij-ui-vj,
一、指派问题的数学模型
(一)举例
例7: 有一份中文说明书, 要分别译成英、日、德、俄四种文字, 分别记作E 、 J 、 G 、 R ,交与甲、乙、丙、丁 四个人去完成. 因个人专长不同, 他们完成翻译不同语种的说明书所需的时间(h)如表所示. 应如何指派,使四个人分别完成这四项任务总时间为最小?
任务 人员
将其代入目标函数中得到zb=0,它一定是最小值。 ❖ 这就是以(bij)为系数矩阵的指派问题的最优解。

指派问题详解

指派问题详解

第一章绪论1、指派问题的背景及意义指派问题又称分配问题,其用途非常广泛,比如某公司指派n个人去做n 件事,各人做不同的一件事,如何安排人员使得总费用最少?若考虑每个职工对工作的效率(如熟练程度等),怎样安排会使总效率达到最大?这些都是一个企业经营管理者必须考虑的问题,所以该问题有重要的应用价值.虽然指派问题可以用0-1规划问题来解,设X(I,J)是0-1变量, 用X(I,J)=1表示第I个人做第J件事, X(I,J)=0表示第I个人不做第J件事. 设非负矩阵C(I,J)表示第I个人做第J件事的费用,则问题可以写成LINGO程序SETS:PERSON/1..N/;WORK/1..N/;WEIGHT(PERSON, WORK): C, X ;ENDSETSDATA:W=…ENDDATAMIN=@ SUM(WEIGHT: C*X);@FOR(PERSON(I): @SUM(WORK(J):X(I,J))=1);@FOR(WORK(J): @SUM(PERSONM(I):X(I,J))=1);@FOR(WEIGHT: @BIN(X));其中2*N个约束条件是线性相关的, 可以去掉任意一个而得到线性无关条件.但是由于有N^2个0-1变量, 当N很大时,用完全枚举法解题几乎是不可能的. 而已有的0-1规划都是用隐枚举法做的,计算量较大. 对于指派问题这种特殊的0-1规划,有一个有效的方法——匈牙利算法,是1955年W. W. Kuhn利用匈牙利数学家D.König的二部图G的最大匹配的大小等于G的最小顶点覆盖的大小的定理提出的一种算法,这种算法是多项式算法,计算量为O(N3).匈牙利算法的基本原理是基于以下两个定理.定理1设C=(C ij)n×n是指派问题的效益矩阵,若将C中的任一行(或任一列)减去该行(或该列)中的最小元素,得到新的效率矩阵C’,则C’对应的新的指派问题与原指派问题有相同的最优解.证明:设X’是最优解, 即@SUM(WEIGHT: C*X’)<= @SUM(WEIGHT: C*X), 则当C中任一行或任一列减去该行或该列的最小数m时,得到的阵C’还是非负矩阵, 且@SUM(WEIGHT: C’*X’)<=@SUM(WEIGHT: C*X)-m=@SUM(WEIGHT: C’*X)定理2效率矩阵C中独立的0元素的最多个数等于覆盖所有0元素的最少直线数. 当独立零元素的个数等于矩阵的阶数时就得到最优解.3、理论基础定义:图G的一个匹配M是图G中不相交的边的集合. 属于匹配M中的边的所有端点称为被该匹配M饱和, 其他的顶点称为M-未饱和的. 如果一个匹配M 饱和了图G的所有顶点,则称该匹配M是一个完全匹配. 可见顶点数是奇数的图没有完全匹配. 一个匹配M称为是极大匹配, 如果它不能再扩张成更大的一个匹配. 一个匹配称为是最大匹配, 如果不存在比它更大的匹配.定义:对于一个匹配M, 图G的一个M-交替路是图G中的边交替地在M中及不在M中的边组成. 从M-未饱和点出发到M-为饱和点结束的M-交替路称为一条M-增广路. 把M-增广路中不是M中的边改成新的匹配M’中的边, 把M-增广路中M中的边不作为M’中的边, 在M-增广路以外的M中的边仍作为M’中的边, 则M’的大小比M大1. 故名M-增广路. 因此最大匹配M不存在M-增广路.定义:若图G和图H有相同的顶点集V, 我们称G和H的对称差,记为G∆H,是一个以V为顶点集的图, 但其边集是G和H的边集的对称差: E(G∆H)=E(G) ∆E(H)=E(G)⋂E(H)-(E(G)⋃E(H))=(E(G)-E(H)) ⋂ (E(H)-E(G))定理: (Berge, 1957) 图G的一个匹配M是最大匹配,当且仅当G中没有M-增广路.证明: 我们只要证明, G中没有M-增广路时, M是最大匹配. 用反证法, 若有一个比M大的匹配M’. 令G的一个子图F, E(F)=M∆M’, 因M和M’都是匹配, F的顶点的最大度数至多是2, 从而F由不相交的路和环组成, 它们的边交替地来自M和M’, 于是F中的环的长度是偶数. 由于M’比M大, F中存在一个连通分支,其中M’中的边数大于M中的边数. 这个分支只能是起始和终止的边都在M’中. 而这就是一条G中的M-增广路. 与假设矛盾. 证毕.定理(Hall, 1935)设G是一个二部图, X和Y是其二分集, 则存在匹配M 饱和X当且仅当对于X中的任意子集S, Y 中与S中的点相邻的点组成的集合N(S)中元素的个数大于等于集合S中元素的个数.证明:必要性是显然的. 对于充分性, 假设 |N(S)|≥|S|, ∀S⊂X, 考虑G的一个最大匹配M, 我们用反证法,若M没有饱和X, 我们来找一个集合S不满足假设即可. 设u∈X是一个M-未饱和顶点, 令S⊂X和T⊂Y分别是从u出发的M-交替路上相应的点.我们来证明M中的一些边是T到S-u上的一个匹配. 因为不存在M-增广路,T中的每个点是M-饱和的. 这意味着T中的点通过M中的边到达S中的一个顶点. 另外, S-u中的每个顶点是从T中的一个顶点通过M中的一条边到达的. 因此M 中的这些边建立了T与S-u的一个双射, 即|T|=|S-u|. 这就证明了M中的这些边是T到S-u上的一个匹配,从而意味着T⊂N(S), 实际上, 我们可证明T=N(S). 这是因为连接S和Y-T中的点y的边是不属于M的, 因为不然的话, 就有一条到达y的M-增广路, 与y∉T矛盾. 故|N(S)|=|T|=|S-u|=|S|-1<|S|, 与假设矛盾.当X与Y的集合的大小相同时的Hall定理称为婚姻问题,是由Frobenius(1917)证明的.推论: k-正则的二部图(X的每一点和Y的每一点相关联的二部图)(k>0)存在完全匹配.证明: 设二分集是X,Y. 分别计算端点在X和端点在Y的边的个数, 得k|X|=k|Y|, 即|X|=|Y|.因此只要证明Hall的条件成立即可. 使X饱和的匹配就是完全匹配. 考虑∀S⊂X, 设连接S与N(S)有m条边, 由G的正则性, m=k|S|. 因这m条边是与N(S)相关联的, m≤k|N(S)|, 即k|S|≤ k|N(S)|, 即|N(S)|≥|S|. 这就是Hall的条件.用求M-增广路的方法来得到最大匹配是很费时的. 我们来给出一个对偶最优化问题.定义:图G的一个顶点覆盖是集合S⊂V(G), 使得G的每条边至少有一个端点在S中. 我们称S中的一个顶点覆盖一些边, 若这个顶点是这些边的公共端点.因为匹配的任意两条边不能被同一个顶点覆盖, 所以顶点覆盖的大小不小于匹配的大小: |S|≥|M|. 所以当|S|=|M| 时就同时得到了最大的匹配和最小的顶点覆盖.定理(König [1931],Egerváry[1931])二部图G的最大匹配的大小等于G的最小顶点覆盖的大小.证明: 设M是G的任一个匹配, 对应的二分集是X,Y. 设U是一个最小的顶点覆盖, 则|U|≥|M|, 我们只要由顶点覆盖U来构造一个大小等于|U|的匹配即完成证明. 令R=U⋃X, T=U⋃Y, 令H, H’分别是由顶点集R⋂(Y-T)及T⋂(X-R)诱导的G的子图. 我们应用Hall的定理来证明H有一个R到Y-T中的完全匹配,H’有一个从T到X-R中的完全匹配. 再因这两个子图是不相交的, 这两个匹配合起来就是G中的一个大小为|U|的匹配.因为R⋂T是G的一个覆盖, Y-T与X-R之间没有边相联接. 假设S⊂R, 考虑在H中S的邻接顶点集N(S), N(S) ⊂Y-T. 如果|N(S)|<|S|, 因为N(S)覆盖了不被T覆盖的与S相关联所有边, 我们可以把N(S) 代替S作为U中的顶点覆盖而得到一个更小的顶点覆盖. U的最小性意味着H中Hall条件成立. 对H'作类似的讨论得到余下的匹配. 证毕.最大匹配的增广路算法输入: 一个二分集为X,Y的二部图G,一个G中的匹配M, X中的M-未饱和顶点的集合U.思路: 从U出发探求M-交替路,令S⊂X,T⊂Y为这些路到达过的顶点集. 标记S中不能再扩张的顶点. 对于每个x∈(S⋂T)-U, 记录在M-增广路上位于x前的点.初始化: S=U,T=∅.叠代: 若S中没有未标记过的顶点, 结束并报告T⋂(X-S)是最小顶点覆盖而M是最大匹配.不然, 选取S中未标记的点x, 考虑每个y∈N(x)且xy∉M, 若y是M-未饱和的, 则得到一个更大的匹配,它是把xy加入原来的匹配M得到的,将x从S中去除. 不然, y是由M中的一条边wy相连接的, w∈X, 把y加入T(也有可能y本来就在T中), 把w加入S. w未标记, 记录w前的点是y. 对所有关联到x的边进行这样的探索后, 标记x. 再次叠代.定理: 增广路算法可以得到一个相同大小的匹配和顶点覆盖.证明: 考虑这个算法终止的情况, 即标记了S中所有的点. 我们要证明R=T⋂(X-S)是大小为|M|的一个顶点覆盖.从U出发的M-交替路只能通过M中的边进入X中的顶点, 所以S-U中的每个顶点通过M与T中的顶点匹配, 并且没有M中的边连接S和Y-T. 一旦一条M-交替路到达x∈S, 可以继续沿着任何未饱和的边进入T, 由于算法是对于x的所有邻域顶点进行探索才终止的,所以从S 到Y-T 没有未饱和边. 从而S 到Y-T 没有边, 证明了R 是一个顶点覆盖.因为算法是找不到M-增广路时终止, T 的每一个顶点是饱和的. 这意味着每个顶点y ∈T 是通过M 匹配与S 中的一个顶点. 由于U ⊂S, X-S 的每个顶点是饱和的, 故M 中与X-S 相关联的边不和T 中的点相连接. 即它们与是饱和T 的边不同的, 这样我们可见M 至少有|T|+|X-S|条边. 因不存在一个比顶点覆盖更大的匹配, 所以有|M|=|T|+|X-S|=|R|.设二部图G 的二分集X 和Y 都是n 个元素的点集, 在其边j i y x 上带有非负的权ij w , 对于G 的一个匹配M, M 上各边的权和记作w(M).定义: 一个n ×n 矩阵A 的一个横截(transversal)是A 中的n 个位置, 使得在每行每列中有且只有一个位置(有的文献中把横截化为独立零元素的位置来表示).定义: 指派问题就是给定一个图G=n n K ,(完全二部图, 即每个X 中的顶点和Y 中的每个顶点有边相连接的二部图)的边的权矩阵A, 求A 的一个横截, 使得这个横截上位置的权和最大. 这是最大带权匹配问题的矩阵形式.定义: 对于图G=n n K ,,设其二分集是X ,Y ,给定G 的边j i y x 的n ×n 权矩阵W={ij w }.考虑G 的子图v u G ,, 设其二分集是U ⊂X ,V ⊂Y, 边集是E(v u G ,), 对于子图v u G ,的带权覆盖u,v 是一组非负实数{i u },{j v },使得ij j i w v u ≥+,)(,v u j i G E y x ∈∀, v u G ,的带权覆盖的费用是∑∑+j i v u 记为C(u,v), 最小带权覆盖问题就是求一个具有最小费用C(u,v)的带权覆盖u,v.引理: 若M ⊂E(v u G ,)是一个带权二部子图v u G ,的最大匹配, 且u, v 是v u G ,的带权覆盖, 则C(u,v)≥w(M). 而且, C(u,v)=w(M)当且仅当ij j i w v u =+,M y x j i ∈∀. 这时M 是v u G ,最大带权匹配, u,v 是v u G ,的最小带权覆盖, 定义这时的v u G ,为G 的相等子图(equality subgraph ).证明: 因为匹配M 中的边是不相交的, 由带权覆盖的定义就得C(u,v)≥w(M). 而且C(u,v)=w(M)当且仅当ij j i w v u =+,M y x j i ∈∀成立. 因一般地有C(u,v)≥w(M).所以当C(u,v)=w(M)时. 意味着没有一个匹配的权比C(u,v)大, 也没有一个覆盖的费用比w(M)小.Kuhn 得到一个指派问题的算法,命名为匈牙利算法, 为的是将荣耀归于匈牙利数学家König 和Egerv áry.指派问题的匈牙利算法(Kuhn[1955], Munkres[1957]):输入G=n n K ,的边的权矩阵A, 及G 的二分集X,Y.初始化: 任取一个可行的带权覆盖,例如)(max ij ji w u =,0=j v ,建立G 的相等子图v u G ,, 其二分集是X, Y ’⊂Y, 求v u G ,的一个最大匹配M. 这个匹配的权和w(M)=C(u,v), M 的带权覆盖是具有最小费用的.叠代: 如M 是G 的一个完全匹配, 停止叠代, 输出最大带权匹配M. 不然, 令U 是X 中的M-未饱和顶点. 令S ⊂X, T ⊂Y 是从U 中顶点出发的M-交替路到达的顶点的集合.令},:min{T Y y S x w v u j i ij j i -∈∈-+=ε.对于所有的S x i ∈, 将i u 减少ε, 对于所有的T y j ∈,将j v 增加ε,形成新的带权覆盖u ’,v ’及对应的新的相等子图v u G '',.如果这个新的相等子图含有M-增广路, 求它的最大匹配M ’, 不然不改变M 再进行叠代.定理: 匈牙利算法能找到一个最大权匹配和一个最小费用覆盖.证明: 算法由一个覆盖开始,算法的每个叠代产生一个覆盖,仅在相等子图有一个完全的匹配为止。

指派问题

指派问题
令 B (m cij )mn ,这样就把系数矩阵C的原最大化指派问题化ij 成系数矩阵 为B的最小化指派问题。两者具有相同的最优解。 2)人数与事数不等的指派问题 对于人数与事数不等的指派问题,通过如下方法,将其化为标准的指派问题: (1)如果人少事多,增加一些虚拟“人”,虚拟“人”做事的费用系数取为
数学模型为:
max Z 85x11 92x12 73x13 90x14 95x21 87x22
78x23 95x24 82x31 83x32 79x33 90x34
86x41 90x42 80x43 88x44 甲
A
x11 x12 x13 x14 1
xx3211
6 4
9 8 0 0
4
0 6 3 6 5
经行运算即可得每行每列都有 0 元素的系数矩阵,
再按上述步骤运算,得到:
5 0 2 0 2
2 3 0 0
0
0 10 5 7 2
9 8 0 0
4
0 6 3 6 5
所画 0元素少于n,未得到最优解。
5 0 2 0 2 2 3 0 0 0 0 10 5 7 2 9 8 0 0 4 0 6 3 6 5
将前面的例题连续作进行下
任务 人
A
B
C
D
E

12 7
9
7
9

8
9
6
6
6

7 17 12 14 9

15 14 6
6 10

4 10 7 10 9
12 7 9 7
8
9 66
9
6
7 6
5 0 2 0 2
2 3 0 0

指派问题

指派问题

2 15 13
(cij)= 10 4 14
4
15 13
2
4 9 7 0 13 11 6 0 0 5 1 10 7 4 4 2 11 4 2 2
9 14 16
7
8 11
9
0 13 6 0 0 5
7 6 3
0 9 2
0
0
1
0
0
第二步:进行试分配,以寻找最优解。
从只有一个0元素的行(或列)开始, 给这个0元素加圈,记,然后划去所 在的列(或行)的其他0元素,记作Ø。 给只有一个0元素的列(或行)的0元素 加圈,记,然后划去所在的行(或列) 的其他0元素,记作Ø。
分配问题的数学模型:
Min Z= cijxij xij =1 (j=1,2……n) xij =1 (i=1,2……n) xij 0或1 (i=1,2…..m; j=1,2……n)
xij =1 (j=1,2……n)表示
第j 项任务只能由一人去完成。
xij =1 (i=1,2……n)
指派问题 (Assignment Problem)
在实际中经常会遇到这样的问题,有n 项不同的任 务,需要n 个人分别完成其中的一项,但由于任务的性 质和各人的专长不同,因此各人去完成不同的任务的 效率(或花费的时间或费用)也就不同。于是产生了 一个问题,应指派哪个人去完成哪项任务,使完成 n 项任务的总效率最高? (一)、指派问题的数学模型 设n 个人被分配去做n 件工作,规定每个人只做一 件工作,每件工作只有一个人去做。已知第I 个人去 做第j 件工作的的效率( 时间或费用)为 Cij(i=1.2…n;j=1.2…n)并假设Cij ≥0。问应如何分配才 能使总效率( 时间或费用)最高?
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例6 今欲指派张王李赵四人加工A、B、C、D四种不同的零件,
每人加工四种零件所需要的时间如下表所示,问应该派谁加工何种 零件可使总的花费时间最少?
零件 人
张 王 李 赵
A BCD
4 6 58 6 10 7 8 7 8 11 9 9 3 84
在类似问题中都必须给出一个像上表一样的矩阵C,称为效率矩阵。
另外,如果任务数与人数不相等,可以象不平衡运输问题一样, 虚设一项任务或人,并且令相应的Cn+1,j或Ci,n+1等于0,(i,j=1,2…n )然后用匈牙利法求解。
匈牙利算法是以指派问题最优解的性质为根据的。
指派问题最优解性质:如果将指派问题的效率矩阵的每一行 (列)的各个元素都减去该行(列)的最小元素,得到一新的矩阵 C′,则以C′为效率矩阵的指派问题的最优解与原问题的最优解相同。
证明:设C的第i行元素都减去该行最小元素ai,第j列元素都减 去该列最小元素bj ,则新矩阵C′第i行第j列的元素为Cij′=Cij-ai-bj,
√√
∕0 2 ○0 3 √
∕0 4 ∕ 0 1 √
○0 1
3
1 √
6
○0
4
∕ 0
调整量θ=1,调整效率矩 阵使之出现更多0元素。
而后,再重新圈出不同行 且不同列的 0 元素,进行 再指派。结果如右:
∕0 1 ○0 2
○0 3 ∕0 ∕0
∕0 ∕0
3 ○0
7
○0
5
∕0
由于◎的个数已达n=4个,所以令◎所对应的xij =1,其余xij =0,已 得最优解。即最优指派方案为:张—C;王—A;李—D;赵—B。
下面用上述算法求解例6。
解:先变换效率矩阵,然后圈出不同行不同列的0元素,结果如下:
4 6 5 8 0 2 1 4 ∕0 2 ○0 3
6
7
10 8
7 11
8
0
9 0
4 1
1 4
○ 2
∕0
2 0
4 1
∕0 3
1
1

9 3 8 4 6 0 5 1 6 0 4 ∕ 0
由于不同行不同列的0元素仅有3个,所以要继续第三步及第四步。
所需最少总时间为:5+6+9+3=23。注意,本例的最优方案不唯一,
张—A;王—C;李—B;赵—D也是最优方案。
以上讨论仅限于极小化问题,对于极大化问题,不能按
minZ′=ΣΣ(-Cij)xij求解,因为匈牙利法要求效率矩阵的元素Cij≥0,这
时可取M=max{Cij},令bij=M-Cij,以B=(bij)n×n为效率矩阵求解。 ∵ΣΣ(M-Cij)xij=nM-ΣΣCijxij ∴当ΣΣ(M-Cij)xij取最小时,ΣΣCijxij便为最大。
以新矩阵C′为效率矩阵的指派问题的目标函数为
Z′=ΣΣCij′xij=ΣΣ(Cij-ai-bj)xij =ΣΣCijxij-Σai-Σbj
=Z-Σai-Σbj 可见新问题的最优解与原问题的最优解相同,只是目标值相差一个 常数。证毕。
利用这个性质,可以使原效率矩阵变换为含有多个0元素的新
效率矩阵,而最优解不变。在新的效率矩阵中如果能找到n个不同
运筹学
第四章 整数规划
§5 指派问题
在实际问题中,常常会碰到这样的问题,要指派n个人去完成n 项不同任务,每个人必须完成其中一项而且仅仅一项。但由于个人 的专长不同,任务的难易程度不一样,所以完成不同任务的效率就 不同,那么应该指派哪个人去完成哪项任务,能使总的效率最好呢? 这就是典型的指派问题。
C
11
C12
C
C
21
C22
C
n1
Cn2
C 1n
C
2n
Cnn
矩阵中的元素Cij表示指派第i个人去完成第j项任务时的效率。 求解这类问题时,通常引入0—1变量: x ij 10,,不指指派派第第i人i人去去完完成成第第j项j项任任务务,i, j 1,2, ,n
于是,对于极小化问题,指派问题数学模型为:
minZ
m
i 1
jn1cij
x
ijBiblioteka n x ij 1, j 1,2, ,n
i 1
n x ij 1,i 1,2, ,n
j 1
xij=1或0
从模型看,指派问题是特 殊的0—1规划,也是特殊 的运输问题,可以用这两 种问题的求解方法求解。 但这样做是不合算的。
根据指派问题的特殊结构,我们有更为简便的方法。这就是下 面将介绍的匈牙利法,这个方法是由匈牙利数学家康尼格(D.Konig) 给出的。
行且不同列的0元素,则可以令它们对应的xij等于1,其它xij等于0,
显然,该解一定是最优解。这就是匈牙利算法的基本思想。
具体步骤如下:
第一步 变换效率矩阵,使各行各列都出现 0 元素。 1°效率矩阵每行元素都减去该行最小元素; 2°效率矩阵每列元素都减去该列最小元素。
第二步 圈出不同行且不同列的 0 元素,进行试指派。 1°(行搜索)给只有一个0 元素的行中的0 画圈,记作 “◎”,并划去与其同列的其余0元素; 2°(列搜索)给只有一个0 元素的列中的0 画圈,记作 “◎”,并划去与其同行的其余0元素; 3°反复进行1°、2°,直至所有0元素都有标记为止。 4°若行(列)的0元素均多于一个,则在0元素最少的行(列) 中选定一个0元素,标“◎”,并划去与其同行同列的其余0元素。
5°若不同行且不同列的 “◎”已达n个,则令它们对应的xij =1,其余xij =0,已得最优解,计算停,否则转第三步。
第三步 用最少直线覆盖效率矩阵中的0元素。 1°对没有“◎”的行打“√”; 2°对打“√”行中的0元素所在列打“√”; 3°对打“√”列中“◎”所在行打“√”; 4°反复进行2°、 3°,直至打不出新 “√”为止。 5°对没 打“√”的行画横线,对打“√”列画竖线,则效率矩 阵中所有0元素被这些直线所覆盖。 第四步 调整效率矩阵,使出现新的0元素。 1°找出未被划去元素中的最小元素,以其作为调整量θ; 2°矩阵中打“√”行各元素都减去θ,打“√”列各元素都加θ (以保证原来的0元素不变),然后去掉所有标记,转第二步。
相关文档
最新文档