当前位置:   article > 正文

整数规划_整数线性规划(Integer Linear Programming)

整数线性规划问题
82a1903b0278d51f5533e72419b33034.png

符号说明:

LP(Linear Programming):线性规划

ILP(Integer LP):整数线性规划

relax LP:LP最优解

不同类型的优化模型

优化模型的变量常可以分为三类

1. 离散类型的变量

2. 连续类型的变量

3. 混合类型的变量

7e548b6dc37fce2635f1144ebf894d2c.gif 问题方程 7e548b6dc37fce2635f1144ebf894d2c.gif

9b6e476ecbd8b09f4e7e7640b3a4f224.png

A是一个m×n的矩阵

b是一个m行的列矩阵

c是一个n行的列矩阵

x是含有n个变量的列矩阵(值为离散类型)

54fa48a2f9480c8f452a61da7af7586e.png

如图所示,此时LP的最优解(称为relaxed LP)为小数,最接近relaxed LP的整数解在可行域的外面,而ILP的最优解在relaxed LP的左边。

如果我们将最接近relaxed LP的所有整数解都考虑在内,是不是就能够找到ILP的最优解了呢?

答案是否定的。一般来说,我们将relaxed LP周围的整数解都考虑在内,可能会出现两种情况,一是不在可行域,二是非ILP最优解。

b04d9d7eb2435973b240ba4e809a266c.png

如图所示,此时我们可以看到ILP的最优解与relaxed LP周围的整数解并不在一起。

由此我们可以分析一下ILP问题

1. ILP最优解很少是可行域的各个顶点,如上图所示,它在可行域的内部。

2. 如果relaxed LP(也就是LP的最优解)恰好是整数,那么它同时也是ILP的最优解,但是这种情况很少出现,一般来说relaxed LP代表的ILP最优解的上限或下限,这点在之后的算法中会用到。

3. relaxed LP周围的整数解并不一定是ILP的最优解,甚至常常不在可行域内。

4. 可行域可以不为空,但ILP可以无解。

5. 目前来说,没有已知的算法能够快速地求解ILP问题(但是有快速求解LP问题的算法)。

6. 处理器可以很容易求解有10000个变量的LP问题,但只能处理几十个变量的ILP问题。(主要是因为如果我们采用暴力搜索算法,处理器运行的时间增加非常迅速)

7. 尽管有很多问题,但不可置否的是ILP模型仍然是一个很有用的建模方法。

7e548b6dc37fce2635f1144ebf894d2c.gif

解决ILP的主要方法

7e548b6dc37fce2635f1144ebf894d2c.gif

ddebd5a235e44bf54fbc5dc8efe2c03a.png

在这里主要讲解Branch-and-bound methods方法 594f38cff5031f4333fba2ce95476f97.gif 分支定界方法 594f38cff5031f4333fba2ce95476f97.gif 3d49c007a51d5420cba94e1bdbbaef14.png

分支定界方法主要包含两个步骤

1. 将该问题看作LP问题,求出最优解,如果最优解为整数,那么结束,否则继续第二步

2. 通过增加限制条件来创建两个分支

7e548b6dc37fce2635f1144ebf894d2c.gif 分支定界算法描述 7e548b6dc37fce2635f1144ebf894d2c.gif

5d66e583c0c395e21eb904d955454397.png

594f38cff5031f4333fba2ce95476f97.gif 举例 594f38cff5031f4333fba2ce95476f97.gif

f8cbfb2c50bcfd79eb602d85af49def5.png

以S0进行分割为例

e630a39cb5cb2cc4d6d94e94d63bb4e7.png

此时分出两个蓝色的区域,一个是点(0,3)一个是下面的蓝色梯形区域

再根据目标函数Z = 4x1+3x2  可以知道在蓝色梯形区域内的relax LP(即LP最优解)为(5/4,2),然后仍然继续分割,重复之间的步骤,可以得到下图。

02f4cf67e5ff64a62f11d88bcf25b5c4.png

注意:在如上构建的树中

1. 我们选择两个变量中最接近整数(已经为整数的不用考虑)的变量作为首先分割条件,

因此在S0中我们选择第二个变量x2作为分隔条件,进行分割区域,我们只需要考虑x2≤2与x2≥3的部分。此时不需要考虑当x2在2到3之间的区域,因为x2在这个区间内为小数,是不会存在最优整数解的。

2. 如果在第一步中,S1的最优值<=9,此时我们已经可以结束分割了,除非要求出所有的最优整数解。

如上当我们面对只有两个变量时候我们可以通过画图进行求解,但是当我们面对三个及以上变量时

比如:

5c0e3a4134c8c22e400e65516823c1f6.png

如果使用暴力搜索算法我们最多需要测试6x6x8x4=1152个候选整数点。

所以在这种情况下,需要借助计算机帮助我们求解。

使用python的scipy.optimize导入linprog库

官方文档

9125719a1b30a69ca92df7b7c41500ed.png

这里我们使用jupyter进行编程

9a311ada0c58593281b7a2e992fa060f.png

选择x1进行分支

f39bf9fad01ba9f28f804903cd640748.png

24cc91a3f69c5a9fa2bb51f6067692c8.png

最后可以得到如下树

31d328b7bf8949e8c6e205b4b8d49f71.png

最后的结果为

x=[0 7 0 0]

z=21

英语词汇:

可行域 feasible region

算法 algorithm

分支定界方法 Branch-and-bound methods

线性规划:LP(Linear Programming)

整数线性规划:ILP(Integer LP)

LP最优解:relax LP

874db6a077b78f4ac83a6525dc4b73cc.png b80eca1ac36dd238e753c0465d993a6a.png 扫码关注 探索数据 874db6a077b78f4ac83a6525dc4b73cc.png
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/593064
推荐阅读
相关标签
  

闽ICP备14008679号