【数学建模算法】(4)整数规划的基本概念和常规算法:分枝定界法

之前的三节我们讨论了关于线性规划的相关知识,在实际问题中,比如运输问题,线性规划的变量有一个隐藏的要求——整数,而Matlab中的线性规划算法算出的最优变量一般不会是整数,那么我们有什么办法求出符合整数条件的变量呢,这一节我们就来聊聊线性规划的特殊情况,整数规划。

整数规划的定义

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

整数规划的分类

如不加特殊说明,一般指整数线性规划。对于整数线性规划模型大致可分为两类:
1.变量全部为整数的,为完全整数规划
2.变量部分限制为整数的,称为混合整数规划

整数规划的特点

1.原线性规划有最优解,当自变量限制为整数后,其整数规划解出现下述情况:

(1)原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。

(2)整数规划无可行解。
例1\min z=x_{1}+x_{2}
2 x_{1}+4 x_{2}=5, \quad x_{1} \geq 0, \quad x_{2} \geq 0
易知没有能满足限制条件的整数解。故若作为一个整数规划问题,该问题无可行解。

(3)有可行解(也就是存在最优解),但最优解值变差。
例2 \min \quad z=x_{1}+x_{2}
2 x_{1}+4 x_{2}=6, \quad x_{1} \geq 0, \quad x_{2} \geq 0

其最优实数解为:
x_{1}=0, x_{2}=\frac{3}{2}, \min z=\frac{3}{2}
若限制整数:
x_{1}=1, x_{2}=1, \min z=2

2. 整数规划最优解不能按照实数最优解简单取整而获得。

求解方法分类

整数规划算法分类

下面将对整数规划算法进行一一介绍。

分枝定界法

对有约束条件的最优化问题(其可行解为有限数)的所有可行解空间恰当地进行系统搜索,这就是分枝定界内容。

分枝:把全部可行解空间反复地分割为越来越小的子集,称为分枝。
定界:并且对每个子集内的解集计算一个目标下界(对于最小值问题),这称为定界。
剪枝:在每次分枝后,凡是界限超出已知可行解集目标值的那些子集不再进一步分枝,这样,许多子集可不予考虑,这称剪枝。
上面就是分枝定界法的一个主要流程,下面将用一个例题来详细说明。

