文章目录
- 引言
- 四、0-1 整数规划
- 4.2 0-1 整数规划的解法
- 4.2.1 0-1 规划模型标准型
- 4.2.2 隐枚举法计算步骤
- 写在最后
引言
经过前文,了解以及体会到 0-1 变量的特性后,我们来研究该如何去求解这类特殊的 0-1 整数规划模型。
四、0-1 整数规划
4.2 0-1 整数规划的解法
既然是整数规划,那么所有可行解的数量便是有限的,全枚举法便是一种算法。检查每个变量取 0 或 1 的所有组合,满足所有约束条件并使得目标函数最优的组合就是 0-1 整数规划的最优解。
若 0-1 变量有 n 个,需要检查 2 n 2^n 2n 个变量组合。当 n n n 数量较大时,想要靠全部列举出来,几乎是不可能的。
下面介绍一种隐枚举法,只要检查全部变量组合的一部分组合就可以求出最优解,这有点像前面讲过的分支定界法。
4.2.1 0-1 规划模型标准型
首先,要应用隐枚举法进行求解,必须将原模型化为如下标准型。
其中, c j ≥ 0 c_j \geq 0 cj≥0 , b i b_i bi 可以是正数、负数或 0 ,所有约束条件必须是 ” ≤ ” ”\leq ” ”≤” 型。
和平常的标准型有一些不同,不用化成等式,右端可以是负数,但是必须是求最小。
如果所给的模型不是标准形式,可以通过如下方法进行变换。
- 如果目标函数求最大,可将目标函数乘 -1 。
- 如果变量 x j x_j xj 对应的目标函数系数 c j ≤ 0 c_j \leq 0 cj≤0 ,可以用 ( 1 − x j ) (1-x_j) (1−xj) 替换 x j x_j xj ,最后记得还原结果。
- 如果约束条件为 “ ≥ ” “\geq” “≥” 形式,将其乘上 -1 。
- 如果约束条件为 “ = ” “=” “=” 形式,将其变为一个 " ≥ " "\geq" "≥" 和一个 " ≤ " "\leq" "≤" ,将前者乘以 -1 。
4.2.2 隐枚举法计算步骤
隐枚举法首先令全部变量为 0 ,检验解是否可行。若可行, z = 0 z=0 z=0 ,已取得最优解;若不可行,则令一个变量取值为 0 或 1 ,称为固定变量。固定变量每一个值对应一个子问题,可将问题分为两个子域,其余未被指定取值的变量称为自由变量。
根据标准型要求,这些自由变量的系数均为非负,令所有自由变量为 0 ,加上固定变量的取值,组合该子域的解。经过检验,或停止分支,或继续指定固定变量,直至没有自由变量或全部子域停止分支为止。
其流程图如下所示:
由于第 3,4,5,均有停止分支的情况,对于这些子域自由变量取 0 或 1 值的所有可能组合都被隐含地考虑了,不必再一一列举。所以这种方法称为隐枚举法,可大大减少计算量。
同时,实际解题中,指定固定变量时,可优先指定目标函数系数最小的变量,加快计算速度。
写在最后
隐枚举法求解过程还是相对复杂和繁琐些,对待每一步都需要理清思路和逻辑。下篇文章我们来学习指派问题的相关内容。