割平面法只能求解纯整数规划吗_什么样的整数规划模型是一个好的模型(附整数规划模型转化技巧)...

e911bd66a0861613bd485689e44955c5.png

解决(混合)整数规划问题首先面临的就是建模的问题,一个好的模型可能比一个好的算法更加有效,尤其对于(混合)整数规划问题而言。本文从整数规划基本理论出发介绍了何谓一个好的整数规划模型,然后介绍了整数规划模型转化的小技巧,最后介绍了整数规划建模中常用的大M法的大M取值的技巧。相信让初步入门整数规划的童鞋对整数规划建模的原理和技巧有一个充分的认识。

文章发表于微信公众号【运筹OR帷幄】:主编推荐 | 什么样的整数规划模型是一个好的模型(附整数规划模型转化技巧)

1 什么样的整数规划模型是一个好的模型

对于整数规划问题/混合整数规划问题而言建模的重要性不言而喻,一个好的模型可能比一个好的算法更加有效。那我们在对整数规划问题进行建模的时候应该注意哪些问题?如何稍微量化的能够衡量和评价一个整数规划问题/混合整数规划问题 的数学模型的好坏是一个非常重要的问题。

一个整数规划问题拥有更多的约束可能更加容易被求解,这一点可能有点和常规想法不一样。这是因为更多的约束可能会让整数规划的松弛问题的界更紧。其实割平面方法已经提供了一个很好的例子说明了这个现象。这就提示我们在一开始进行整数规划/混合整数规划建模的时候引入更多约束可能反倒能帮助我们在模型求解阶段更快的找到最优解。一言以蔽之的来说就是 松弛问题下界比较好的整数规划模型就好。下面我们围绕几个简单例子来说明这点。

对于同样的整数规划问题不同的Problem formulation会产生完全不一样的效果。下面通过一个非常简单的例子来说明不同约束对于整数规划问题的影响,考虑如下三个整数规划的约束

问题1:

问题2:

问题3:

观察上面三个整数规划问题的约束,虽然三个问题的约束是不一样,但是对于整数规划问题而言,它们有着相同的可行域即

从图中也可以看出

d27bb59ca11f217c9378ecdce36a9733.png

图1

现在我们将问题1-3进行一个线性松弛,即去掉整数约束,直接将整数规划松弛为线性规划。可以得到如下三个线性松弛之后的问题

线性松弛问题1:

线性松弛问题2:

线性松弛问题3:

我们画出这三个问题的约束,会从图1中看得非常清晰。如图1所示,直线DE代表问题1的约束,直线DC代表问题2的约束,直线BC代表问题3的约束。从图中不难看出问题3的约束性质好到爆炸啊,因为问题3线性松弛之后得到的线性规划问题的顶点刚好都是整数点,我们知道线性规划的最优解至少有一个出现在顶点上,同时顶点又都是整数点,那么直接求解这个线性规划问题就是原来整数规划问题的最优解了,什么branch ,什么cut,什么rounding 这些都不需要了。

对于问题2来说,其线性松弛问题的可行域是ADC这个三角形,那问题2比问题3的性质要差一点,因为问题2线性松弛问题的可行域有2个是整数点(点A和点C),还有一个是非整数的(点D)。同样的对应问题1来说,其线性松弛问题的可行域是ADE这个三角形,那问题3又比问题2性质差了一点,它只有1个整数点(点A),有两个是非整数点(点D和点E)。可以想象一下,若求解问题3的松弛问题(线性规划)之后很可能会得到一个非整数的解(即最优解落在点D和点E上),那么接下来还必须再进行cut 或者 rounding的方法去进一步找出整数解。

进一步思考上面这个非常简单的小例子,其实稍微熟悉整数规划的童鞋都知道 ABC是 整数可行域S的凸包。如果不熟悉凸包也没关系,其实我们需要看到更本质的东西就是 我们需要找到一个能包住S集合的东西,但是在能包住的前提下尽量要小一点。例如在前面这个小例子,ABC, ACD和ADE都能包住S集合,但是ABC包含于 ACD 包含于 ADE。

从上面的例子得到启发,我们将上面的思想一般化后可以得到。若集合S_I 是整数规

划问题的可行域

P1和P2是对该整数规划问题的两种不同的formulation

其中P1和P2均满足

若P1是P2的子集,则说明P1 的formulation 要优于 P2 的 formulation

画个图出来就是如下图所示

696d04be528c22f6db440a7a9e8845b8.png

在图中P1和P2多边形都有相同的整数解,但是P1比P2要小,即P1包含于P2,那么解P1的线性规划得到的解总是比解P2线性规划得到的解更加接近我们原来整数规划问题的解。这一点从图上可以看得很清楚,另外从优化理论的从发也可以知道 线性松弛后的问题都是原整数规划问题的下界(若对于极小化问题而言),那么在一个更小的集合上找到的极小值一定比在一个更大的集合上找到的极小值要来得大,因此P1比P2能够提供一个更紧的下界。

