指派问题
第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 指派问题
解: 可行解{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 再进行叠代.定理: 匈牙利算法能找到一个最大权匹配和一个最小费用覆盖.证明: 算法由一个覆盖开始,算法的每个叠代产生一个覆盖,仅在相等子图有一个完全的匹配为止。
指派问题
数学模型为:
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. 指派问题(Assignment Problem)
有n项任务由n个人完成,每项任务交给一个人,每人都有一项 任务。由i个人完成j项任务的成本(或效益)为cij。求使总成本 最小(或总效益最大)的分配方案。
设:
0 第i个人不从事第j项任务 x ij 1 第i个人被指派完成第j项任务
1
8 7
2
10 8
3
9Hale Waihona Puke 1143 25
6 9
船
3
4 5
2
7 10
4
7 8
6
5 10
4
2 3
4
7 11
匈牙利法(Hungarian Method)
1.写出行数和列数相同的成本矩阵; 2.压缩成本矩阵:每一行的所有成本均减去行里面 最小的成本,然后每一列的所有成本均减去列里 面最小的成本,使新的成本矩阵每一行每一列至 少有一个为0; 3.以最少的直线(水平或者垂直)划掉所有的0, 若所用直线数与行数相同,则已经找到最优解, 可以跳到第5步,否则就进行第4步; 4.找到没有被划掉的最小的数值,从所有没有被划 掉的数值中减去这一数值,而所有被划掉2次的 划线数值加上这一数值。返回第3步; 5.根据0的位置确定最佳指派方案。
销售 人员
指派问题3 (Assignment Problem)
7项工作分别分派给7个设备的成本若下表所示, 应如何分派?
成本 1 2 3 1 68 14 54 2 48 64 10 3 57 71 54 设备 4 48 50 13 5 84 24 8 6 10 10 9 7 77 84 8
任务
4 5 6 7
一个销售经理要分派6个销售人员负责不同地区 的销售,这些销售人员有不同的关系和能力,他们 的期望销售额如下表所示,应如何分派?
第五节 指派问题
第二步:进行试指派,以寻求最优解 经过第一步后,矩阵的每行每列都有了0 元素, 但我们希望找出n个位于不同行不同列的0 元素, 如果能找到,我们就以把这些元素写成1, 令其余的元素写成0 ,即得问题的最优解.
0 13 7 6 0 6 LL 0 5 3 0 1 0 0 9 2 0
13
14 16 11
10 9 7
15 13 9
目标函数:
min S 2 x11 15 x12 13 x13 14 x14
10 x21 4 x22 14 x23 15 x24
9 x31 14 x32 16 x33 13 x34
7 x41 8 x42 11 x43 9 x44
0 7 15 13 2 0 10 4 14 15 min 1 6 14 16 13 8 0 9 0 7
0 1 0 0
0 0 0 1
1 0 0 0
(2)出现死循环时灵活处理
例5.7 求解指派问题,系数矩阵为
n
目标函数的系数可以写成矩阵的形式,称 为系数矩阵或收益矩阵.
如例1的收益矩阵为
2 15 13 4 10 4 14 15 C 9 14 16 13 8 11 9 7
满足约束条件的可行解也可以写成矩阵形 式,称为解矩阵.
如例1的解矩阵有
( x )ij 0 0 0 1 0 1 0 0 或 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 或 1 0 0 1 0 0 0 1 1 0 0 0
指派问题(经典运筹学)
1 1 c 11 2 c 21 … i c i1 … n c n1 2
c 12 c 22 ci2 cn2
…
1 2 3 4
6 20 10
21
25 14 0
5
x6
解:x i
1
2
0
不在第i个地区建站
i=1,2, …,6
Z表示全区消防站总数
2 6 1 x3 x4 1 s.t x3 x4 x5 1 x x x 1 4 5 6 x i 0 ,1 i 1, 2 , , 6
一、决策问题与0-1变量
决策变量
xi
x i 是否做第
i 件事 i 1, 2 , , n
1 0
做第i件事 不做第i件事
x1 x 2 x n k
n件事中必须做k件并只做k件事 n件事中最多做k件事 n件事中至少做k件事
x1 x 2 x n k x1 x 2 x n k
当n=4时, 有16变量,8个约束方程
例:现有4份工作,4个人应聘,由 于各人技术专长不同,他们承担 各项工作所需费用如下表所示, 且规定每人只能做一项工作,每 一项工作只能由一人承担,试求 使总费用最小的分派方案。
工作
Z表示总费用
max Z 3 x11 5 x12 4 x13 5 x14 6 x 21 7 x 22 6 x 23 8 x 24 8 x 31 9 x 32 8 x 33 10 x 34 10 x 41 10 x 42 9 x 43 11 x 44
第五节指派问题
第四步:对上述矩阵进行变换,目的是增加独立0元素的个数。方法是 在未被直线覆盖的元素中找出一个最小元素,然后在打“”行各元素 中都减去这一元素,而在打“”列的各元素都加上这一最小元素,以 保持原来0元素不变(消除负元素)。得到新的系数矩阵。(它的最优 解和原问题相同,为什么?)
7 4 0 11 0
对于指派问题,由于系数矩阵均非负,故若能在在系数矩阵 中找到n个位于不同行和不同列的零元素(独立的0元素),则对 应的指派方案总费用为零,从而一定是最优的。
匈牙利法的步骤如下: 步1:变换系数矩阵。对系数矩阵中的每行元素分别减去该行的最 小元素;再对系数矩阵中的每列元素分别减去该列中的最小元素。若 某行或某列已有0元素,就不必要在减了(不能出现负元素)。 步2:在变换后的系数矩阵中确定独立0元素(试指派)。若独立0 元素已有n个,则已得出最优解;若独立0元素的个数少于n个,转步3。
若人少事多,则添上一些虚拟的“人”。这些虚拟的人作各事的费用 系数可取0,理解为这些费用实际上不会发生。若人多事少,则添上一些虚 拟的“事”。这些虚拟的事被各人做的费用系数同样也取0。
• 一个人可做几件事的指派问题 若某个人可做几件事,则可将该人看做相同的几个人来接受指派。这 几个人作同一件事的费用系数当然都一样。 • 某事一定不能由某人作的指派问题
0 3 0 0 1 7 0 2 3 0 0 5 0 2 3
11 8 7 3 2 1 0 4 4 0
第四步:对上述矩阵进行变换,目的是增加独立0元素个数。方法是在 未被直线覆盖的元素中找出一个最小元素,然后在打“”行各元素中 都减去这一元素,而在打“”列的各元素都加上这一最小元素,以保 持原来0元素不变(消除负元素)。得到新的系数矩阵。(它的最优解 和原问题相同,为什么?因为仅在目标函数系数中进行操作)
第8讲指派问题
第八讲指派问题•问题提法:个人有项任务,每人一项任务。
由于每个人完成任务的效率不同,需要决策指派一个方案使得总效率和最大。
•实际问题:条航线有艘船去航行•台机床加工个原件等n n n n n n 问题背景•某公司计划开办五家商店,决定有五家建筑公司分别承建。
承建费用报价为。
数据如下页所示表格:问:怎样分配建造任务使得总费用最小?j B i A ij cB1B2B3B4B5 A14871512 A279171410 A3691287 A46714610 A56912106引入0-1变量:表示指派第个人完成第项工作,=表示不指派第个人完成第项工作.用表示第个人完成第项工作所需的资源数,称之为效率系数(或价值系数).0>ij c i j i jijx ijx ⎪⎩⎪⎨⎧,0,1i 指派问题的一般数学模型j目标函数表示完成全部项工作所消耗的总资源数最少.第一个约束条件表示第个人只能完成一项工作(也必须完成一项工作),第二个约束条件表示第项工作只派一个人去完成.决策变量取0或1.指派问题的数学模型1,0,1,1,1,1..min ======∑∑∑∑====ij n 1j ij n1i ij n 1i n1j ijij x nj x ni x t s x c z n i j解标准指派问题. 令承建不建则问题的模型为=ij x ⎪⎩⎪⎨⎧,0,1i A j B i A 5,...,1=j min 55541211610...84x x x x Z ++++=..t s 5,...,1,151==∑=j xi ij 5,...,1,151==∑=i x j ij 5,...,1,,10==j i x ij 或jB•匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法,并推动了后来的原始对偶方法。
美国数学家哈罗德·库恩于1955年提出该算法。
此算法之所以被称作匈牙利算法,是因为算法很大一部分是基于以前匈牙利数学家DénesKőnig和JenőEgerváry的工作之上创建起来的。
指派问题
第二步:找出矩阵每列的最小元素,再分别从每列中减去, 第二步:找出矩阵每列的最小元素,再分别从每列中减去,有
0 11 122 202 0 11 22 22 25 0 100 180 25 0 0 0 ⇒ 0 5 105 185 0 5 5 5 27 0 145 225 27 0 45 45
表5-34 工作 人员 甲 乙 丙 丁 A 85 95 82 86 B 92 87 83 90 C 73 78 79 80 D 90 95 90 88
x11 x X = 21 x31 x41
x12 x22 x32 x42
x13 x23 x33 x43
x14 x24 x34 x44
指派问题 assignment problem
min 58 75 65 82 69 50 70 55 180 150 170 200 260 58 230 50 ⇒ 250 65 280 55
0 11 122 202 25 0 100 180 0 5 105 185 27 0 145 225
6 17 17 0 0 0 0 0 0 0 45 45
第五步:覆盖所有零最少需要 条直线 表明矩阵中存在4个 条直线, 第五步:覆盖所有零最少需要4条直线,表明矩阵中存在 个 不同行不同列的零元素.容易看出4个 不同行不同列的零元素.容易看出 个“0”的位置 的位置
( 0 ) 30 0 × 32 6 17 17 × ( 0) 0 0 × 0 ( 0) 0 ( 0) 45 45 ( 0 ) 30 × 0 32 6 17 17 × 0 ( 0) 0 × ( 0) 0 0 ( 0) 45 45
指派问题
13 0 5 1
7 6 3 0
0 9 ( b ij ) 2 0
第二步: 进行试指派,以寻求最优解。为此,按以 下步骤进行。 经第一步变换后,系数矩阵中每行每 列都已有了0元素;但需找出n个独立的0 元素。若能找出,就以这些独立0元素对 应解矩阵(xij)中的元素为1,其余为0, 这就得到最优解。当n较小时,可用观察 法、试探法去找出n个独立0元素。若n较 大时,就必须按一定的步骤去找,常用 的步骤为:
•减数得零—求初始匹配 •圈零划线—查是否最大匹配 •找数调整—求新的最优匹配 运筹学
指派问题的解法
第一步: 使指派问题的系数矩阵经变换,在各行各列中 都出现0元素。 (1) 从系数矩阵每行元素减去该行的最小元素; (2) 再从所得系数矩阵的每列元素中减去该列 的最小元素。 若某行(列)已有0元素,那就不必再减了。
④
7 4 0 11 0
0 3 8 8 4
2 0 3 0 1
0 0 5 0 4
2 0 0 4 3
运筹学
已具有n个独立0元素。这 就得到了最优解,相应的解 矩阵为: 由解矩阵得最优指派方案 甲—B,乙—D,丙—E,丁—C,戊—A
0 0 0 0 1
想想看!
运筹学
指派问题的形式表述
给定了一系列所要完成的任务(tasks)以及 一系列完成任务的被指派者(assignees), 所需要解决的问题就是要确定出哪一个人 被指派进行哪一项任务,使总的效率最高?
运筹学
指派问题的假设
被指派者的数量和任务的数量是相同的 每一个被指派者只完成一项任务 每一项任务只能由一个被指派者来完成
表1
任 人员 甲 乙 丙 丁 务
4.5 指派问题
4.5 指派问题有n项任务要分给n个人去完成,每人完成一项.由于任务的性质以及个人的专长不同,因此,各人完成不同任务的效率就有差别,如何分配这些工作任务,使总的效率最高?这类问题称为指派问题.在现实生活中,诸如若干项合同要选择若干个投标者来承包,若干班级要安排在各教室上课等等均属于这类指派问题.如果我们记x ij= 1,当指派第i人做第j项工作;0,不指派第i人做第j项工作.那么指派问题的数学模型可以表示为在x ij=0或1,以及x ij=1(j=1,2,…n), ∑x ij=1(i=1,2,…n)的约束条件下求目标函数z=∑∑c ij x ij的最大(或最小)值,其中c ij表示第i个人完成第j项任务的效率(或成本、时间、费用等).可以看出,指派问题是特殊的整数规划问题,又是特殊的0-1规划问题和特殊的运输问题,因此,它可以用多种方法来解.[案例13]附表给出五位工人完成五种工作所能取得的效益,试求出分配该五位工人分别担任一项工作的方案,使取得的效益最大.(上海市第五届中学生数学知识应用竞赛决赛试题五)分析(1)按题目要求,应选取表中的不同行、不同列的五个数据,还要求选取的这五个数的和最大,如果逐一验算,需考5!=120种方案.实际上,这是一个典型的“指派问题”。
(2)要求目标函数最大.为此,可将表中最大的一个数减去表中每一个数,由此可将最大化问题化归为最小化问题.表1表2解 (l) 将表中最大数80减去表中每一个数得表1.(2) 每列减去本列的最小数,并在有0的位置上考虑安排工作,得表2.(3) 第3、4行未满足,减去本行中最小数,得表3.(4) 由于第四列己满足,故将第1、3行减1,第四列加1.此时(3,1)格为0,但(5,1)格已安排工作,注意到(5,5)为0,故可作简单调整得表4.表3表4(5)现在只有第4行未满足,减去本行最小数得表5.表5至此,我们已得到问题的解: x14=1, x22=1, x31=1, x43=1, x55=1,即分配工人A做第4、B做第2、C做第1、D 做第3、E做第5件工作,可以取得最大效益为17+50十18十28+80=193.[案例14]某商业公司计划开办五家新商店,为了尽早建成营业,商业公司决定由5家建筑公司分别承建已知建筑公司A i(i=1,2,…5)对新商店B j(j=1,2,…,5)的建造费用的报价(万元)为c ij(i,j=1,2.…,5),见下表.试问商业公司应当对这5家建筑公司怎样分配建造任务,才能使总的建造费用最少?解这是最小化指派问题,可直接利用表上作业法进行操作,见表1-3.最优方案为:让A1承建B3,A2承建B2,A3承建B1,A4承建B4,A5承建B5,此时能使总的建造费用最少,为7+9+6+6+6=34万元表1表2说明将表1第2、3行减去本行最小数后,(2,2)格为0,与(4,2)格冲突,但(4,4)格为0,于是调整为(2,2)、(4,4)安排任务,(4,2)不做安排,这就得到了表2.表2到表3也使用了这种微调的技巧.表3。
指派问题
与模型1相比:
1. 约束相同;
2 寻找独立0元素
若看作第三列 上的惟一0元素
用一直线覆 盖所在行
0 0 0 0 0
3 1 2 0 2
0 11 8 7 7 3 3 2 1 5 0 4 3 4 0
只圈出4个0, 即:只有4个独 立的0元素,少 于系数矩阵的 阶数5。
第二列只有惟 一0元素
若C=(cij)n×n的第一行各元素分别加上一个常数k, 得到一个新矩阵C’=(c’ij) n×n
c11 k c C ' 21 cn1 c12 k ... c1n k c22 ... c2 n ... ... cn 2 ... cnn
效率矩阵C’
练习 有一份中文说明书,需译成英、日、德、俄 法五种文字。分别记作E、J、G、R、F。现有甲、乙 、丙、丁、戊五人,他们将中文说明书翻译成不同语 种的说明书所需时间如下表。问应指派何人去完成何 工作,使所需总时间最少?
任务 人
E 12 8 7
J 7 9 17
G 9 6 12
R 7 6 14
F 9 6 9
第五节 指派问题
assignment problem
• • • • 指派问题的数学模型 指派问题解的特点 指派问题的求解方法——匈牙利法 非标准形式的指派问题
一、指派问题的数学模型
例、有四项任务需分派给甲、乙、丙、丁四个人去 做,这四个人都能承担上述四项任务,但完成各项任 务所需时间如下表所示。问应如何分派任务可使完成 任务的总工时最少?
运筹学_指派问题
(xij)是n×n矩阵,对应于效率矩阵(cij).
工作
x11 人 x i1 xn1
x1n xij xin xnj xnn x1 j
可行解矩阵
x
i 1
n
ij
1,
j 1, 2, , n ②
指派问题的最优解有这样性质,若从效率矩 阵(cij)的一行(列)各元素中分别减去该行(列)的 最小元素,得到新矩阵(bij),那么以(bij)为效率 矩阵求得的最优解和用原效率矩阵求得的最优解 相同 。即 定理2 设给定了以C = (cij)为效率矩阵指派问题G, 现将C的元素cij 改变为 bij cij i j , i 与 j 为常数 则以B= ( bij )为效率矩阵指派问题G’与G有相同的最 优解。
第四节 指 派 问 题
assignment problem
在生活中经常遇到这样的问题,某 单位需完成n项任务,恰好有n个人可承 担这些任务。由于每人的专长不同,各 人完成任务不同(或所费时间),效率也 不同。于是产生应指派哪个人去完成哪 项任务,使完成n项任务的总效率最高 (或所需总时间最小)。这类问题称为指 派问题或分派问题。
行列都有 零元素
7 6 3 0*
0 * 9 (b ) ij 2 0
0 0 最优解为 ( xij ) 1 0
0 1 0 0
0 0 0 1
1 0 0 0
定理3 若矩阵C可分成”0”与非”0”两部分,则覆 盖”0”元素的最少直线等于位于不同行不同列的”0” 元素的最大个数.
如
5 0* 2 0 2 2 3 0* 0 0 0* 10 5 7 2 -2 9 8 0 0* 4 0 6 3 6 5 -2 5 0* 2 0 2 2 3 0* 0 0 2 8 3 5 0 9 8 0 0* 4 2 4 1 4 3
指派问题
0 1 X= 0 0
1 0 0 0
0 0 0 1
0 0 1 、丁 做第三项, 最高总分Z=92+95+90+80=357
人数和工作数不相等的指派问题
• 像处理不平衡运输问题那样,根据情况,虚设人,或者虚设 工作任务。虚设人完成工作的费用以及任何人完成虚设工作 的费用取零(理解为这些费用实际不会发生)。这样一来, 便可将人数和工作数不相等的指派问题转化为标准形式的指 派问题。
2 2 0 0
0 1 2 1
0 0 0 1
• 步骤三:找出独立零元素。
4 ◎ 0 2 0 Φ
2 ◎ 0 Φ 0 2 1 Φ 0 0 2 ◎ 0 Φ 0 1 1 ◎
4 Φ 0 2 0 ◎
2 ◎ 0 Φ 0 2 1 ◎ 0 0 2 Φ 0 ◎ Φ 0 1 1
' M cij ,其中 M max cij ,则 令 cij
1i , j n
n
n
i 1 j 1
' ' z cij xij (M cij xij ) M xij cij xij Mn z ' i 1 j 1 i 1 j 1 i 1 j 1 i 1 j 1
• 找独立0元素,常用的步骤为:
从只有一个0元素的行开始,给该行中的0元素加圈,记作◎ 。
然后划去◎ 所在列的其它0元素,记作Ø ;这表示该列所代 表的任务已指派完,不必再考虑别人了。依次进行到最后一 行。
从只有一个0元素的列开始(画Ø的不计在内),给该列中的0
元素加圈,记作◎;然后划去◎ 所在行的0元素,记作Ø , 表示此人已有任务,不再为其指派其他任务了。依次进行到 最后一列。
指派问题(含非标准指派问题)
第五章 整数规划§1 整数规划的数学模型及特点要求一部分或全部决策变量必须取整数值得规划问题称为整数规划。
其模型为:Max(或min)z=∑=nj jj xc 1s.t ⎪⎪⎩⎪⎪⎨⎧=≥=≥=≤∑=nj nj i ij ij xx x n j x m i b x a ,,,2,10,2,1),(211若要求决策变量只能取值0或1的整数规划称为0-1型整数线性规划。
§5 指 派 问 题 一. 指派问题的标准形式及数学模型在现实生活中,有各种性质的指派问题。
例如,有若干项工作需要分配给若干人(或部门)来完成;有若干项合同需要选择若干个投标者来承包;有若干班级需要安排在各教室上课等等。
诸如此类的问题,它们的基本要求是在满足特定的指派要求条件下,使指派方案的总体效果最佳。
由于指派问题的多样性,有必要定义指派问题的标准形式。
指派问题的标准形式(以人和事为例)是:有n 个人和n 件事,已知第i 个人作第j 件事的费用为),2,1,(n j i c ij =,要求确定人和事之间的一一对应的指派方案,是完成这n 件事的总费用最少。
为了建立标准指派问题的数学模型,引入2n 个0-1变量:⎩⎨⎧=10ij x这样,问题的数学模型可写成 ∑∑===ni nj ij ijx cz 11min (5.1)s.t ⎪⎪⎪⎩⎪⎪⎪⎨⎧======∑∑==n j i x n i x n j x ij n j ij ni ij ,2,1,1,0,2,11,2,1111 (5.3)其中,(5.1)表示每件事必优且只有一个人去做,(5.2)表示每个人必做且只做一件事。
注:○1 指派问题是产量(i a )、销量(j b )相等,且i a =j b =1,i ,j=1,2,…n 的运输中部分或全部取整数 若指派第i 人作第j 件事若不指派第i 人作第j 事i ,j=1,2,…n(5.2)(5.4)问题。
○2 有时也称ijc 为第i 个人完成第j 件工作所需的资源数,称之为效率系数(或价值系数)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
每人加工四种零件所需要的时间如下表所示,问应该派谁加工何种 零件可使总的花费时间最少?
零件 人
张 王 李 赵
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元素不变),然后去掉所有标记,转第二步。