运筹学 第4章 整数规划与分配问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
匈牙利法思路:若能在 [Cij] 中找出 n 个位于
不同行不同列的0元素(称为独立0元素),则
令解矩阵[xij]中对应这n个独立0元素的元素
取值为 1 ,其他元素取值为 0 ,则它对应目
标函数zb=0是最小的。这就是以[Cij]为系数
矩阵分配问题的最优解,也得原问题的最
优解。
定理1 若从分配问题效率矩阵[cij]的每一行元素中分别减去 (或加上)一个常数ui(称为该行的位势),从每一列分别减去 (或加上)一个常数vj(称为该列的位势),得到一个新效率矩阵 [bij],若其中bij=cij-ui-vj,则[bij]的最优解等价于[cij]的最优解
第1步:找出效率矩阵每行的最小元素,并分别从每行
中减去。
第2步:再找出矩阵每列的最小元素,并分别从各列中 减去。
2 10 9 7 2 15 4 14 8 4 13 14 16 11 11 4 15 13 9 4
0 8 7 5 11 0 10 4 0 3 5 0 0 11 9 5
表明m个约束条件中有(m-k)个的右端项为( bi+M ),不起约 束作用,因而,只有k个约束条件起作用。 ② 约束条件的右端项可能是r个值b1 , b2 ,, br 中的某一个 即: 定义:
n
aij x j b1 或b2或或br
j 1
1 假定约束右端项为 bi yi 否则 0
现用下例来说明: max z=40x1+90x2 9x1+7x2≤56 7x1+20x2≤70 x1,x2≥0 x1,x2整数 ① ② ③ ④ ⑤
解:先不考虑条件⑤,即解相应的线性规划B,①~④(见图5-2), 得最优解x1=4.81,x2=1.82,z0=356
z z
可见它不符合整数条件⑤。 这时 z0 是问题 A 的最优目标函 数值z*的上界,记作z0= z 。 当 x1=0 , x2=0 ,是问题 A 的一 个整数可行解,这时 z=0 ,是 z*的一个下界,记作 z =0,即 0≤z*≤356。
b x M c x
n n n n i 1 j 1 ij ij i 1 j 1 n n ij n i 1 j 1
ij n
M xij cij xij
i 1 j 1
nM cij xij
i 1 j 1
n
n
故所得最小解就是原问题的最大解。
证明:略。
下面以实例说明匈牙利法的解题步骤:
例2 有一份中文说明书,需译成英、日、德、俄四种文字, 现有甲、乙、丙、丁四人,他们将中文说明书翻译成不同 语种说明书所需时间如表4-2所示。问应指派何人去完成 何工作,使所需总时间最少? 表4-2
人 员 任务 英文 日文 德文 俄文 甲 2 15 13 4 乙 10 4 14 15 丙 9 14 16 13 丁 7 8 11 9
重复(1)、(2)两步,可能出现三种情况:
① 效率矩阵每行都有一个打( )号的0元素,此时,令对应 打( )号0元素的xij=1,得到最优解。 ② 打( )号的0元素个数小于m,但未被划去的0元素之间存 在闭回路,这时可顺着闭回路的走向,对每个间隔的0元 素打一( )号,然后对所有打( )号的0元素,或所在行,或 所在列画一条直线。 ③ 矩阵中所有0元素或被划去,或打上( ),但打上( )号的 0元素个数小于m
0 0 5 0
0 8 11 0 2 3 0 11
2 5 0 4
5 4 0 5
第3步:若找出n个独立0元素,就以这些元素对应解矩阵[xij] 中的元素为1,余为0,得最优解。否则,按下列步骤解决 (1) 从第一行开始,若该行只有一个0元素,就对这个元素打 上( )号,对打上( )号0元素所在列画一条直线。若该行没 有0元素或有两个以上0元素(已划去的不计在内),则转下 一行,依次进行到最后一行。 (2) 从第一列开始,若该列只有一个0元素,就对这个元素打 上( )号,对打上( )号0元素所在行画一条直线。若该列没 有0元素或有两个以上0元素(已划去的不计在内),则转下 一列,依次进行到最后一列。
分枝定界法思路:对求解最大化的整数规划问题 A ,从 解与它相应的线性规划问题 B 开始,若其最优解不是整 数,那么B的最优目标函数必是A的最优目标函数 的上 z 界,记作 ; A 的任意可行解的目标函数值将是 的一 z z 个下界 。分枝定界法是将 B的可行域分许多子区域 (称 z 为分枝)的方法,逐步减小 和增大 ,最终求得 。 z z z
第4步:为设法使每一行都有一个打( )号的0元素,需要对 矩阵变换。 (1) 从矩阵未被直线覆盖的数字中找出一个最小的数k;
(2) 对矩阵的每行,当该行有直线覆盖时,令 i 0 ,无 直线覆盖的,令 i k ; (3) 对矩阵中有直线覆盖的列,令v j k ,对无直线覆盖
的列,令 v j 0 ;
2 5 0 4
5 4 0 5
0 8 2 5 11 0 5 4 2 3 0 0 0 11 4 5
0 8 0 11 4 5 0 11
0 3 0 2
3 2
0
3
0 0 1 0 0 1 0 0 可见最优解为 xij 0 0 0 1 1 0 0 0 这表示:指定甲译成俄文,乙译成日文,丙译成英文,丁译 成德文,所需总时间最少。
2、逻辑变量在数学模型中的作用
① m个约束条件中只有k个起作用
设m个约束条件可表为:
aij x j bi
j 1
n
i 1, 2, , m
定义
1 假定第i个约束条件不起作用 yi 0 假定第i个约束条件起作用
令M 为任意大的正数,则
n aij x j bi Myi j 1 y1 y2 ym m k
证明:将从[bij]中得到的解代入目标函数
z bij xij cij i v j xij
n n n n i 1 j 1
n n
i 1 j 1
cij xij i xij v j xij
i 1 j 1 i 1 j 1 j 1 i 1
max z cij xij
i 1 j 1 m m
可令 bij=M-cij,其中M是足够大的常数(如选cij中最大元 素为M即可),这时效率矩阵变换为B=(bij),bij≥0,符合 匈牙利法条件。
目标函数变换后,即解
min z bij xij
i 1 j 1 n n
因为:
n r aij x j bi yi i 1 j 1 y1 y 2 y r 1
上述约束条件可表示为:
§2 分配问题与匈牙利法
2-1 问题的提出与数学模型 某单位需完成 n项任务,恰好有 n个人可承担这些任务。 由于每人的专长不同,完成任务不同,效率也不同。 于是产生应指派哪个人去完成哪项任务,使完成n项任 务的总效率最高(或所需总时间最小)。这类问题称为分 配问题或指派问题(assignment problem)。 设:用[cij]表示分配问题的效率矩阵,令
1 分配第i个人去完成第 j项任务 xij 0 不分配第i个人去完成第 j项任务
i 1, 2, , n; j 1, 2, , n
当问题要求极小化时,数学模型j 1
n
n
n j 1, 2, , n xij 1 1 i n i 1, 2, , n xij 1 j 1 xij 0 或 1 指派问题是运输问题的特例,即n=m, aj=bi=1。可用 运输问题的解法去求解。根据分配问题的特点,下面给 出匈牙利法。
(4) 从原矩阵的每个元素cij中分别减去 i 和 v j ,得到一个 新的矩阵。 第5步:回到第3步,反复进行,直到矩阵每一行都有一 个打( )号的0元素为止,即找到了最优分配方案。
2 0 8 2 5 2 11 0 5 4 2 3 0 0 0 0 11 4 5 2 2 0 0 2
第4章 整数线性规划
• • • • • §1 整数规划的特点及作用 §2 分配问题与匈牙利法 §3 分枝定界法 §4 割平面法 §5 应用举例
§1 整数规划的特点及作用
1、整数规划的特点 线性规划问题的最优解通常是非整数,但对某些具 体问题,要求解必须是整数。例如,所求解是机器的台 数、完成工作人数等问题,非整数解就不合要求。将非 整数解通过“舍入化整”,不见得是可行解,或虽是可 行解,但不一定是最优解。
因此,求整数最优解问题,有必要另行研究。我们 称此问题为整数线性规划(integer linear programming), 简称ILP。
整数线性规划中如果所有的变量都限制为(非负)整数, 就称为纯整数线性规划(pure integer linear programming)或称为全整数线性规划(all integer linear programming); 如果仅一部分变量限制为整数,则称为混合整数规划 (mixed integer linear programming)。
n
n
n
n
cij xij i v j
i 1 j 1 i 1 j 1
n
n
n
n
第一项是[cij]解的目标函数 z,后两项是常数,因而,当 z 达到最小值时,相应地 z 也达到最小值。
定理2 若矩阵A的元素可分成“0”与非“0”两部 分,则覆盖“0”元素的最少直线数等于位于不同 行不同列的“0”元素的最大个数。
0 11 2 0 8 0 3 11 2 5 0 4 5 4 0 5
0 11 2 0
8 0 3 11
min zb bij xij 0 min z cij xij c13 c22 c34 c41 28
i j i j
2-3 两点说明
• 人数和任务数不等时的处理方法 若任务数少于人数,处理的办法是增添假想的任务, 使任务数量等于人数,对应效率矩阵中,每个人完成 假想任务时间为0。当任务数多于人数时,可虚设假想 的人来处理。 • 目标函数为极大化问题的处理方法
例:求下列指派问题的最小解
任务 人员 甲 乙 丙 丁 戊
A 12 8 7 15 4
B 7 9 17 14 10
C 9 6 12 6 7
D 7 6 14 6 10
E 9 6 9 10 9
§3 分枝定界法 线性规划问题中,变量x在一个连续的范围内取 值,因此可行解个数有无限多。对整数规划问题,变 量只能取整数值,可行解的总数是有限的。当问题变 量数少时,可使用“穷举法”,将可行的整数解全部 列出来,通过比较得到最优解。但当变量数较大时, 穷举法是不可行的。 有效的方法是仅检查部分可行的整数组合,定 出最优的整数解。分枝定界解法(branch and bound method)就是其中的一种方法。