下面通过一个选址问题建模中的例子,我们应用一下刚才得到的结论来评判两个模型的好坏。考虑如下的一个选址问题。m表示有m个备选设施,n表示需要被服务节点的数目,

表示设施i服务节点j,
表示设施i不服务节点j,
表示仓库i被选中,
表示仓库i没被选中。每建立一个仓库有一个固定成本
,让仓库i服务节点j有一个运输成本

首先来看第一个模型里的约束(1.1)表示每个节点保证有一个仓库去服务,约束(1.2)表示对于仓库i来说,若仓库i没被选中,则仓库i不服务任何节点,若仓库i被选中,则仓库i最多给n给节点服务。

模型1:

模型2:

下面这个模型和上面的模型唯一的差别是第二条约束发生了一点变化,约束2.2比约束1.2更强一些。因为满足约束2.2一定就满足约束1.2,但是满足约束2.2却不一定满足约束1.2。显然后一种建模的方式更加好一些。

2 整数规划建模

2.1 包含逻辑的约束建模

具体关于整数规划建模的小技巧在参考文献【2】里边已经总结的差不多了,这里也就不重复了。我想说的是虽然我们一般都笼统的说 整数规划问题,其实整数规划问题里边的整数变量有两类,第一类是真的整数变量,例如我们要决策采购多少零件,这个零件可能本身就是一个整数的,第二类是逻辑变量也叫做布尔变量,长相上和整数变量好像没啥大区别,但是布尔变量遵循的是逻辑运算的法则(例如 与 或 非这些的),布尔变量之间如果做加减法或者乘法的话 与整数变量做加减法乘法的意义是有很大不同的。其实在我们进行整数规划建模的时候,第一类整数变量建模是比较简单的,因为它是真的整数变量,第二类整数变量就稍微需要一些技巧,这是因为本质它是属于布尔变量。只要模型中含有 if else, if then,A和B不能同时发生 这类逻辑约束的时候我们在对这类问题建模的时候就必然要引入第二类整数变量。

2.2 非线性多项式整数规划模型转化为线性整数规划模型

如何将非线性整数规划问题转化为线性的整数规划问题呢?下面给出一个把0,1二次整数规划问题转为0,1线性整数规划问题的例子。为什么用这个例子来说明,有两个原因:非0,1整数规划问题都可以转化为0,1整数规划问题(不知道的童鞋可以参考文献【1】);二次是比较常见的非线性的形式,掌握了二次基本上就能理解多项式的整数规划问题怎么转化为线性的了。

考虑如下的含有二次表达式的整数约束形式,其中y是binary variable,也就是说y只能取0和1的整数变量。

首先我们可以直接将上式等式右边第一项平方项完全用一次项替代掉是完全等价的。这是因为当

等于0的时候
也等于0,当
等于1的时候
也等于1。也就是说这里因为
是0,1变量就导致
平方是完全等价的。

对于等式右端第二项是一个交叉项,我们可以用含有两个下标索引的变量

来表示
,同时我们还要如下的约束

下面我们来验证一下

的取值是否和
相同,当
时,我们代入上面这个约束可得

这个约束说明

只能等于0,也就是说
的取值和
相等。

一共有四种情况,这里我们只验证了一种情况,童鞋们可以按照这个方法验证一下其它三种情况都是满足

的取值和
相等。

到此为止,我们可以说对于0,1变量的二次整数规划问题都是可以通过这样的方法转化为0,1线性整数规划问题的。那么通过类似的方法其实多项式的0,1整数规划问题都可以转化为0,1线性整数规划问题,具体的转化方法可以看参考文献[1]。这里要强调一点的是能转化并不意味着这么转化就好,从上面的例子就可以看出从二次转化为线性的时候我们引入了二维索引的0,1整数变量

。这意味着转化后的线性规划问题的整数变量的数目比原来非线性的时候要大大增加。是否把多项式非线性整数规划问题转为线性的还需要具体讨论,因为这样的转化并不总是能让问题变得简单。

3.Big M约束以及怎样选取Big M的值

3.1什么时候模型中需要引入Big M

截止到目前,我们总结出两种模型中会出现大M的情况。分别出现在模型的目标函数与约束条件中,这两种情况的共同点在于大M常以乘积形式与变量结合使用,区别在于大M出现在目标函数中主要作用是“移除无效变量”,出现在约束条件中主要作用是“选择有效约束”。

第一种情况,大M出现在模型的目标函数中。

