第六章指派问题组合优化理论CombinatorialOptimizationTheory指派问题(AssignmentProblem,AP)是一种特殊的线性规划问题,也属于0-1整数规划问题.在图论中称为最佳匹配问题(OptimalMatching).问题描述:有n项任务需要去完成,恰好有n个人可以去完成这n项任务,而每个人完成各项任务的效率是不同的,如果要求每人完成其中一项,且每项任务只交给其中一人去完成,应如何分配,使总的效率最高.第六章指派问题§1最大基数匹配问题§2指派问题§3指派问题的应用§4瓶颈分配问题第六章指派问题§1最大基数匹配问题人员工作分配问题:某公司有工作人员x1,x2,…,xn,他们去做n项工作y1,y2,…,yn,每人会做其中的一项或几项,要求每人至多做一项,每项工作至多由一人来做,问能否每人都分配到一项会做的工作?x3x1x2y2y1y3如果不那么最多几人有会做的工作可做?且如何安排?可用图和矩阵给出它的数学模型及求解方法.§1最大基数匹配问题Definition4.1设图G=(V,E)GraphVertexEdge1、如果,且对,与无公共顶点,则称边子集M是G的一个匹配;ME,ijeeMieje2、M中的每条边的两个顶点称为关于M是饱和的,否则称为非饱和的;3、G中每个顶点都关于M是饱和的,则称M是G的一个完备匹配;4、如果M是一匹配,而不存在其他匹配M1,使得5、如果M是一匹配,而对不是G的匹配,则称M是G的一个极大匹配.,jjeGMeNote:最大匹配与极大匹配的边数是不同的x3x1x2y2y1y31MM,则称M是G的最大(基数)匹配;第六章指派问题6、如果G的顶点V可分成两个满足如下条件的子集X,Y:,;XYVXY②对,则与ej关联的两个顶点分属XY,jeE称G=(X,Y,E)为二部图或偶图.x3x1x2y2y1y3x4x5y4y5①人员工作分配问题就是在二部图中寻找最大匹配.§1最大基数匹配问题x3x1x2y2y1y3x4x5y4y5该问题也可用矩阵表示10ija如果xi会做yj否则12345()ijxxaxxx12345yyyyy1111111111000000000000000在矩阵中寻找什么?寻找最多的不同行不同列的1元素.(二部图G的邻接矩阵)称为独立元(素)第六章指派问题123451100001100()010010010000111ijxxaxxx12345yyyyy如何寻找?礼让原则从每行、每列中,1最少的行或列先取,一样多时随意.×××××遗憾的是这是错的100100010001001010100001010001001110××××××××1010101001010100101010111ק1最大基数匹配问题1965年匈牙利著名数学家Edmonds为之设计了命名为“匈牙利算法”的有效算法,计算复杂性为O(n).E就二部图的邻接矩阵,先给出几个概念:在第i行第j列上的①(1被加圈)表示xi(或yj)已被分配,或该行(或列)已被分配;此时,由于所在行和列的1元素不能再取,用1表示;×不同行不同列的①,称为A的一个分配,用M表示;第六章指派问题123451100001100010010010000111xxxxx12345yyyyy×××设M为已知分配,xi未被分配,而该行没有1,则xi不能被分配;若有1,选择一个1(aij),如果第j列没有加圈1,则对该1加圈,得到一新的分配M′,有,'1MM如果有加圈1(ai1j),则对aij,ai1j打√,√√√且划去第j列,再看第i1行有否没有被划去的1,没有,结束;有,再重复上述过程,直至不能继续为止.这时所得序列,称为关于M的交互链.如果在交互链中,最后得到的是无圈1,则称该交互链为可增广链.把可增广链中的加圈1与没圈的1,互换标记,得到一新的分配M′,有.'1MM上述过程称之为增广过程.交互链、可增广链可在图G中描述§1最大基数匹配问题Theorem4.1(Berge,1957)M是A的最大分配的充要条件是不存在可增广链.匈牙利算法:Step1任给一初始分配M,设S为未被M分配的行集合;Step2如果,则此时已得到最大分配,SEnd否则,取;ixSStep3寻找xi出发的可增广链,如果存在,则进行增广;且令iSSxGotoStep2;否则xi不能被分配,令iSSxGotoStep2;对图G的最大匹配,结论也成立proof100100010001001010100001010001001110Theorem4.1的证明Proof:必要性:若M是A的最大分配,显然A中无关于M的可增广链,不然M还可以增广成独立元更多的分配,与M是最大分配相违;充分性:反证,若M不是最大分配,则存在分配M1,1.MM作211MMMMM由于M2是由M,M1中非公共部分组成,而M,M1都是分配,所以从M2的任一1出发,按交互链得到方法,得到的链必是M,M1中的1交替出现.√√√√√√√由于,所以在所有的交互链中,必有一条链属于M1的1多于属于M的1,且以M1的1出发、结束,这是关于M的可增广链.与条件矛盾.1MM证毕√√√√第六章指派问题123451100001100010010010000111xxxxx12345yyyyyExample1求G的最大匹配,G的邻接矩阵如右所示:√Solution:不妨设初始匹配1122345,,,,MxyxySxxx取x3,从x3y2出发,√√√得一增广链:322223,,xyxyxy增广得:11233245,,,,MxyxyxySxx√√√√√取x4,得一增广链:4323223235,,,,xyxyxyxyxy增广得:112235435,,,,MxyxyxyxySx取x5,从x5y3出发,√得一交互链,但不是增广链.从x5y4出发,因y4未被分配,所以对x5y4加圈,得:1122354354,,,,,.MxyxyxyxyxyS所以,M是最大匹配,且是完备匹配.§2指派问题在第一节的人员工作安排问题中,分配工作时,只考虑人员有工作做.但事实上,由于工作的性质和个人的特长不同,在完成不同的任务时,其效益是不同的(成本、时间、利润、费用etc.).§2指派问题设有n个人员去完成n项任务,第i人完成第j项任务的效益为,要求每人完成且仅完成一项,问如何分配,使完成n项任务的总效益最佳.0ijc可以是max、min先考察min称C=(cij)n×n为效益矩阵.第六章指派问题Example2任务人员EJGRA215134B1041415C9141613D78119有一份中文说明书需要译成英、日、德、俄四种语言,分别记为E、J、G、R.现有A、B、C、D四人,他们将中文翻译成不同语言所需时间如表,问应分配何人去完成何任务(一人完成一项任务),使所需总时间最少?Solution:10ijx当分配第i人完成第j项任务否则,1,2,,ijn设2151341041415914161378119C11minnnijijijzcx111,2,...,nijixjn111,2,...,nijjxin01,1,2,...,ijxorijns.t.§2指派问题显然,这是一个0-1规划问题,任务人员EJGRA215134B1041415C9141613D78119任务人员EJGRaiA2151341B10414151C91416131D781191bj1111也是一个特殊的运输问题.所以,分配问题可用解IP问题方法(如:分支定界法),或解运输问题的表上作业法.但是,1、IP是NP-C问题;2、有基变量2n-1个,而有n-1个为零,高度退化.1955年,Kuhn-Munkras提出了解AP的算法,将求AP转化为求完备匹配问题,其计算复杂性为O(n3).由于算法引用了匈牙利数学家König的结论,所以,该算法也称为匈牙利算法.第六章指派问题Theorem4.2(König,1931)Definition4.2图G=(V,E),一个顶点在C中,称C为G的一个点(对边的)覆盖.,CV点集若G中每条边至少有点数最少的点覆盖C称为G的最小点覆盖.二部图G=(X,Y,E),M为最大匹配,C为最小点覆盖,则有.MC监测点的设置等是最小点覆盖的应用.点覆盖在二部图G的邻接矩阵上如何表示?Proof1011010100010101x3x1x2y2y1y3x4y4Theorem4.2的证明Proof:显然,若,MX.XMC则若,MX设X1为在M中没有独立元的行的集合.1001100111100001如右12Xx令Z是X1中行出发的关于M的交互链上的所有点,如右21144,,,,Zxyxyx记,SZXTZY则()NST表示S中的行的所有1对应的列取()BXST则B是A的一个覆盖,如果不是,则有1元素行在S列在Y-T中,这与矛盾.()NST而,MB.MC显然所以B是最小覆盖.证毕§2指派问题显然,Ex.2的可行解可用一个0-1矩阵表示.10000001()01000010ijx表示:,,,.AEBRCJDG因此,求解指派问题可在效益矩阵上进行.Theorem4.3如果从效益矩阵(cij)的第i行中每个元素减去a和第j列中每个元素加上b,得到一个新的效益矩阵.ijc则以为新的目标函数与原目标函数的指派问题最优解相同.ijcijijzcx11nnijijijijjicxaxbxijijcxabzab第六章指派问题匈牙利算法:Step12151341041415914161378119C使效益矩阵各行各列出现零元素;具体:从效益矩阵的每行各元素减去该行最小元素;再从所得矩阵的每列各元素减去该列最小元素.249701311260101105740142013706069053201000042称各行各列所减的数值之总和为缩减量,记为S.S=2+4+9+7+4+2=28§2指派问题Step2试寻求最优解;用上节的求最大匹配的算法.013706069053201002151341041415914161378119C这时得到最大匹配M.如果,则已得到最优解;Mn00010100()10000010ijx即,,,.ARBJCEDG'min0zminz14223143cccc28=S每行每列有零元素,能保证有n个独立零元素吗?0000012108730159如果,则gotostep3;Mn第六章指派问题Step3作缩减后的效益矩阵的最小覆盖;具体:a、对没有0的行打√;b、对已打√的行中所有含0元素的列打√;c、对打√的列上有0的行打√;d、重复b、c,直到得不出新的打√的行列为止;e、对打√的列画纵线,没打√行画横线.这就得到最小覆盖.2109715414813141611415139C2411408751101042350011950825110542300011450050§2指派问题Example3求效益矩阵为C的最小指派.Solution:√√√缩减量S