例3 求解下列整数规划问题
\operatorname{Max} \quad z=40 x_{1}+90 x_{2}
\left\{\begin{array}{l}{9 x_{1}+7 x_{2} \leq 56} \\ {7 x_{1}+20 x_{2} \leq 70} \\ {x_{1}, x_{2} \geq 0}\end{array}\right.且为整数

1.假设整数规划问题为A,对应的非整数规划问题为B,从求解问题B开始。
得到最优解为:
x_{1}=4.8092, x_{2}=1.8168, z=355.8779
此时的z是问题A所能求得的目标函数值的上界,记为\overline{z},而x_{1}=0, x_{2}=0显然是一个整数可行解,这时z=0,是问题A所能求得的目标函数的下界。将问题B的目标函数值设为z^{*},此时0 \leq z^{*} \leq 356

2.选x_{1}进行分枝,把可行集分成两个子集:
x_{1} \leq[4.8092]=4, \quad x_{1} \geq[4.8092]+1=5
由于4与5之间无整数,所以两个子集的整数解必与原可行集合整数解一致。这一步称为分枝。对两个子集分别进行规划和求解。

设问题B_{1}
Max \quad z=40 x_{1}+90 x_{2}
\left\{\begin{array}{l}{9 x_{1}+7 x_{2} \leq 56} \\ {7 x_{1}+20 x_{2} \leq 70} \\ {0 \leq x_{1} \leq 4, x_{2} \geq 0}\end{array}\right.
最优解为:
x_{1}=4.0, x_{2}=2.1, z_{1}=349
设问题B_{2}
Max \quad z=40 x_{1}+90 x_{2}
\left\{\begin{array}{l}{9 x_{1}+7 x_{2} \leq 56} \\ {7 x_{1}+20 x_{2} \leq 70} \\ {x_{1} \geq 5, x_{2} \geq 0}\end{array}\right.
最优解为:
x_{1}=5.0, x_{2}=1.57, z_{1}=341.4

再定界:
0 \leq z^{*} \leq 349

3.对问题B_{1}再进行分枝得问题B_{1 1}B_{1 2}

设问题B_{1 1}
Max \quad z=40 x_{1}+90 x_{2}
\left\{\begin{array}{l}{9 x_{1}+7 x_{2} \leq 56} \\ {7 x_{1}+20 x_{2} \leq 70} \\ {0 \leq x_{1} \leq 4, 0\leq x_{2} \leq 2}\end{array}\right.
问题B_{1 2}
Max \quad z=40 x_{1}+90 x_{2}
\left\{\begin{array}{l}{9 x_{1}+7 x_{2} \leq 56} \\ {7 x_{1}+20 x_{2} \leq 70} \\ {0 \leq x_{1} \leq 4, x_{2} \geq 3}\end{array}\right.
他们的最优解为。
B_{11} : \quad x_{1}=4, x_{2}=2, z_{11}=340
B_{12} : \quad x_{1}=1.43, x_{2}=3.00, z_{12}=327.14
B_{1 2}剪枝,因为其得到的z已经不在第一轮的定界中了,综合B_{2}得到新界:
340 \leq z^{*} \leq 341

4.对问题B_{2}再次分枝为B_{2 1}B_{2 2}

设问题B_{21}
Max \quad z=40 x_{1}+90 x_{2}
\left\{\begin{array}{l}{9 x_{1}+7 x_{2} \leq 56} \\ {7 x_{1}+20 x_{2} \leq 70} \\ {x_{1} \geq 5, 0 \leq x_{2} \leq 1}\end{array}\right.
设问题B_{22}
Max \quad z=40 x_{1}+90 x_{2}
\left\{\begin{array}{l}{9 x_{1}+7 x_{2} \leq 56} \\ {7 x_{1}+20 x_{2} \leq 70} \\ {x_{1} \geq 5, x_{2} \geq 2}\end{array}\right.
其最优解为:
B_{21}:x_{1}=5.44, x_{2}=1.00, z_{22}=308
B_{22}:无可行解
由于B_{21}所得出的解不在之前定界范围内,所以B_{21}B_{22}均被剪枝。

5.综上,得到最优解:
x_{1}=4, x_{2}=2, z^{*}=340

分枝定界法的一般步骤

从上述问题中可以总结出分枝定界法的一般步骤:

一。将要求解的整数规划问题称为问题A,对应的整数规划问题称为问题B,先对问题B进行求解,可能得到以下情况。
1.B无可行解,则A也定无可行解,计算终止,此题无可行解。
2.B有最优解,且最优解为整数解,此时计算终止,B的最优解同时也是A的最优解。
3.B有最优解,但最优解不是整数解,记下此时目标函数值为\overline{z}
一般来说,可代入各自变量的最小值获得z的最小值\underline{z},得到初始定界:
\underline{z} \leq z^{*} \leq \overline{z}

二。迭代
1.分枝:在B的最优解中任选一个不符合整数条件的变量x_{j},其值为b_{j}\left[b_{j}\right]表示不大于b_{j}的最大整数,构造两个约束条件:
x_{j} \leq\left[b_{j}\right] 和 \quad x_{j} \geq\left[b_{j}\right]+1
用这两个分支分别替换问题B中对应变量的限制条件,不考虑整数条件求解两个后继问题。
2.定界:以每个后继问题为一分枝标明求解的结果,与其它问题的解的结果中,找出最优目标函数值最大者作为新的上界,从已符合整数条件的各分支中,找出目标函数值为最大者作为新的下界。若无符合整数条件的结果则下界不变。
3.比较和剪枝:若各分支的最优目标函数有小于\underline{z}的,则直接剪掉这枝,若大于\overline{z}但不符合整数条件,则重复迭代步骤中的第一步,再选一个不符合整数条件的变量重复运算,直到得到z^{*}=\underline{z},则运算结束,得到最优整数解。

本节对整数规划问题有了一个基本的论述并介绍了其中一个经典算法——分枝定界法。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容