规划中的变量 (部分或全部) 限制为整数时,称为整数规划。
若在线性规划模型中变量限制为整数,则称为整数线性规划。
分类:
变量全限制为整数时,称纯 (完全) 整数规划;变量部分限制为整数时,称混合整数规划。求解方法分枝定界法思路:将可行解空间分割为越来越小的子集,对每个子集内的解集计算目标下界,超出已知可行解集目标值的子集不再进一步分枝。
步骤**分枝:**在问题中任选一个不符合整数条件的变量 ,取小于 的最大整数和大于 的最小整数,构造新的约束条件 将约束条件加入原问题,构造两个新问题;**定界:**对于新问题的解,从符合整数条件的分枝中,找出目标函数值最大作为新的下界;**比较与剪枝:**若分枝的解小于下界,则去除该分枝;若分枝的解大于下界且不符合整数条件,重复步骤 1,直到解等于下界。例子1. 求解与定界记问题 ,首先不考虑整数限制,得
而 时 ,则为 的下界,记 。
即
2. 分枝再求解对 任选一个进行分枝,设选 分枝,有:
对于 ,构成新的约束条件,记问题 : 解得 对于 ,构成新的约束条件,记问题 : 解得
3. 再定界的解均不满足整数条件,下界不变,即
两个问题的解均不等于下界,继续分枝。
4. 再分枝再求解对问题 再分枝,由于 满足整数条件,选 : 分别构成问题 。
最优解分别为:
同样对问题 再分枝,有:
无可行解5. 再定界中, 满足整数条件,作为下界,即 其余分枝解均小于下界,被剪枝,保留 。
而 满足整数条件,无需继续分枝,作为最终解,即
过滤隐枚举法思路:排除掉不可能的变量取值集合,只检查变量取值组合的一部分,就能求到问题的最优解。
过滤隐枚举法是解 0-1 型整数规划的一种解法。
步骤试探求一个可行解 ,代入得 ;增加约束条件 ;继续试探求解并更新约束条件,从而抬高过滤门槛,减少计算量。蒙特卡洛法对可行解集进行随机取样,选取部分解集代入计算。
Python 代码利用 cvxpy 包可以直接进行整数规划的求解。
对于问题:
代码如下:
# %%import numpy as npimport cvxpy as cp# %%# 目标函数形如 min c^T·xc = np.array([40, 90])# 约束形如 a·x