例析0-1整数规划及隐枚举法的应用
- 格式:docx
- 大小:20.17 KB
- 文档页数:3
0-1整数规划与隐枚举法-感受剪枝的魅力作者:llhthinker整数规划是线性规划的特殊情况,即当约束条件是变量为整数时,线性规划就变成了整数规划。
若要求所有变量都为整数,即为纯整数规划;若允许存在一部分变量不一定为整数,则称为混合整数规划。
而本文要讨论的0-1整数规划则是纯整数规划的特殊情况,即所有变量要么等于0,要么等于1,故这种变量又成为逻辑变量。
0-1整数规划在生活中还是很常见的,通常可以总结为“是”“否”问题。
例如,有n个产品销地x1,...,xn可供选择,为使得利润最大,那么每一个销地都面临是否选择的问题,通常还会有一些限制条件,由于销地xi与销地xj距离较近,所以规定若选择xi就不能选择xj等。
那么如何求解0-1规划问题?最朴素的方法是枚举,即将所有销地是否被选择的情况都考虑,那么就是从{0, ... ,0}枚举到{1, ... ,1},需要2的n次方的枚举次数。
显然,当n较大时,这种方式的效率就非常低。
本文要介绍的隐枚举法就可以提高求解出最优解的效率。
所谓隐枚举法,从字面上理解,就是隐去一些不需要枚举的情况,下面从一个例子出发,来给出隐枚举法的步骤。
【例】求解下列规划问题max z = 8*x1 + 2*x2 - 4*x3 - 7*x4 -5*x5;s.t.{3*x1 + 3*x2 + x3 + 2*x4 + 3*x5 <=>5*x1 + 3*x2 - 2*x3 - x4 + x5 <=>xi = 0或1,i = 1, ..., 5}1. 预处理首先需要对原问题进行预处理,至于为什么后文将会解释。
预处理的步骤如下:1) 将目标函数统一为求最小值,即'min', 同时将约束条件都化为'>='。
•若原约束条件为'<>•若原约束条件为'Ai * X = bi',则化为'Ai * X >= bi' 和'-Ai * X >= -bi',其中Ai为系数行向量,X为变量列向量。
浅谈0-1规划的隐枚举法(OR)线性模型中,当变量的取值只能是“0”或“1”时,称之为“0-1规划问题”。
有种极其简单的解法,就是将变量取值为0或1的所有组合列出,然后分别代⼊⽬标函数,选出其中能使⽬标函数最优化的组合,即为最优解。
但是真的这样会做很多⽆⽤功,浪费⼤量资源,所以,需要改进⽅法。
本⽂主要介绍隐枚举法的应⽤原理,意在剖析其“隐”在何处。
从⽽帮助读者更好地应⽤这种⽅法。
下⾯介绍隐枚举法的具体步骤:第⼀步:得到模型、和线性规划问题⼀样,⾸先需要将模型标准化。
标准化对0-1规划问题提出四点要求:1.⽬标函数为最⼩优化2.⽬标函数中变量的系数都为正3.在⽬标函数中,变量按系数值从⼩到⼤排列,则约束函数中,变量的排列次序也做相应改变。
4.所有变量均为0或1为了满⾜这四点要求,需要对原始模型进⾏转化。
1.最⼩优化转化若原函数是最⼤优化,重新构造⼀个函数,使各个⾃变量的系数是原来的相反数。
当新函数值最⼩时,原函数值达到最⼤值。
2.⽬标函数系数为正转换若⽬标函数的中变量xj的系数为负,令xj’=1-xj代⼊,使系数变为整数。
约束函数中,变量随之换元即可。
这样做的效果是在变量前加个负号,使这个负号和变量系数中的负号抵消,达到系数为正的效果。
变量取值只能是0或1的特殊性,给这种换元⽅式提供了嫁⾐。
3.这步标准化的⽬的是将每个变量安排“优先级”,优先级⾼的可以优先为“1”。
第⼆步:确定“母⽅案”在标准化后的模型中,令所有的变量为“0”,以此作为“母⽅案”。
检验母⽅案是否满⾜所有约束条件,如果满⾜即为问题的最优解,否则进⼊第三步。
第三步:分枝与择优你可曾发现,在0-1规划的标准化模型中,除了变量的0、1要求外,都在围绕⽬标函数作⽂章。
其他问题都主打约束函数,为什么这⼀次⽬标函数却成了“众⽮之的”呢?原因就在这个“隐”字。
⽬标函数承担了“安排枚举次序”的重⼤责任。
下⾯举例说明(⾮常不好意思,举⼀个笔者课本上的例⼦)。
0 前言化问题,可知最优解的目标函数一定不小于 5。
为此,在求最优解之前先增加一个约束条件,即过滤0- 1 型整数规划是整数规划的特例,其数学模型的目 条件:3x - 2x +5x !5##⊙ 标函数、约束条件与线性规划相同,不同的是其变量只能1 2 3 过滤条件的作用是:在检验一个解是否为可行解之取 0 和 1,分别表示两种截然相反的结果。
0- 1 型整数规前,先看目标函数是否不小于 5,若小于 5,则肯定不是最 划应用很广,如土木工程系统的最优工程配置问题,城建优解,其可行性无须再检验而直接被淘汰,可以大大减少规划中的居民点、给水点、加油站和商业网点的最优布局计算工作量。
问题,均可应用 0- 1 型整数规划求得最优解。
有了过滤条件,就可以列表计算。
对解集中的解逐个检0- 1 型整数规划的数学模型如下:验,先检验过滤条件,若不符合则直接淘汰该解;若符合条 目标函数:件⊙,再按①~④顺序检验每一个约束条件,当某一个约 束条件不满足时即行淘汰,其右边的约束条件再无检验 约束条件:的必要。
这样,计算工作量可大为减少。
本例中有 3 个变量,共有 23=8 个解需要检验,通过计 算求得的最优解为: .本例以 为初始可行解,通过建立过滤条1 求解 0- 1 型整数规划三种通用的方法 件,只计算了 18 次就找到了最优解,而用穷举法需要计算1.1 穷举法40 次,技术工作量大大减少了。
如在求解过程发现更好的 由于 0- 1 型整数规划的变量个数有限且取值非 0 即可行解及时更换过滤条件 ,计算工作量还可进一步减少。
1,所以不难将解的集合找出来,再检验每个解的可行性, 1.2.2 对隐枚法法 I 的评价 凡符合全部约束条件者均为可行解,通过比较目标函数 对隐枚举法 I 来说其数学模型无须转化为标准型,减的值便可找到最优解,这个解法称为穷举法。
当变量和约 少了人工处理的工作量,但它需要检验的方案较多,而且 束条件很多时,其工作量是非常大的。
0—1型整数规划问题的求解方法1、一般来说,碰到了0-1规划的问题,怎么办?枚举,比较每个解对应的目标函数值。
为什么要枚举,是把每一个解都拿出来比较。
因此,有的叫法是显枚举法?2、有显枚举法,就有隐枚举法。
如果说,显枚举法是显式的枚举法,那么隐枚举法就是隐式的枚举法。
都是枚举法,都是要把所有的解带入到目标函数进行比较,对不对?理论上是这样的,可以参考其他的讲解。
但是,其他的地方讲解似乎没有把这个讲解到位,为什么叫隐枚举法。
有一种说法是:设计一种方法,只检查0-1变量组合的一部分,就能得到问题的最优解。
3、首先,如果你不把所有的解都判断一下,我怎么知道那个解是不是最优的解呢?回顾一下LP问题的求解,发现线性规划并不需要判断所有的解,确切的说,是所有的可行解。
只需要在所有的基本可行解里面去寻找最优的解。
因此,0-1规划求解的思路也是一样,是在所有的0-1可行解里面去寻找。
这样,就需要在约束条件里面去一个一个的判断,这个0-1组合是否可行。
所以,隐枚举法的思路,还是枚举法,但是我并不是要把每个解都要进行约束条件的判断,判断他是不是可行,可以只检查所有0-1变量组合的一部分约束条件的判断,这样还是可以得到问题的最优解。
4、接着,那怎么减少约束条件的检查判断呢?设置一个过滤条件,叫做过滤约束,如果这个不满足,那么其他的约束就不用判断了。
因此,隐的意思应该在这里。
问题来了,怎么添加这个过滤约束呢?通过一种方法(试探法),找到一个可行解,然后代入目标函数,得到目标值,这个就得到了一个过滤约束。
求最大值的时候,如果一个可行解的目标值不大于这个约束,那么直接排除。
5、继续。
怎么得到这个过滤约束。
比如下面的例子:一种说法是试探法,随便试探?或者可以从某一个解开始(比如0,0,0)开始递增,直到得到一个可行解,然后就得到了这个过滤约束了,比如上面的例子,我们可以从1,0,0开始递增,先看看这个解是不是可行解。
是在可行解,因此看目标函数值是3,因此得到一个约束,3x1-2x2+5x3>=3过滤约束。
0—1型整数规划问题的求解方法0-1型整数规划问题是一类特殊的整数规划问题,其中变量只能取0或1,即变量是二进制的。
这类问题在实际应用中具有广泛的应用,如装配线平衡、员工调度、货物装载等。
求解0-1型整数规划问题可以使用多种方法,下面将介绍几种常用的方法。
1.枚举法:枚举法是最朴素的解法,它列举出了所有可能解,并通过穷举所有解的方式找到最优解。
这种方法适用于问题规模较小且没有明显的约束条件,但对于大规模问题不适用。
2.分支定界法:分支定界法是一种广泛应用于整数规划的方法。
它从原问题形成一个目标函数较小的松弛问题开始,通过分支操作将问题分解为一系列子问题,每次选择一个变量分支,并根据问题的特性设置相应的约束条件。
通过逐步分解问题,最终获得最优解。
3.动态规划法:动态规划法通过构建状态转移方程的方式,将问题分解为多个子问题,并利用子问题之间的关系求解最优解。
对于0-1型整数规划问题,可以使用动态规划来解决。
首先定义一个二维数组dp[i][j],其中dp[i][j]表示在前i个物品中选择一些物品放入背包容量为j的情况下的最大价值。
然后根据背包容量逐步求解,最后得到最优解。
4.启发式算法:启发式算法是一类基于经验和直觉的算法,通过评估当前解的优劣性来寻找最优解。
对于0-1型整数规划问题,可以使用启发式算法如遗传算法、模拟退火算法、粒子群算法等进行求解。
这些算法通过随机和逐步优化的方式,可以在较短时间内找到较好的解。
以上是常用的几种0-1型整数规划问题的求解方法,根据问题的规模、约束条件和求解的要求选择合适的方法。
在实际应用中,通常会根据问题的特性选择相应的算法,并结合数学模型和计算机编程进行求解。
0-1整数规划整数规划是线性规划的一个特殊情况,其决策变量是整数。
在0-1整数规划中,决策变量只能取0或1的整数值。
0-1整数规划是一类NP-hard问题,通常以优化问题的形式出现。
0-1整数规划在实际生活中有广泛的应用。
它可以用于资源分配、生产计划、物流运输等方面。
下面将通过一个具体的例子来说明0-1整数规划的应用:假设某公司生产两种产品A和B,分别需要使用两种原材料X和Y。
每个单位的产品A需要消耗1个单位的原材料X和3个单位的原材料Y;每个单位的产品B需要消耗2个单位的原材料X和2个单位的原材料Y。
该公司每天可以获得100个单位的原材料X和150个单位的原材料Y。
假设产品A的利润为5元,产品B的利润为8元。
问如何安排生产,使得利润最大化。
首先,我们定义决策变量:设产品A的生产数量为x,产品B 的生产数量为y,决策变量为整数。
则可以列出目标函数和约束条件。
目标函数:maximize 5x + 8y约束条件:1x + 2y ≤ 100 (原材料X的限制)3x + 2y ≤ 150 (原材料Y的限制)x,y为0或1的整数根据上述目标函数和约束条件,可以构建0-1整数规划模型。
然后,可以使用相应的算法求解该模型,确定最优的生产方案,使得利润最大化。
对于这个例子来说,通过计算可以得到最优解为x=25,y=37,即生产25个单位的产品A和37个单位的产品B时,利润最大,为325元。
总结起来,0-1整数规划是一种重要的优化工具,可以应用于各种实际问题中。
通过明确决策变量的整数限制,可以获得最优解,实现最大化或最小化的目标。
在实际应用中,需要结合具体问题的特点和约束条件,构建相应的数学模型,并运用适当的算法求解。
这样可以有效地解决实际问题,提高效率和经济效益。
0–1型整数规划的解法
解0-1 型整数规划最容易想到的方法,和一般整数规划的情形一样,就是穷举法,即检查变量取值为0 或1 的每一种组合,比较目标函数值以求得最优解,这就需要检查变量取值的2的n次方个组合。
对于变量个数n 较大(例如
n>100),这几乎是不可能的。
因此常设计一些方法,只检查变量取值的组合的一部分,就能求到问题的最优解。
这样的方法称为隐枚举法(implicit enumeration ),分枝定界法也是一种隐枚举法。
当然,对有些问题隐枚举法并不适用,所以有时穷举法还是必要的。
下面举例说明一种解0-1 型整数规划的隐枚举法。
求解思路及改进措施:
(i )先试探性求一个可行解,易看出满足约束条件,故为一
个可行解,且z=3。
(ii )因为是求极大值问题,故求最优解时,凡是目标值z<3 的解不必检验是否满足约束条件即可删除,因它肯定不是最优解,于是应增加一个约束条件(目标值下界).
(iii )改进过滤条件。
(iv )由于对每个组合首先计算目标值以验证过滤条件,故应优先计算目标值z 大的组合,这样可提前抬高过滤门槛,以减少计算量。
(5)解 0—1 规划的隐枚举法解 0—1 规划的隐枚举法有其独特的工作程序,具体过程如下。
a.模型转化为求极小的问题b.变量替换。
极小问题模型的目标函数中所有变量系数为负的0—1变量,可利用变量替换x k=1-x'k (x'k是引入的新的0—1变量),将目标函数中所有变量系数化为正数。
c.目标函数中变量按系数大小排列,约束条件中变量排列顺序也相应调整。
d.按目标函数值由小到大的顺序依次排列可能的解,并予以可行性检验。
e.发现求极小问题的最优解并停止。
f.转化为原问题的最优解。
例4 用隐枚举法求解下列0—1规划问题Max Z=3x1+2x2-5x3-2x4+3x5x+x2+x3+2x4 +x5≤417x1 +3x3-4x4+3x5≤811x1-6x2 +3x4 +5x5≥3x=0, 1, j=1, 2, 3, 4, 5.j解:①转化为求极小的问题Min Z=-3x1-2x2+5x3+2x4-3x5-x1 -x2-x3-2x4 -x5≥-4-7x1 -3x3+4x4-3x5≥-811x1 -6x2 +3x4 +5x5≥3x=0, 1, j=1, 2, 3, 4, 5.j②令x'1=1-x1, x'2=1-x2, x'5=1-x5, 带入极小问题模型中,得Min Z=3 x'1+2 x'2+5x3+2x4+3 x'5-8x'+x'2-x3-2x4 +x'5≥-117x'1 -3x3+4x4+3x'5≥2-11x'1 +6x'2 +3x4-5x'5≥-7x=0, 1, j= 3, 4; x'j =0, 1, j= 1, 2, 5.j③目标函数中变量按系数大小排列,约束条件中变量排列顺序也相应调整,得Min Z=5x3+3 x'1+3 x'5+2 x'2+2x4-8-x3+x'1 +x'5+x'2-2x4 ≥-1 ①-3x3+ 7x'1 +3x'5 +4x4≥2②-11x'1 -5x'5+6x'2 +3x4≥-7 ③x=0, 1, j= 3, 4; x'j =0, 1, j= 1, 2, 5.j④按目标函数值由小到大的顺序排列可能的解,并予以可行性检验。
0-1规划中并行隐枚举法的实现方式曾艳【摘要】0-1规划中,当变量较大时,状态数过多、时间耗费较大,隐枚举法是目前解决0-1规划问题最有效的方法,并行计算的特点是快速解决大型且复杂的计算问题.结合并行计算和隐枚举法来解决这个问题,并且对隐枚举法做了一定的改进,使得在串行计算中难以实现的问题在并行计算机上得到了解决,并用实例验证了算法的可行性和优越性.【期刊名称】《计算机应用与软件》【年(卷),期】2010(027)007【总页数】3页(P268-269,289)【关键词】0-1规划;并行计算;隐枚举法【作者】曾艳【作者单位】华中师范大学计算机科学与技术系,湖北,武汉,430079【正文语种】中文0 引言对于有 n个变量的 0-1规划问题,由于每个变量只取 0、1两个值,故n个变量所有可能的 0-1组合数有 2n个。
在现实生活中,很多问题都可以转换成 0-1规划问题,比如席位分配问题、排序问题、资源配置问题等,而对于 0-1规划的问题,目前最普遍的解法就是枚举法,即检查变量取值为 0或 1的每一种组合,比较目标函数值以求得最优解。
在此基础上人们采用了隐枚举法、遗传算法、动态规划法等方法,虽然在一定程度上加快了求解速度、缩短了问题的解决时间,但这些方法都是基于串行计算来实现的,只能当变量较小时来达到优化的目的。
但是当n较大时,比如:当n=64时,264≈1.845×1019,以每秒解决 107种状态的速度,则需要5.85×104年,用串行计算根本是不可能的。
并行计算能同时使用多种计算资源解决计算问题,能快速解决大型且复杂的计算问题,是当前世界上主要用于解决大规模、高精度问题的方法,它能解决很多串行计算不能解决的问题。
目前国内外对用并行算法来解决0-1规划问题的研究并不多,基于 0-1规划问题在生活中的重要性以及并行算法的高效性,本文对用并行隐枚举法来解决 0-1规划的问题进行了一定的探讨。
例析0-1整数规划及隐枚举法的应用
自主招生近年来成为各大高校又一招纳人才的举措,面试在自主招生中扮演着越来越重要的角色,考生面试的成绩不容忽视。
因此如何确定面试专家的分配方案,使录取工作真正公平合理的进行,是各大高校积极考虑的问题。
本文通过采用0-1整数规划及隐枚举法建立相关模型,较好地解决了这一问题。
1 预备知识简介
1.1 线性规划[1]
在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济效益的问题。
此类问题构成了运筹学的一个重要分支——数学规划,而线性规划则是数学规划的一个重要分支。
若在线性规划模型中,变量限制为整数,则为整数线性规划。
0-1整数规划是整数规划中的特殊情形,它的变量仅取0或1。
合理地引用0-1规划能够容易且高效率地求解相关问题。
1.2 隐枚举法[2]
隐枚举法是Balas E在1965年提出的,是求解0-1规划问题的一种有效方法。
它只检查一部分变量组合,在这过程中根据已有信息自动舍弃许多不可能成为最优解的组合,求得最优解,从而大大减少了工作量。
隐枚举法只需比较目标函数在小部分组合点上的取值大小,就能求得最优解和最优值。
2 问题描述与建模
2.1 问题描述
某高校采用通过专家面试的方式进行自主招生,经过初选合格进入面试的考生有N人,拟聘请老师M人进行面试。
每位学生要分别接收“面试组”每位老师的单独面试,每个面试组由4名老师组成。
已知要求面试不同考生的“面试组”成员不能完全相同。
试求在考生数N已知的条件下,聘请老师数M至少应为多大,才能做到任两位学生的“面试组”都没有两位面试老师相同。
2.2 数学建模
该问题是一个单目标规划问题,解决的是满足一定约束条件要求,计算在给出一定的学生人数下,所需要教师的最少人数。
根据实际情况分析,一般面试学生的个数要远大于教师的个数。
因为教师人数较少,容易进行分组(即按照约束条件将教师每4人分成一组),满足约束条件的情况下,所能组合的最大组数目即可面试学生的最大人数[3~4]。
因此,我们改变优化变量,当教师数目M一定的情况下最多可面试的学生个数,即求max N。
(1)设代表第j个老师面试第i个学生,表示第j个老师不面试第i个学生,表示第j个老师面试第i个学生,用数学语言表达即:
(为0-1变量)。
(2)每个学生只能接受四名老师面试,转化成数学表达式为:。
(3)任意两位学生的“面试组”不能有两个老师相同的情形,转化为如下数学表达式:≤1;,其中k表示第k个老师,、是0-1变量[5]。
通过以上3步的模型准备,可建立如下单目标规划模型:
由于是未知数,所以没有办法使用常规的优化算法求出具体的值。
这里采用近似求解法,即运用隐枚举法求得变量取值为0、1的最优组合,从而得到最优的分配方案[6~7]。
即通过列举一定的值,求出相应的最优的值,然后通过曲线拟合的方法求出和的近似表达式,从而求出考生数为时,至少需要聘请的老师数。
列举值,求相应的最优的值的算法由以下步骤实现:
第一步:首先对M位教师每四人一组进行组合,求出所有组合项为,把所有项按递增方式排列成序列;
第二步:从第一项开始,逐次扫描后面所有项,如果后面项同第一项有两个或超过两个数字相同的就将其删除,这样形成了一个新的序列;
第三步:从的第二项开始,逐次扫描后面所有项,如果后面项同第二项有两个或超过两个数字相同的就将其删除,这样形成了一个新的序列,然后从的第三项开始,逐次扫描后面所有项,如果后面项同第三项有超过两个数字相同的就将其删除,这样形成了一个新的序列,依次类推,直到搜索完成。
最后,通过编程实现该算法,将得到的数据进行拟合,即可得到和的近似表达式。
3 结语
通过0-1规划、计算机搜索、隐枚举法的综合运用,不仅能很好地解答学生面试的问题,而且随着聘用面试老师M和参加面试学生N的值的增大,该方法能够得到较大范围的推广与应用。
在实际操作中,需要充分考虑面试中其他因素来重新建模,并根据实际中的具体情况设计相应的面试流程,从而可以较好地实现面试工作的均衡性和公平性。
参考文献
[1] 赵静,但琦.数学建模与数学实验(第3版)[M].北京:高等教育出版社,2003,6.
[2] 陈理荣.数学建模导论[M].北京:北京邮电大学出版社,1999.
[3] 曹华林,邵常磊,连加俊.学生面试问题[J].科技信息,2007,34:27~28.
[4] 吴值明,邹贇波,康兴挡.学生面试问题[J].数学的实践与认识,2007,37(14):138~140.。