指派问题(含非标准指派问题)
指派问题的概念
![指派问题的概念](https://img.taocdn.com/s3/m/cd479128bf1e650e52ea551810a6f524ccbfcbff.png)
指派问题的概念指派问题,这可不是个陌生的名词,您要是觉得陌生,那可就有点落伍啦!啥是指派问题?简单来说,就是把一些任务或者工作分配给一些人或者资源,让效果达到最好或者成本降到最低。
就好比您家里请客吃饭,您得安排谁去买菜、谁去做饭、谁去洗碗,得让这事儿顺顺当当的,大家都能轻松又高效地完成任务,这其实就是一种简单的指派。
再比如说,一个公司有几个项目要做,有几个团队能接手,那怎么把项目分配给最适合的团队,让项目能顺利完成,质量还高,这也是指派问题。
您想想,要是安排得不好,那会咋样?就像让一个根本不会做饭的人去掌勺,最后大家吃得都不开心,这顿饭不就搞砸啦?在生活中,指派问题无处不在。
学校里安排老师教不同的班级和课程,医院里安排医生值班,这不都是在做指派嘛。
要是能把指派问题解决得好,那可不得了。
能节省时间、节省精力,还能让大家都满意。
比如说一个快递公司,要安排快递员去不同的区域送货,如果安排得合理,就能快速送完,客户满意,快递员也不累。
可要是安排不好呢?快递员跑冤枉路,货物送得慢,客户抱怨,公司也损失。
那怎么才能解决好指派问题呢?这可不是拍拍脑袋就能决定的。
得考虑好多因素呢。
比如说每个人或者每个资源的能力和特点,任务的难度和要求,时间的限制等等。
就像安排一场演出,得知道每个演员擅长啥,节目需要啥样的表演,还有演出的时间安排,这都得考虑清楚,才能把节目安排得精彩。
指派问题可不像表面看起来那么简单,这里面的学问大着呢!您要是不认真对待,可能就会搞得一团糟。
但要是能掌握好这个,那不管是生活还是工作,都能变得更加井井有条,您说是不是?所以啊,弄清楚指派问题,学会解决它,对我们的生活和工作那可是太重要啦!。
指派问题详解
![指派问题详解](https://img.taocdn.com/s3/m/2a8e8db91a37f111f1855be7.png)
第一章绪论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 再进行叠代.定理: 匈牙利算法能找到一个最大权匹配和一个最小费用覆盖.证明: 算法由一个覆盖开始,算法的每个叠代产生一个覆盖,仅在相等子图有一个完全的匹配为止。
5.5 指派问题
![5.5 指派问题](https://img.taocdn.com/s3/m/94376f35ee06eff9aef807f6.png)
cij 为第 i 个人为完成第 j 项任务时的工时消
3. 指派问题数学模型—标准形式 如果一个指派模型满足以下三个条件:
1)目标要求为min
2)效率矩阵(cij)为m阶方阵
3)效率矩阵中所有元素cij≥0,且为常数
则称上面的数学模型为指派问题的标准形.
4. 指派模型的标准形的特点: 含有m×m个决策变量,均为0-1变量 m+m=2m个约束方程 给定一个指派问题时,必须给出效率矩阵(系数矩阵) C=(cij)mxm,且cij0,因此必有最优解 。
0 1 0 0
0 0 0 1
指派问题的解矩阵应具有如下特点: (1)解矩阵(xij)中各行各列的元素之和都是1; (2)可行解(最优解)中恰含有4个非零元,即4个1; (3)可行解(最优解)矩阵中的1恰取于不同行不同列。
人 工作 译成英文 译成日文 译成德文 译成俄文 任务
甲 2 15 13 4 1
定理1 如果从指派问题效率矩阵[cij]的每一行元素中分别 减去(或加上)一个常数ui(被称为该行的位势), 从每一列分别减去(或加上)一个常数vj(称为该列的位势) 得到一个新的效率矩阵[bij], 若其中bij=cij-ui-vj, 则[bij]的最优解的结构等价于[cij]的最优解的结构.
证明:将从[bij]中得到的解 代入分配问题模型的目标函数式,有
从只有一个0元素的行(或列)开始,
给这个0元素加圈,记, 这表示对这行所 代表的人,只有一种任务可指派。 然后划去所在的列(或行)的其他0元素,记作Ø。 这表示这列所代表的任务已指派完,不必再考虑别人
0
6
13
7 6 3 0
0 9 2 0
5 1
0
给只有一个0元素的列(或行)中的0元素加圈, 记, 然后划去所在的行(或列)的其他0元素,记作Ø。 这表示这行所代表的人已指派完, 不必再考虑他做别的任务了。 反复进行上述两步,直到所有的0元素都被圈出和 划掉为止。
指派问题
![指派问题](https://img.taocdn.com/s3/m/4835140879563c1ec5da7194.png)
指派问题 运输问题
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个销售人员负责不同地区 的销售,这些销售人员有不同的关系和能力,他们 的期望销售额如下表所示,应如何分派?
运筹学指派问题课件
![运筹学指派问题课件](https://img.taocdn.com/s3/m/e8d4253b0066f5335a812124.png)
c
i 1 j 1
n
n
ij
xij
n xij 1 i 1 n st . xij 1 (i , j 1, 2, ..., n) j 1 x 1or 0 ij
运筹学教程
例1:某商业公司计划开5家新商店,商业公司决定由5家建筑 公司分别承建。已知建筑公司Ai(i=1,2…5)对新商店Bj(j=1…5) 的建筑费用报价Cij.问题:商业公司对5家建筑公司如何分配任 务,才能使总的建筑费用最少? Cij Ai Bj
运筹学教程
指派问题解法:匈牙利解法 解法思想:
若从系数矩阵C的任何一行(列)各元素中分别减去 一个常数K(K可正可负)得到新矩阵C’,则以C’为系 数矩阵的指派问题与原问题有相同的解,但最优值 比原问题最优值小K。
匈牙利法条件: MIN、i=j 、Cij≥0
运筹学教程
匈牙利法的主要步骤: 步骤1:变换系数矩阵,使在各行各列都出现零元素。 (1)从矩阵C的每行元素减去该行的最小元素;
0 11 8 7 7 3 3 2 1 C ' 5 0 4 3 4 0
第二步 圈0 寻找不同行不同列的0元素,圈之。 所在行和列其它0元素划掉
0 0 0 0 0 3 0 11 8 第三步 打 无的行打,打行上0列打 , 1 7 7 3 打列上行打,打行上0列打 ' 2 3 2 1 C 0 5 0 4 0 3 0 11 8 0 1 7 7 3 2 3 4 0 C ' 0 2 3 2 1 第四步 确定方案划线 0 0 5 0 4 没有打行上画一条横线; 0 2 3 4 0 有打列上画一条竖线;
15 120 15 12 0 14 100 14 100 8 7 0 0 8 7
第4章整数规划——指派问题
![第4章整数规划——指派问题](https://img.taocdn.com/s3/m/dffcb8f2172ded630b1cb651.png)
13 11 2 0 10 11 57 4 4 2 13 7 0 0 6 9 5 32 0 0
0 0 X 1 0
0 0 1 1 0 0 0 0 0 0 1 0
故可得到指派问题的最优解X,这样 安排能使总的维修时间最少,维修时间为 z=4+4+9+11=28(小时)。
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 求其独立零元素组。
4 指派问题
0 , 不 指 派 第 i小 组 维 修 第 j台 机 床 x ij ( i , j 1, 2 ,3, 4 ) 1, 指 派 第 i 小 组 维 修 第 j 台 机 床 机车 该问题的数学模型为: 1 2 3 4 4 小组 min z cij xij i 1 j 1 1 x11 x12 x13 2 x11 15 x12 2 x21 x22 x23 任务约束 4 x 1, j 1, 2 , 3 , 4 3 x31 x32 x33 ij i 1 4 x41 x42 x43 人员约束 4 x ij 1, i 1, 2 , 3, 4 j 1 x ij 0 或 1 i , j 1 , 2 , 3 , 4
整数规划2-指派问题
![整数规划2-指派问题](https://img.taocdn.com/s3/m/456618acb0717fd5360cdca0.png)
原来的 0 元素不变。这样得到新系数矩阵(其最优解和原问
题相同)。若得到 n 个独立的 0 元素,则已得最优解,否则 重复该步骤继续变换系数矩阵。
匈牙利解法的一般步骤:
5 2 0 9 0
0 3 10 8 6
2 0 5 0 3
0 0 7 0 6
2 0 2 4 5
7 4
0 3 8 8 4
2 0 3 0 1
匈牙利解法:
匈牙利解法的关键是利用了指派问题最优解的如下性质: 若从指派问题的系数矩阵 C = ( cij )n×n 的某行(或某列)
各元素分别减去一个常数 k ,得到一个新的系数矩阵C’ = ( c’ij ),
则以 C 和 C’ 为系数矩阵的两个指派问题有相同的最优解。
匈牙利解法的一般步骤:
步骤一: 变换系数矩阵。使其每行及每列至少有一个零元素,同 时不出现负元素。 步骤二: 进行试指派,即确定独立零元素。 步骤三: 继续变换系数矩阵,然后返回步骤二。
5)
对没有打√号的行画一横线,对打√号的列画一竖线, 这样就得到能覆盖所有零元素的最少直线数目的直 线集合。
匈牙利解法的一般步骤:
5
0
2
0
2
2
0
3
10
0
5
0
7
02√源自9086
0
3
0
6
4
5
√
√
匈牙利解法的一般步骤:
继续变换系数矩阵。其方法是在未被直线覆盖的元素中
找出一个最小元素。然后在打√号行各元素都减去这一最小 元素,而在打√号列的各元素都加上这一最小元素,以保证
11 10 7 4 4
2 11 4 2 2
0 6 0 0
最短路径、指派、运输问题
![最短路径、指派、运输问题](https://img.taocdn.com/s3/m/c7b2d1c1a1c7aa00b52acbd9.png)
第二步:进行试指派以寻求最优解。
(1)进行行检验:从只有一个0元素的行开始,给这 个0元素加(),记作(0);再划去(0)所在列的其它 0元素,记作φ。若遇到有两个0元素以上的行,先放下。 (2)进行列检验:给只有一个0元素的列0元素加() ,记作(0);然后划去(0)所在行的0元素,记作φ。 (3)再对两个以上0元素的行和列标记,任意取一个 加()。
B1 A1 A2 A3 4 7 6
B2 8 9 9
B3 7 17 12
B4 15 14 8
B5 12 10 7
A4
A5
6
6
7
9
14
12
6
10
10
6
三、其它指派问题
(1)目标函数求最大值的指派问 题 对于此问题可做一个新的 矩阵B=(bij)。找出原矩阵的最 大元素m,令B=(bij)=m-cij
∑
产 量 与 销 量 平 衡
解: 设产地Ai到销地Bi的运量为xij,由问题构造运量平衡表
可以知道:
(1)产销平衡 (2)Ai运出量等于产量 (3)Bj运入量等于销量
a b
i 1 i j1
m
n
j
x
j 1
n
ij
ai
x
i 1
m
ij
bj
运量平衡表
销地Bi 运价 产地Ai A1 A2 C11 C21 C12 C22 B1 B2
4 2 (cij ) 4 3 3 3 3 2 4 6 5 6 1 - 1 3 5 - 2 0 1 4 - 3 5 -2 1 2 1 0 0 3 0 - 1 3 4 3 - 2 0 1 2 1-3 4 3 -2 1 -2 2 1 0 0 1 2 0 2 0 3 (b ) ij 1 3
整数规划3-指派问题
![整数规划3-指派问题](https://img.taocdn.com/s3/m/0072d9866529647d27285280.png)
2 3 5 M 4 11 13 M A0 6 M 15 M 7 16 18 M
重庆大学经济与工商管理学院 肖智
§4.3 指派问题
从(aij)n的第 i 行元素中减去一个常数ui (i=1,2,…,n), 从第j 行元素中减去一个常数vj(j=1,2,…,n),得到一 个新的效益矩阵(bij)n,其中每一元素bij=aij-ui-vj,则 (bij)n问题的最优解也是(aij)n问题的最优解。 ( 2 )定理 2 :若一方阵中的一部分元素为 0 ,一部分元 素为非0,则覆盖方阵内所有0元的最少直线数恰好 等于那些位于不同行、不同列的0元的最多个数。 3)基本步骤: (1)效益矩阵的初始变换——零元素的获取 ① 行变换:效益矩阵A0的每行减去该行的最小元素得 新效益矩阵A1; ② 列变换:对A1的每列减去该列的最小元素得新效益 矩阵A2; 重庆大学经济与工商管理学院 肖智
重庆大学经济与工商管理学院 肖智
§4.3 指派问题
3、资源数大于任务数: 1)基本思想: 增加任务数使之变为平衡问题后,应用平衡问 题的求解方法进行求解; 2)基本步骤: (1) 需设任务项使之变为平衡问题,并将添加项的效 益按下列原则赋值: 0 , 对极大化问题 akt M , 对极小化问题 其中:M为任意大的正数 (2)化为标准型; (3)应用匈牙利算法求解;
重庆大学经济与工商管理学院 肖智
§4.3 指派问题
2、有缺项问题 1)问题: 第 k 种资源不支持第 t 项任务(即:akt不存在); 2)基本思想: 补缺后化为标准型求解; 3)基本步骤: (1)补缺: 0 , 对极大化问题 akt M , 对极小化问题 其中:M为任意大的正数 (2)化为标准型; (3)应用匈牙利算法求解;
数学建模作业_动态规划求解指派问题
![数学建模作业_动态规划求解指派问题](https://img.taocdn.com/s3/m/2992c8da76eeaeaad1f3307d.png)
3 问题的伪代码实现
1 设 k 的初始值为 1; 2 写出 X k ,即第 k 阶段决策变量可能的取值,特别地, X 1 ={1,2, 。 。 。 ,n}。 3 对每一个 sk ,计算 sk g1 (sk 1 , xk 1 ) sk 1 {xk 1. j} ,及 d ( sk , xk ) ; 4 计算 f k ( sk ) ; 5 若 X k 为空,转到第 6 步,否则,k++,转回执行第 2 步。 6 最优指派决策为 f k ( sk ) ,根据 f k ( sk ) 写出最优指派方案{ xkj }。 7 程序算法复杂度:是 O(V*E*E)
其中“ - ”表示集合的差运算。 (4)指派问题指标递归方程:
f k (sk ) min{ f k (sk , xk ) | xk X k } , f k (sk , xk ) d k (sk , d k ) f k 1 ( g1 (sk 1 , xk 1 )) , f 0 (s0 ) 0, k 1,2,..., n.
float costforout[101][101]; int matrixsize; int personnumber; int jobnumber; }matrix; matrix sb; int result[501][2]; void twozero(matrix &sb); void judge(matrix &sb,int result[501][2]); void refresh(matrix &sb); void circlezero(matrix &sb); matrix input(); void output(int result[501][2],matrix sb); void zeroout(matrix &sb); matrix input() { matrix sb; int m; int pnumber,jnumber; int i,j; float k; char w; printf("指派问题的动态规划解法:\n\n"); printf("按最大价值分配请输入 1;最小价值分配请输入 0:\n"); scanf("%d",&m); while (m!=1&&m!=0) { printf("请输入 1 或 0:\n"); scanf("%d",&m); } printf("请输入可分配总人数(介于 1 和 100 之间):\n"); scanf("%d",&pnumber); while(pnumber<1 || pnumber>100) { printf("请输入合法数据:\n"); scanf("%d",&pnumber); } printf("请输入工作数(介于 1 和 100 之间):\n"); scanf("%d",&jnumber); while(jnumber<1 || jnumber>100) { printf("请输入合法数据:\n");
5.5指派问题
![5.5指派问题](https://img.taocdn.com/s3/m/8f5b98a9c67da26925c52cc58bd63186bceb92e2.png)
15 12 A1
15
12
A1'
14 10 A2
14
10
A2'
8 7 A3
8 7 A3'
上面的系数矩阵有6行5列,为了使“人”和“事”的数目相同, 引入一件虚拟的事B6,使之成为标准指派问题的系数矩阵:
B1 B2 B3 B4 B5 B6
4 8 4 8 7 9 7 9 6 9 6 9
7 15 12 0 A1
确定独立0元素的方法:当n较小时,可用观察法、或试探法; 当n较大时,可按下列顺序进行 • 从只有一个0元素的行(列)开始,给这个0元素加圈,记作, 然后划去所在的列(行)的其它0元素,记作。 •给只有一个0元素的列(行)的0加圈,记作,然后划去所 在行的0元素,记作。 •反复进行,直到系数矩阵中的所有0元素都被圈去或划去为止。
•如遇到行或列中0元素都不只一个(存在0元素的闭回路), 可任选其中一个0元素加圈,同时划去同行和同列中的其它0 元素。被划圈的0元素即是独立的0元素。
3.作最少数目的直线,覆盖所有0元素(目的是确定系数矩 阵的下一个变换),可按下述方法进行 1) 对没有的行打“✓”号; 2)在已打“✓”号的行中,对 所在列打“✓” 3)在已打“✓”号的列中,对所在的行打“✓”号; 4)重复2)3),直到再也找不到可以打“✓”号的行或列为止; 5)对没有打“✓”的行划一横线,对打“✓”的列划一纵线,这样 就得到覆盖所有0元素的最少直线数。
若某个人可做几件事,则可将该人看做相同的几个人来接受指 派。这几个人作同一件事的费用系数当然都一样。 • 某事一定不能由某人作的指派问题
若某事一定不能由某个人做,则可将相应的费用系数取做足够 大的数M。
例3:对于例2的指派问题,为了保证工程质量,经研究 决定,舍弃公司A4和A5,而让技术力量较强的建设公司A1, A2,A3参加招标承建,根据实际情况,可允许每家建设公司 承建一项或二项工程。求使总费用最少的指派方案。
4.5 指派问题
![4.5 指派问题](https://img.taocdn.com/s3/m/5f5540a102020740bf1e9b12.png)
23
OR:SM
五、非标准指派问题
工作
例:现有4份工作,6个人应聘,由
1 2 3 4 56
人
于个人的技术专长不同,他们承担
1 12 7 9 7 0 0
各项工作所需时间如下表所示,且
2 7 17 12 14 0 0
规定每人只能做一项工作,每一项
3 15 14 6 6 0 0
工作只能由一个人承担,试求使总
75 50 150 230 50 25 0 100 180
65 70 170 250 65 0 5 105 185
82 55 200 280 55 27 0 145 225
然后找出矩阵每列的最小元素,再分别从每列中减去,有:
0 11 122 202 0 11 22 22
25
0
100
180
25
运筹学--管理科学方法
李军
桂林电子科技大学商学院
第四章 整数规划
内S容ub提ti要tle
问题背景与数学描述
一般
的ILP
分枝定界法 原理
求解 割平面法
步骤
整数
规划 特殊的ILP
0-1规划 指派问题
进一步讨论
建模 求解 特点分析
整数规划应用
今天要研究 的内容?
2
2013-5-29
2
引例1:趣味问题
( 0) 6 17 17
30 ×0 ( 0) ×0
×0 ×0 ×0 (0)
32
( 0)
45
45
(0 ) 6 17 17
或 30 ×0 ×0 (0)
×0 ×0 (0) ×0
32
( 0)
45
45
指派问题
![指派问题](https://img.taocdn.com/s3/m/3f829115a2161479171128c6.png)
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
任 人员 甲 乙 丙 丁 务
指派问题
![指派问题](https://img.taocdn.com/s3/m/adc96e97e53a580216fcfeee.png)
与模型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
• • • • 指派问题的数学模型 指派问题解的特点 指派问题的求解方法——匈牙利法 非标准形式的指派问题
一、指派问题的数学模型
例、有四项任务需分派给甲、乙、丙、丁四个人去 做,这四个人都能承担上述四项任务,但完成各项任 务所需时间如下表所示。问应如何分派任务可使完成 任务的总工时最少?
第二题 指派问题
![第二题 指派问题](https://img.taocdn.com/s3/m/cdf7c4237c1cfad6195fa7f0.png)
7 3 6 9 6 3
4 6 7 5 11 4
2 0 4 3 6
2
5
0
4
2
4 1 0 2 5
4 0 3 6 3
0 2 3 1 7
-1 -2
分配问题与匈牙利法
2)试指派(找独立0元素)
2 0 4 2 4
2
5
0
3
0
4 1 0 1 3
4
0
3
5
1
0 2 3 0 5
2 ◎0 4 2 4
分配问题与匈牙利法
例4.7 已知四人分别完成四项工作所需时间如下表,求最优 分配方案。
任务
人员
A
B
C
D
甲
2
15
13
4
乙
10
4
14
15
丙
9
14
16
13
丁
7
8
11
9
分配问题与匈牙利法
解:1)变换系数矩阵,增加0元素。
2 15 13 4 2
10
4
14
15
4
9 14 16 13 9
7 8 11 9 7
4
Ø0
3
5
1
√
◎0 2 3 0Ø 5
√
分配问题与匈牙利法
1 ◎0 3 1 3 √
2
6
Ø0
3
◎0 √
l =m=4 < n=5
选择直线外最小元素为1, 直线外元素减1,直线交
4 2 ◎0 1 3 √ 点元素加1,其他保持不
3
Ø0 2
4
变,得到新的系数矩阵。
0 Ø √
◎0 3 3 Ø0 5
指派问题——匈牙利法
![指派问题——匈牙利法](https://img.taocdn.com/s3/m/56137c364a7302768f99391a.png)
指派问题的匈牙利解法
为 m,令矩阵 B (bij )nn , bij m cij ,则 以 B为效率矩阵的最小化指派问题和以C为 效率矩阵的原最大化指派问题有相同的最优
解;
非标准形式的指派问题
(2) 资源数量(人数等)与事件数不等的指派
•若资源少,事件多,则增加一些虚拟的 资源点,这些虚拟的资源做事件的效率 系数为0,可理解为这些费用(成本)实际 上不会发生;
若◎元素的数目m=n,则该指派问题的最优 解已经得到,否则转入Step 3;
13
指派问题的匈牙利解法——步骤(续)
Step 3. 设有 m<n 个◎, 找最少覆盖所有0的直线 1) 对没有◎的行打√ 2) 对已打√行中含所在列打√ 3) 对已打√列中含◎所在行打√ 4) 重复2)~3), 直至没有要打√的行和列为止 5) 对没有打√的行划横线, 对打√的列划竖线 得到最少覆盖所有0的直线数l。
nn
n
n
cijxij ckjx kj (s) x kj
i1 j1
j1
j1
ik
nn
n
cijxij ckjx kj (s)
i1 j1
j1
ik
z (s)
指派问题的匈牙利解法
• 根据此定理,可以对 做如下改变,目的是 找出C 中的 n个不同行不同列的0元素:
0
指派问题
![指派问题](https://img.taocdn.com/s3/m/e63d81a30029bd64783e2cf4.png)
指派问题 数学试验
§4 指派问题
指派问题是整数规划的一类重要问题。也是在实际生活中经常 遇到的一种问题:由n项不同的工作或任务,需要n个人去完成 (每人只能完成一项工作)。由于每人的知识、能力、经验等 不同,故各人完成不同任务所需的时间(或其它资源)不同。 问应只排哪个人完成何项工作所消耗的总资源最少? 一。 指派问题的数学模型 引进0-1变量
-4 -7 -6 -6 -6
0 0 → 0 0 0
4 3 11 8 2 10 7 3 3 6 2 1 1 8 0 4 3 6 4 0
-1 -3
✓
0 0 → C1 = 0 0 0
3 0 11 8 1 7 7 3 ✓ 2 3 2 1 ✓ 0 5 0 4 2 3 4 0
在只有一个0元素的行(或列)加圈,表示此人只能做该事 (或此事只能由该人来做),每圈一个“0”,同时把位于同 列(或同行)的其他零元素划去。表示此时已不能再由他 人来做(或此人已不能做其它事)。如此反复,直到矩阵 中所有零元素都被圈去或划去为至。 在遇到所有行和列中,零元素都不止一个时,可任选其中 一个加圈,然后划去同行、同列其他未被标记的零元素。 例
-7 -6 -6 -7
1 0 X * = 0 0 0
0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0
从而导出匈牙利解法的思想:
二。匈牙利解法 匈牙利法是1955年由库恩(W.W.Kuhn)根据匈牙利 数学家狄·考尼格(d.konig)关于矩阵中独立零元素的定理 发明的。 匈牙利法的基本原理: 定理1 将效率矩阵的某一行(或某一列)的各个元素都减去 同一个常数t (t可正可负),得到新的矩阵,则以新矩阵为 效率矩阵的指派问题与原指派问题的最优解相同。但其最 优值比原最优值减少t 。 解:设效率矩阵C为
指派问题
![指派问题](https://img.taocdn.com/s3/m/95fcf3638e9951e79b8927a0.png)
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元素,记作Ø , 表示此人已有任务,不再为其指派其他任务了。依次进行到 最后一列。
指派问题(含非实用标准指派问题)
![指派问题(含非实用标准指派问题)](https://img.taocdn.com/s3/m/2f52eb2dfc4ffe473368ab6e.png)
第五章 整数规划§1 整数规划的数学模型及特点要求一部分或全部决策变量必须取整数值得规划问题称为整数规划。
其模型为:Max(或min)z=∑=nj j jx c1s.t ⎪⎪⎩⎪⎪⎨⎧=≥=≥=≤∑=nj nj i ij ij xx x nj 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 n i ij ,2,1,1,0,2,11,2,1111 (5.3)其中,(5.1)表示每件事必优且只有一个人去做,(5.2)表示每个人必做且只做一件事。
中部分或全部取整数 若指派第i 人作第j 件事若不指派第i 人作第j 事i ,j=1,2,…n(5.2) (5.4)注:○1 指派问题是产量(i a )、销量(j b )相等,且i a =j b =1,i ,j=1,2,…n 的运输问题。
○2 有时也称ijc 为第i 个人完成第j 件工作所需的资源数,称之为效率系数(或价值系数)。
第5章指派问题
![第5章指派问题](https://img.taocdn.com/s3/m/307450d76137ee06eff91889.png)
2) 进行试指派,以寻求最优解。
在(bij)中找尽可能多的独立0元素,若能找出n个独立0元 素,就以这n个独立0元素对应解矩阵(xij)中的元素为1,其余 为0,这就得到最优解。
指派问题
找独立0元素,常用的步骤为: 从只有一个0元素的行开始,给该行中的0元素加圈,记作◎ 。 然后划去◎ 所在列的其它0元素,记作Ø ;这表示该列所代表的 任务已指派完,不必再考虑别人了。依次进行到最后一行。 从只有一个0元素的列开始(画Ø的不计在内),给该列中的0 元素加圈,记作◎;然后划去◎ 所在行的0元素,记作Ø ,表示 此人已有任务,不再为其指派其他任务了。依次进行到最后一列。 若仍有没有划圈的0元素,且同行(列)的0元素至少有两个,比 较这行各0元素所在列中0元素的数目,选择0元素少这个0元素加 圈(表示选择性多的要“礼让”选择性少的)。然后划掉同行同列 的其它0元素。可反复进行,直到所有0元素都已圈出和划掉为止。
独立零元素的个数m等于最少 直线数l,即l=m=3<n=4;
4)没有被直线通过的元素中选择最小值为1,变换系数矩 阵,将没有被直线通过的所有元素减去这个最小元素;直 线交点处的元素加上这个最小值。得到新的矩阵,重复2) 步进行试指派
匈牙利法
3 4 3 0 0 1 0 5 2 0 4 4 0 2 6 0
0 1 0 0 0 0 1 0 0 0 1 0 0 0 1 0
3 ◎ 2 2
4 3 1 Ø ◎ 4 6 ◎
◎
5 4 Ø
得到4个独立零元素, 所以最优解矩阵为: 即完成4个任务的总时间最少 为:2+4+1+8=15
匈牙利法
例5.14 已知四人分别完成四项工作所需时间如下表,求最优 分配方案。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章 整数规划§1 整数规划的数学模型及特点要求一部分或全部决策变量必须取整数值得规划问题称为整数规划。
其模型为:Max(或min)z=∑=nj j jx c1s.t ⎪⎪⎩⎪⎪⎨⎧=≥=≥=≤∑=nj nj i ij ij xx x nj 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 n i 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 件工作所需的资源数,称之为效率系数(或价值系数)。
并称矩阵C= n n ij c ⨯)(=⎪⎪⎪⎪⎪⎭⎫⎝⎛nn n n n n c c c c c cc c c 212222111211(5.5) 为效率矩阵(或价值系数矩阵)。
并称决策变量ij x 排成的n ×n 矩阵X=n n ij x ⨯)(= ⎪⎪⎪⎪⎪⎭⎫⎝⎛nn n n n n x x x x x xx x x 212222111211 (5.6) 为决策变量矩阵。
(5.6)的特征是它有n 个1,其它都是0。
这n 个1位于不同行、不同列。
每一种情况为指派问题的一个可行解。
共n!个解。
其总的费用 z =C ⊙X这里的⊙表示两矩阵对应元素的积,然后相加。
问题是:把这n 个1放到X 的2n 个位置的什么地方可使耗费的总资源最少?(解最优) 例1 已知效率矩阵C= ⎪⎪⎪⎪⎪⎭⎫⎝⎛0084765000320205则X (1)= ⎪⎪⎪⎪⎪⎭⎫⎝⎛010*********0010, X (2)= ⎪⎪⎪⎪⎪⎭⎫⎝⎛1000000101000010都是指派问题的最优解例12/P-149:某商业公司计划开办五家新商店。
为了尽早建成营业,商业公司决定由5家建筑公司分别承建。
已知建筑公司A i (i=1,2,…5)对新商店B j (1,2,…5)的建造费用的报价(万元)为ij c (i ,j=1,2,…5),见表5-9。
商业公司应当对5家建筑公司怎样分派建筑任务,才能使总的建筑费用最少?表5-90-1变量ij x =⎩⎨⎧01则问题的数学模型为Min z=411x +812x +…+1054x +655xs.t ⎪⎪⎪⎩⎪⎪⎪⎨⎧======∑∑==5,2,1,1,05,2,115,2,115151 j i x i x j x ij j ij i ij若看成运输问题,且ij x 如上所述,则表5-9为当A i 承建B j 时 当A i 不承建B j 时i,j=1,2, (5)当然,第一行的1应放在(1,1)位置,此位置同时是第一列的费用最小。
但一般情况下没有这么好。
需找一适合一般的方法。
二. 匈牙利解法原理:虽然指派问题是一类特殊的整数规划问题,又是特殊的0-1规划问题和特殊的运输问题,因此,它可以用多种相应的解法来求解。
但是,这些解法都没有充分利用指派问题的特殊性质,有效地减少计算量。
1955年,库恩(W.W.Kuhn )提出了匈牙利法。
定理1:设指派问题的效率矩阵为C= n n ij c ⨯)(,若将该矩阵的某一行(或某一列)的各个元素都减去统一常数t (t 可正可负),得到新的效率矩阵n n ijc C ⨯'=')(,则以C '为效率矩阵的新的指派问题与原指派问题的最优解相同。
但其最优解比原最优解之减少t.证明:设式(5.1)~(5.4)为原指派问题。
现在C 矩阵的第k 行个元素东减去同一常数t,记新的指派问题的目标函数为Z '.则有Z '=∑=ni 1∑='n j ijijx c 1=∑≠=n k i i 1∑='n j ij ij x c 1+∑='n j ij ij x c 1=∑≠=n k i i 1∑=nj ij ijx c1+∑=-nj kj kj x t c 1)(=∑≠=n ki i 1∑=nj ij ijx c1+∑=nj kj kj x c 1-t ∑=n j kj x 1=∑=ni 1∑=nj ij ijx c1-t ·1=Z-t因此有Min Z '=min(Z-t)=minZ-t而新问题的约束方程同原指派问题。
因此其最优解比相同,而最优解差一个常数。
推论:若将指派问题的效率矩阵每一行即每一列分别减去各行及各列的最小元素,则得到新指派问题与原指派问题有相同的最优解。
证明:结论是显然的。
只要反复运用定理1便可得证。
当将效率矩阵的每一行都减去各行的最小元素,将所得的矩阵的每一列在减去当前列中最小元素,则最后得到新效率矩阵C '中必然出现一些零元素。
设ijc '=0,从第i 行来看,它表示第i 个人去干第j 项工作效率(相对)最好。
而从第j 列来看,这个0表示第j 项工作以第i 人来干效率(相对)最高。
定义:在效率矩阵C 中,有一组在不同行不同列的零元素,称为独立零元素组,此时每个元素称为独立零元素。
例2: 已知C= ⎪⎪⎪⎪⎪⎭⎫⎝⎛0084765000320205则{12c =0,24c =0,31c =0,43c =0}是一个独立零元素组,12c =0,24c =0,31c =0,43c =0分别称为独立零元素。
{12c =0,23c =0,31c =0,44c =0}也是一个独立零元素组,而{14c =0,23c =0,31c =0,44c =0}就不是一个独立零元素组,因为14c =0与44c =0这两个零元素位于同一列中。
根据以上对效率矩阵中零元素的分析,对效率矩阵C 中出现的的独立零元素组中零元素所处的位置,在决策变量矩阵中令相应的ij x =1,其余的ij x =0。
就可找到指派问题的一个最优解。
就上例中X (1)= ⎪⎪⎪⎪⎪⎭⎫⎝⎛010*********0010,就是一个最优解。
同理X (2)= ⎪⎪⎪⎪⎪⎭⎫⎝⎛1000000101000010 也是一个最优解。
但是在有的问题中发现效率矩阵C 中独立零元素的个数不够n 个,这样就无法求出最优指派方案,需作进一步的分析。
首先给出下述定理。
定理2 效率矩阵C 中独立零元素的最多个数等于能覆盖所有零元素的最少直线数。
我们不证它,说一下意思: 例3:已知矩阵C 1= ⎪⎪⎪⎪⎪⎭⎫⎝⎛0084765000320205,C 2= ⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛5636040084275500003220205,C 3=⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛341404008653300003420207分别用最少直线去覆盖各自矩阵中的零元素:C 1= ⎪⎪⎪⎪⎪⎭⎫⎝⎛0084765000320205, C 2= ⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛5636040084275500003220205, C 3=⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛341404008653300003420207可见,C 1最少需要4条线,C 2最少需要4条线,C 3最少需要5条线,方能划掉矩阵中所有的零。
即它们独立零元素组中零元素最多分别为4,4,5。
三. 匈牙利法求解步骤:我们以例题来说明指派问题如何求解: 例4 给定效率矩阵C= ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛9118713161491514410413152求解该指派问题。
解:ⅰ)变换效率矩阵,将各行各列都减去当前各行、各列中最小元素。
C= ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛9118713161491514410413152⎪⎪⎪⎪⎪⎭⎫ ⎝⎛24104750111006211130 ⎪⎪⎪⎪⎪⎭⎫⎝⎛00102350960607130= C '这样得到的新矩阵C '中,每行每列都必然出现零元素。
ⅱ)用圈0法求出新矩阵C '中独立零元素。
(1)进行行检验对C '进行逐行检验,对每行只有一个未标记的零元素时,用○记号将该零元素圈起。
然后将被圈起的零元素所在的列的其它未标记的零元素用记号×划去。
如C '中第2行、第3行都只有一个未标记的零元素,用○分别将它们圈起。
然后用×划去第1列其它未被标记的零元素(第2列没有),见C ''C ' ⎪⎪⎪⎪⎪⎭⎫⎝⎛00102350960607130=C ''在第i 行只有一个零元素ij c =0时,表示第i 人干第j 件工作效率最好。
因此优先指派第i 人干第j 项工作,而划去第j 列其它未标记的零元素,表示第j 项工作不再指派其它人去干(即使其它人干该项工作也相对有最好的效率)。
重复行检验,直到每一行都没有未被标记的零元素或至少有两个未被标记的零元素时为止。
本题C ''中第1行此时也只有1个未被标记的零元素。
因此圈起C ''中第1行第4列的零元素14c ,然后用×划去第4列中未被标记的零元素。
这是第4行也只有一个未被标记的零元素43c ,再用○圈起,见C '''行变换 24 9 7 min列变换 Min 0 0 4 2C '' ⎪⎪⎪⎪⎪⎭⎫⎝⎛00102350960607130=C ''' (2)进行列检验与进行行检验相似,对进行了行检验的矩阵逐列进行检验,对每列只有一个未被标记的零元素,用记号○将该元素圈起,然后技改元素所在行的其他未被标记的零元素打×。