尽管有很多高效求解线性规划问题的求解器存在,但是了解求解线性规划问题的原理依然十分重要。在经典运筹学教材中对求解线性规划模型的经典算法——单纯形法的方法及原理介绍都是基于线性规划模型的典式进行的,但是我们依据现实问题建立的很多线性规划模型都不是典式,就需要我们使用变量增替等方式进行模型的标准化转换,从而利用标准化程序进行统一求解。

大M法的出现就是基于以上的需求。当模型的系数矩阵不存在一个单位矩阵作为初始可行基时,我们需要引入“人工变量”使系数矩阵变为满秩,此时的大M用于“排除人工变量”,使得转换之后的模型与原模型等价。由于在实际应用中很少会有机会遇到手动用大M法求解线性规划模型的情况,在这里就不过分展开,相关更多内容读者可参考运筹学教材进行进一步学习(如《运筹学的原理和方法》第三版第二章单纯形法)

第二种情况,大M出现在模型的约束条件中。

不同于第一种情况的大M法用于帮助求解线性规划模型,属于理论层面的内容。此处的大M法更贴近应用,在抽象问题建立线性规划模型,尤其是在混合整数线性规划模型中扮演者举足轻重的角色。上面提到大M出现在约束条件中的作用可以总结为“选择有效约束”,以约束条件

为例,其中
,
分别为连续(离散)变量,与0-1变量,其他参数为常数。那么当
时,该约束条件为无效约束;当
时该约束条件作为有效约束被加入模型中参与求解。以下的讨论均是基于第二种情况下,对大M取值的思考。

3.2是否需要关注模型中Big M的确切取值

当我们面临的问题仅仅是一个含有大M的连续型变量的线性规划模型时,由于类似于cplex等优化求解器对线性规划问题的高效求解,求解器内部程序可以在较短的时间内获取模型的有效上界(下界)从而替代约束条件中的极大的M值,此时大M的确切取值似乎在实际应用上并不重要。

但是我们常常面临的研究情景是,大M出现在(混合)整数规划模型中。对于较大规模的整数规划问题,当前的优化求解器无法保证在理想的时间内得到最优解,因此我们常用的方法是通过设计启发式算法,牺牲问题求解结果的精度来获得理想的求解时间,而获取问题下界是设计与分析启发式算法的重要组成部分。通过求解(混合)整数规划模型的松弛问题,是获取问题有效下界的常用方法,此时若模型约束中存在大M,大M的值将会对所获取的下界值产生较大影响。

这种影响主要体现在两个方面。当大M的值过大时,将会导致weak relaxation。这里的weak不仅体现在求解时间的耗费上,另一方面,将可能导致求解结果的极大误差。当大M的值过小时,显然可能会将原问题的最优解排除在松弛模型的可行域外,得到完全错误的解。因此我们应该在保证大M值correct的前提下,尽可能的寻找使得松弛模型的约束更tight的值(i.e.包含整数规划模型最优解的松弛模型的可行域尽可能小)。

以下讨论均是基于第二种情况下,对如何处理大M值的概述。

3.3如何处理Big M的值

当我们面临需要尽可能准确的确定大M值的情形时,常常有两个方向可供选择。第一,通过某种方式消除模型中的大M。第二,结合问题的实际意义选定合适的大M。针对第一种方式,有相关研究详细展示了如何使用Bender's decomposition的方法来消除大M(具体内容有兴趣参见参考文献【5】,笔者也还在学习中吼吼),针对第二种,举个小栗子说明一下:约束

把他放在某运输问题背景下,整数变量

代表从仓库i发往终端j的商品数量,0-1变量
代表是(取1)否(取0)启用仓库i,若已知仓库无容量限制与各终端需求量。理论上此处的
可以取无穷大,但是在实际问题背景下,可以取终端j的商品总需求量作为合理的替代值,这样就极大的缩小了问题约束的范围。针对不同的实际问题性质,我们总可以找到尽可能合理的大M取值。

另一个需要我们关注的是,当一个模型中有多个约束都存在大M的值时,理论上这些大M值应该存在不同的correct and tight的大M取值,但是在实际研究过程中我们总是倾向于用相同的数值来代替问题中所有的大M值。

更多关于整数规划的技巧和基本原理可以看参考文献[1]

参考文献:

【1】Applied Integer Programming: Modeling and Solution https://b-ok.org/book/1239098/8241c6

【2】优化 | 线性规划和整数规划的若干建模技巧

https://zhuanlan.zhihu.com/p/69397833

【3】OR in world https://orinanobworld.blogspot.com/search/label/integer%20programming

【4】 Optimization modelling: a practical approach https://b-ok.org/book/445740/2b861c

【5】 Codato, G. and Fischetti, M. Combinatorial Benders' Cuts for Mixed-Integer Linear Programming. Operations Research, 2006, Vol. 54(4), pp. 756-766.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值