- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章 分配问题与实验
这类问题称为分配问题,又称为指派问题(Assignment Problem)。
分配问题是运输问题的特殊情况,并且其特殊的结构允许作为线性规划中更有效的原始—对偶单纯形法的应用,全部的程序能在一个简单排列上产生,并且其标号过程是简单的,此结果是匈牙利(Hungarian)算法。
§4.1 分配问题的数学模型
标准分配问题模型 设有n个人被分配去做n件事,规定每个人只做一件工作,每件工作只由一个人去做。已知第i个人去做第j件工作的效率(时间或费用)为( ),并假设。问应如何分配才能使总效率(总时间或总费用最少等)最高?
设决策变量
(其中)。那么第i个人做第j件工作的效率为。从而i=1,…,n; j=1,…,n;的综合即为总效率。每件工作都有人去做,使用数学表达式为
同样,每个人都有工作做,为于是分配问题的数学模型为:
;
s.t.
类似对运输问题特点的分析可知,分配问题约束条件系数矩阵A的秩为2n-1,故它的基可行解中共有2n-1个基变量。但实际上只需要找出n个1即可(即分配n个人去做n件不同的工作),而其余n-1个基变量取值为0,因此这是一个高度退化的线性规划问题。
考察分配问题的数学模型,将目标函数的系数排成下列矩阵:
称之为分配问题的效益矩阵。它有下列基本性质。
定理4.1 从效益矩阵的第k行(或第k列)的每一个元素中减去一个常数a,得到新效益矩阵所表示的分配问题与原问题具有相同的最优解。
其证明比较简单,读者可自行证明。
记效益矩阵的某行(列)的每一个元素中减去一个常数得到新的效益矩阵称为缩减效益矩阵。
根据定理4.1,可以将求解效益矩阵为的分配问题化成求解效益矩阵为的分配问题。这里是由的各行、各列中分别减去该行、该列的最小元素而得到的。不难看出中的每行、每列中至少有一个零元素。
如果这些零元素分布在效益矩阵的不同行和不同的列上,则称这些零元素为独立的零元素。如果这些独立的零元素的个数恰好等于效益矩阵的阶数,则将独立零元素所在位置对应的取1,将其余变量取为0。这时,已找到了这个分配问题的最优解。
如果没有得到独立的零元素,或者独立零元素的个数小于效益矩阵的阶数,则必须寻找某种方法继续调整缩减效益矩阵,直至找到独立零元素的个数等于效益矩阵的阶数为止。称这些独立零元素对应的效益矩阵为全分配矩阵。
由此,分配问题求解的关键是如何调整效益矩阵,使之成为全分配矩阵。下面介绍的关于矩阵中零元素的定理就是构造这类算法的基础。
定理4.2 若一方阵中的一部分元素为0,一部分元素为非0,则覆盖方阵内所有0元的最少直线数恰好等于那些位于不同行、不同列的0元的最多个数。(证明省略) 。
匈牙利算法基于一种必须兼备下述三个条件的称为分配模型的标准形模型:
目标要求为min;
效益矩阵为n阶方阵;
阵中所有元素,且为常数。
§4.2 分配问题和匈牙利算法
根据以上两个定理,可将匈牙利算法的解题步骤归纳如下:
第一步:将原分配问题的效益矩阵进行变换得矩阵,使各行各列中都出现零元素。其方法是:
从效益矩阵得每行元素中减去该行得最小元素;
再从所得效益矩阵得每列元素中减去该列得最小元素。
第二步:进行试分配,求此按以下步骤进行。
从零元素最少的行(或列)开始,给这个零元素加“横杠”,记作。然后划去该零元素所在列(或行)得其它零元素,记作。
给只有一个零元素的列(或行)中的零元素加“横杠”,然后划去该零元素所在行(或列)的零元素,记作。
反复进行(1),(2)两步,直到所有零元素都被“横杠”划出或划去为止。
若仍有没有被“横杠”划出或划去的零元素,且同行(或列)的零元素至少有两个。这时可用不同的方案去试探。从剩有零元素最少的行(或列)开始,比较这行零元素所在列中零元素的数目,选择零元素较少的那列的这个零元素加“横杠”,然后划去同行同列的其它零元素。如此反复进行,直到所有的零元素都已划出或划去。
若元素的数目m等于矩阵的阶数n,那么这个分配问题的最优解已经得到,令划“横杠”处的变量,其余变量,即为所求的最优解。否则,若,则转入下一步。
第三步:寻找覆盖所有零元素的最少直线,以确定该矩阵中能找到的最多的独立零元素的个数。为此按以下步骤进行。
对没有的行打*号;
对已打*号的行中所有含元素的列打*号;
再对打有*号的列中含有元素的行打*号;
重复(2),(3),直到得不出新的打*号的行、列为止。
对没有打*号的行划横线,有打*号的列划纵线,这就得
到覆盖所有零元素的最少直线数。令这直线数为l。若
,说明必须再变换当前的矩阵,才能找到n个独立
零元素,则转第四步;若,而,则返回第三步
(4),另行试探。
第四步:调整,使之增加一些零元素。为此按如下步骤进行。
在没有
文档评论(0)