运筹学指派问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
行指派, 即对应于这n个0元素的位置的xij=1,其 余位置的xij=0. 结束.
(3)当独立的0个数k<n时, 可用k条直线覆盖 全部0. 然后从未被覆盖的各元素中,选出最 小的元素a,把未被覆盖的各元素减去这个最 小元素,而两直线交叉处的元素加上这个最 小元素. (这种操作相当于:未被覆盖的行 都减a ,被覆盖的列都加a .)
• 这样,4条线就覆盖了全部0
(4)重复第(3)步, 直做到能在矩阵中找到n个 独立的0为止,这样就可以进行指派.
最大化指派问题
不平衡时的处理办法—虚拟法
• 以上方法只适用于 : 人数=任务数
当 人数≠任务数 时 • n----人数, m----任务数 • 若n>m,则虚拟n-m个任务,相应Cij=0 • 若n<m,则虚拟m-n个人,相应CijLeabharlann Baidu0 • 这样就化为人数与任务数相等的情况
这样只找到 3个独立0
画覆盖线的方法
• 刚才每个独立0,都画了两条线,把覆盖0 数目少的一条拿走,保留另一条.
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0
0
这样就找到 4个独立0
如果按自上而下从左到右顺序找
0 0 0 0 0 0 C 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
数学模型 : m in z cij xij j 1 i 1
n xij 1, j 1,2 ,...,n i 1 n s .t . xij 1, i 1,2 ,...,n j 1 x 0 ,1 i , j 1,2 ,...,n ij
n
n
总成本最小
每项任务由一人完成 每人只承担一项任务
解矩阵的特征
• 全部元素仅取0或1 • 每行有且仅有一个1 • 每列有且仅有一个1
0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0
例如,n=5时, X xij
0 C 0 0 0
0 0 0 0 0 0
0
0 0
0 0 0 0 0 0
j 1 i 1 j 1 i 1 i 1 j 1 i 1
n
n
n
n
n
n
n
即f与z仅差一个常数, 所以两目标在相同的约束 条件下,最优解是相同的.
求解的思想方法
若利用以上性质,能把成本矩阵变换到存在n
个独立的0元素(在不同行不同列),且保持每个Cij 非负.这时让这n个0元素的位置对应的xij=1,其余 位置的xij=0,就得最优解.因为它是目标值为0的 可行解,且总有 z cij xij 0
j 1 i 1 n n
匈牙利数学家 康尼格(D.Konig)的定理
• 若在成本矩阵C中最多能找到k个独立0, 则必可画k条直线把C的全部0覆盖.
匈牙利法
• 步骤
(1)把成本矩阵的各行每一元素分别减去该行中的最 小元素,再检查每列中是否都有0,若不是,则把没
有0的列的每一元素分别减去该列中的最小元素. (2)如果能在矩阵中找到n个独立的0元素, 就可以进
在C中找出最多独立0的步骤
• 设Wi表示第i行0的数目,Lj表示第i列0的数目.
• 1.统计Wi和Lj(i,j=1,2,…n).
• 2.按W1,W2,…,Wn,L1,L2,…,Ln顺序找出 第一个最小正数,选中该行(列)首个0. • 3.删除该0所在的行与列,对应的Wi=0,Lj=0. • 4.重复步骤1~3,直到全部Wi=0为止.
55
性质
从原成本矩阵C的任一行(列)中各元素加(减)
一个常数,得到新的成本矩阵,则此两成本矩阵的
指派问题的最优解是相同的. 证明:设矩阵C的第i行对应的常数为di, ij cij di c
f cij xij (cij di ) xij z di xij z di
0 0 0 0 0 0
0
0 0
0 0 0 0
0 0 0
0
0
0
指派问题
设有n项任务要分给n个人去完成,每人完成一
项. 由于每个人的专长不同,故完成不同任务所需
的成本也不同. 若第i个人完成第j项任务的成本为
cij ,则如何分配这些工作任务,使总成本为最小?
这类问题称为指派问题,矩阵C=(cij)称为成本矩阵.
设置变量: z………总成本
1 指派第i人做第j项任务 xij , i, j 1, 2, , n 0 不指派第i人做第j项任务
(3)当独立的0个数k<n时, 可用k条直线覆盖 全部0. 然后从未被覆盖的各元素中,选出最 小的元素a,把未被覆盖的各元素减去这个最 小元素,而两直线交叉处的元素加上这个最 小元素. (这种操作相当于:未被覆盖的行 都减a ,被覆盖的列都加a .)
• 这样,4条线就覆盖了全部0
(4)重复第(3)步, 直做到能在矩阵中找到n个 独立的0为止,这样就可以进行指派.
最大化指派问题
不平衡时的处理办法—虚拟法
• 以上方法只适用于 : 人数=任务数
当 人数≠任务数 时 • n----人数, m----任务数 • 若n>m,则虚拟n-m个任务,相应Cij=0 • 若n<m,则虚拟m-n个人,相应CijLeabharlann Baidu0 • 这样就化为人数与任务数相等的情况
这样只找到 3个独立0
画覆盖线的方法
• 刚才每个独立0,都画了两条线,把覆盖0 数目少的一条拿走,保留另一条.
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0
0
这样就找到 4个独立0
如果按自上而下从左到右顺序找
0 0 0 0 0 0 C 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
数学模型 : m in z cij xij j 1 i 1
n xij 1, j 1,2 ,...,n i 1 n s .t . xij 1, i 1,2 ,...,n j 1 x 0 ,1 i , j 1,2 ,...,n ij
n
n
总成本最小
每项任务由一人完成 每人只承担一项任务
解矩阵的特征
• 全部元素仅取0或1 • 每行有且仅有一个1 • 每列有且仅有一个1
0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0
例如,n=5时, X xij
0 C 0 0 0
0 0 0 0 0 0
0
0 0
0 0 0 0 0 0
j 1 i 1 j 1 i 1 i 1 j 1 i 1
n
n
n
n
n
n
n
即f与z仅差一个常数, 所以两目标在相同的约束 条件下,最优解是相同的.
求解的思想方法
若利用以上性质,能把成本矩阵变换到存在n
个独立的0元素(在不同行不同列),且保持每个Cij 非负.这时让这n个0元素的位置对应的xij=1,其余 位置的xij=0,就得最优解.因为它是目标值为0的 可行解,且总有 z cij xij 0
j 1 i 1 n n
匈牙利数学家 康尼格(D.Konig)的定理
• 若在成本矩阵C中最多能找到k个独立0, 则必可画k条直线把C的全部0覆盖.
匈牙利法
• 步骤
(1)把成本矩阵的各行每一元素分别减去该行中的最 小元素,再检查每列中是否都有0,若不是,则把没
有0的列的每一元素分别减去该列中的最小元素. (2)如果能在矩阵中找到n个独立的0元素, 就可以进
在C中找出最多独立0的步骤
• 设Wi表示第i行0的数目,Lj表示第i列0的数目.
• 1.统计Wi和Lj(i,j=1,2,…n).
• 2.按W1,W2,…,Wn,L1,L2,…,Ln顺序找出 第一个最小正数,选中该行(列)首个0. • 3.删除该0所在的行与列,对应的Wi=0,Lj=0. • 4.重复步骤1~3,直到全部Wi=0为止.
55
性质
从原成本矩阵C的任一行(列)中各元素加(减)
一个常数,得到新的成本矩阵,则此两成本矩阵的
指派问题的最优解是相同的. 证明:设矩阵C的第i行对应的常数为di, ij cij di c
f cij xij (cij di ) xij z di xij z di
0 0 0 0 0 0
0
0 0
0 0 0 0
0 0 0
0
0
0
指派问题
设有n项任务要分给n个人去完成,每人完成一
项. 由于每个人的专长不同,故完成不同任务所需
的成本也不同. 若第i个人完成第j项任务的成本为
cij ,则如何分配这些工作任务,使总成本为最小?
这类问题称为指派问题,矩阵C=(cij)称为成本矩阵.
设置变量: z………总成本
1 指派第i人做第j项任务 xij , i, j 1, 2, , n 0 不指派第i人做第j项任务