整数规划-分支定界法

分支定界法由来

谨以此博客作为学习期间的记录

在生活中,整数规划(IP)或者混合整数规划(MIP)往往要比单纯的线性规划(LP)应用更为广泛。生产计划、库存规划等,都有着变量或部分变量为整数的要求。那么对于这些特殊限制(变量为整数),该如何高效求解呢?

在某些特定的条件下,线性规划的最优解为整数解,如下:
m i n c T x s . t . { A x ≥ b x ≥ 0 \begin{align*} min \quad & \mathbf{c}^T \mathbf{x} \\ s.t. \quad & \begin{cases} \mathbf{Ax} \geq \mathbf{b} \\ \mathbf{x} \geq \mathbf{0} \end{cases} \\ \end{align*} mins.t.cTx{ Axbx0
其中,

  • c \mathbf{c} c 是包含目标函数系数的列向量;
  • x \mathbf{x} x是决策变量的列向量;
  • A \mathbf{A} A是包含约束条件系数的矩阵;
  • b \mathbf{b} b是包含约束条件右侧常数的列向量。

在上面的问题中,如果 A A A为幺模矩阵,那么即使不限定x为整数,最终得出的最优解也一定为整数解。
链接: 幺模矩阵-整数解特性
但是在大部分的规划问题中,A都并不满足幺模矩阵,单纯形法可以解决线性规划,但是并不能保证所得出的最优解为整数解,因此就需要一种单独针对整数变量求解的方法。
链接: 单纯形法原理

分支定界法原理

以一个实例介绍分支定界法的流程,实例参考《运筹优化常用模型、算法及案例实战——Python+Java实现》
m a x z = 100 x 1 + 150 x 2 s . t . { 2 x 1 + x 2 ≤ 10 3 x 1 + 6 x 2 ≤ 40 x 1 , x 2 ≥ 0 x ∈ Z n (整数限制) \begin{align*} max \quad &z = 100x_1 + 150x_2 \\ s.t. \quad & \begin{cases} 2x_1+x_2 \leq 10 \\ 3x_1+6x_2 \leq 40 \\ x_1,x_2 \geq 0\\ \mathbf{x} \in \mathbb{Z}^n \quad \text{(整数限制)} \end{cases} \\ \end{align*} maxs.t.z=100x1+150x2 2x1+x2103x1+6x240x1,x20xZn(整数限制)
可行域绘制如下:
在这里插入图片描述

首先忽略 x x x为整数的限制,直接使用单纯形法进行求解。
子问题1:
m a x z = 100 x 1 + 150 x 2 s . t . { 2 x 1 + x 2 ≤ 10 3 x 1 + 6 x 2 ≤ 40 x 1 , x 2 ≥ 0 \begin{align*} max \quad &z = 100x_1 + 150x_2 \\ s.t. \quad & \begin{cases} 2x_1+x_2 \leq 10 \\ 3x_1+6x_2 \leq 40 \\ x_1,x_2 \geq 0\\ \end{cases} \\ \end{align*} maxs.t.z=100x1+150x2 2x1+x2103x1+6x240x1,x20
最终解得到

Optimal Objective Value: 1055.5555555555554
x1 = 2.222
x2 = 5.556

将其向下取证,可以得到一个整数解

Optimal Objective Value: 950
x1 = 2
x2 = 5

那么根据求解结果,可以得到结论:最终的目标函数最优值将会介于[950,1055.56)之间。因为在max问题中,即使去掉了整数限制得到的最优值也只有1055.56,如果添加约束最优值只会更低,所以1055.56为目标函数值上界。而目前我们得到整数可行解的目标函数值为950,如果后续求到的解质量非常差,我们也可以把950当为问题的最优解,如果后续有更高质量的解,我们可以将更高质量的解作为最优解。根据当前解得情况,得到根节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kilig*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值