整数规划基本原理

1.1 定义

规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。目前所流行的求解整数规划的方法,往往只适用于整数线性规划。目前还没有一种方法能有效地求解一切整数规划。

整数规划问题的特点在于其决策变量含有整数变量

摘自于【整数规划(一)】整数规划问题综述 (zhihu.com)

一般来说,之所以在模型中要引入整数变量主要原因有2点:

1 我们所需要描述的变量来自生活实际,而这些变量都是整数的。例如:要表示 多少架飞机,多少辆汽车,多少个人 等等 这些变量必然只能是整数的,这些实际问题中的变量若取分数则失去了实际意义,因此我们必须用整数变量来进行建模。

2 我们要描述逻辑,Yes 或者 No,乃至于更复杂的逻辑关系。我们经常会用1代表Yes,0代表No,从这里也可以衍生出很多复杂的逻辑关系。值得注意的是区别于前一种情况此时的整数变量看起来貌似还是整数的形式,但实际上准确的来说说 它们已经是 Bool 变量了。Bool 变量满足 Bool 变量的运算法则,例如 与或非这些,而不满足加减乘除的运算规则。明白了这一点对整数规划问题的建模有着很大的帮助。

分类:

求解方法

分支定界算法求解整数线性规划问题

第一个是穷举法,浪费时间空间
分支定界法:先求出相应松弛问题的最优解

若松弛问题无可行解,则 ILP 无可行解

若松弛问题最优解符合整数要求,则是最优解

若不满足整数条件,则任选一个不满足整数条件的变量x来构造心得约数添加到松弛问题形成两个子问题,依次在减小的可行域求解新的最优解,并重复,直到子问题无解,或整数有最优解。

再谈分支定界,增强理解

上界缩小,下界增大,直到求出为止。

步骤一:确定初始定界,求解线性规划B的最优解,作为初始上界,求解A的一个整数解,作为初始下界。

步骤二:选择B最优解不满足整数条件的变量,约束B为两个子问题,求出B1,B2的最优解

步骤三:比较各分支的解,将最优目标函数值的最大值作为下界,将各分支整数条件的最大值作为新的下界。

步骤四:剪枝,比较各分支的解,若小于新的下界,则剪枝,若无可行解,剪枝,若大于新的下界,那么重复2,3,4.

按照以上步骤不断更新即可。

割平面法的基本思想

割掉的部分只包含非整数解。

步骤一:将约束条件中的系数和常熟化为整数,然后采用单纯形法求解不考虑整数约束的线性规划问题的最优解。

步骤二:在最终单形法中选择一个非整数基变量所在的约束等式,将该约束等式的系数和常熟分解为整数和非真分数之和。

步骤三:将所有整数部分放在左边,分数放在右边,根据各变量的约束特点分析等式右边,得到切割方程。

步骤四:将切割方程代入线性规划问题的最终表中求解最优解,若仍然未得到最优整数解,重述步骤二到步骤四。

0-1规划

常用约束条件的表达方式

隐枚举法

求解思路及改进措施:

(1) 先试探性求一个可行解,易看出(x1, x2 , x3 ) = (1,0,0) 满足约束条件,故为一个可行解,且 z = 3。

(2) 因为是求极大值问题,故求最优解时,凡是目标值 z < 3的解不必检验是否满足约束条件即可删除,因它肯定不是最优解,于是应增加一个约束条件(目标值下界):

(3) 改进过滤条件。

(4)由于对每个组合首先计算目标值以验证过滤条件,故应优先计算目标值 z 大的组合,这样可提前抬高过滤门槛,以减少计算量。

指派问题--匈牙利算法

指派问题模型引入

匈牙利算法步骤:

步骤一:系数矩阵初等行变换,再进行初等列变换,使得各行各列出现0元素。

注意,减去的是最小值。

步骤二:找到只有一个0元素的行,花圈,划去该列其他0元素

同理,再对列做这件事清

步骤三:

相关推荐
太理摆烂哥11 小时前
数据结构之图
数据结构·算法
leaves falling11 小时前
c语言-数1到100的所有整数中数字9出行的个数
c语言·开发语言·算法
Tisfy11 小时前
LeetCode 1351.统计有序矩阵中的负数:O(m+n)时间复杂度——抽象题解
算法·leetcode·矩阵·题解·遍历
doukaiyu11 小时前
P3613 【深基15.例2】寄包柜
算法
CoderCodingNo11 小时前
【GESP】C++五级真题(数论-素数思想考点) luogu-P10720 [GESP202406 五级] 小杨的幸运数字
开发语言·c++·算法
小李小李快乐不已11 小时前
算法技巧理论基础
数据结构·c++·算法·leetcode·hot100
少许极端12 小时前
算法奇妙屋(二十一)-两个数组或字符串的dp问题(动态规划)
算法·动态规划·两个数组或字符串的dp问题
草莓熊Lotso12 小时前
《算法闯关指南:递归,搜索与回溯算法--递归》--04. 两两交换链表中的结点 ,05.Pow(x,n)
数据结构·算法·链表
Bruce_kaizy12 小时前
c++图论——最短路之Johnson算法
开发语言·数据结构·c++·算法·图论
蒙奇D索大12 小时前
【数据结构】排序算法精讲 | 交换排序全解:交换思想、效率对比与实战代码剖析
数据结构·笔记·考研·算法·排序算法·改行学it