• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

数学建模学习2——整数规划

武飞扬头像
不划水的小袁
帮助1

定义

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

整数规划的分类

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

整数规划特点

(i) 原线性规划有最优解, 当自变量限制为整数后, 其整数规划解出现下述情况:
①原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。
②整数规划无可行解。

举个例子,原线性规划为:

学新通

学新通

其最优实数解为:学新通

③有可行解(当然就存在最优解),但最优解值变差。
举个例子,原线性规划为:

学新通

学新通

其最优实数解为:学新通

若限制整数得:学新通
( ii) 整数规划最优解不能按照实数最优解简单取整而获得。
1、分枝定界法—可求纯或混合整数线性规划。
2、割平面法—可求纯或混合整数线性规划。
3、隐枚举法—求解“ 0-1”整数规划:
①过滤隐枚举法;
②分枝隐枚举法。
4、匈牙利法—解决指派问题(“ 0-1”规划特殊情形)。
5、蒙特卡洛法—求解各种类型规划。

下面将简要介绍常用的几种求解整数规划的方法。

分枝定界法

        对有约束条件的最优化问题(其可行解为有限数)的所有可行解空间恰当地进行系统搜索,这就是分枝与定界内容。通常,把全部可行解空间反复地分割为越来越小的子集,称为分枝;并且对每个子集内的解集计算一个目标下界(对于最小值问题),这称为定界。 在每次分枝后, 凡是界限超出已知可行解集目标值的那些子集不再进一步分枝,这样,许多子集可不予考虑,这称剪枝。这就是分枝定界法的主要思路。

        分枝定界法可用于解纯整数或混合的整数规划问题。在本世纪六十年代初由 LandDoig 和 Dakin 等人提出的。由于这方法灵活且便于用计算机求解,所以现在它已是解整数规划的重要方法。目前已成功地应用于求解生产进度问题、旅行推销员问题、工厂选址问题、背包问题及分配问题等。

        设有最大化的整数规划问题 A ,与它相应的线性规划为问题 B ,从解问题 B 开始,若其最优解不符合 A 的整数条件,那么 B 的最优目标函数必是 A 的最优目标函数 z* 的上界,记作 z ;而 A 的任意可行解的目标函数值将是 z* 的一个下界 z 。分枝定界法就是将 B 的可行域分成子区域的方法。逐步减小 z 和增大 z ,最终求到 z* 。现用下例来说明:

学新通

学新通且为整数

 解 :( i)先不考虑整数限制,即解相应的线性规划 B ,得最优解为:x1 = 4.8092, x2 = 1.8168, z = 355.8779

        可见它不符合整数条件。这时 z 是问题 A 的最优目标函数值 z* 的上界,记作 z 。而
x1 = 0, x2 = 0 显然是问题 A 的一个整数可行解, 这时 z = 0 , 是 z* 的一个下界, 记作 z ,
即 0 ≤ z* ≤ 356 。

( ii)因为 x1, x2 当前均为非整数,故不满足整数要求,任选一个进行分枝。设选 x1
进行分枝,把可行集分成 2 个子集:x1 ≤ [4.8092] = 4 , x1 ≥ [4.8092] 1 = 5

        因为 4 与 5 之间无整数,故这两个子集的整数解必与原可行集合整数解一致。这
一步称为分枝。这两个子集的规划及求解如下:

B1:学新通

学新通

最优解为: x1 = 4.0, x2 = 2.1, z1 = 349 。
B2:学新通

学新通

最优解为: x1 = 5.0, x2 = 1.57, z1 = 341.4 。
再定界: 0 ≤ z* ≤ 349 。

( iii)对问题 B1 再进行分枝得问题 B11 和 B12 ,它们的最优解为
        B11 : x1 = 4, x2 = 2, z11 = 340

        B21 : x1 = 1.43, x 2 = 3.00, z12 = 327.14

        再定界: 340 ≤ z* ≤ 341,并将 B12 剪枝。

( iv)对问题 B2 再进行分枝得问题 B21 和 B22 ,它们的最优解为
        B21: x1 = 5.44, x 2 = 1.00, z22 = 308

        B22无可行解

        将 B21, B22 剪枝。
        于是可以断定原问题的最优解为:
        x1 = 4, x2 = 2, z* = 340
        从以上解题过程可得用分枝定界法求解整数规划(最大化)问题的步骤为:
        开始,将要求解的整数规划问题称为问题 A ,将与它相应的线性规划问题称为问题 B 。

解问题B可能得到一下情况之一:

( a) B 没有可行解,这时 A 也没有可行解,则停止.
( b) B 有最优解,并符合问题 A 的整数条件, B 的最优解即为 A 的最优解,则停止。
( c) B 有最优解,但不符合问题 A 的整数条件,记它的目标函数值为 z 。

算法流程

        第一步:分枝,在 B 的最优解中任选一个不符合整数条件的变量x j ,其值为b j ,以[bj ] 表示小于b j 的最大整数。构造两个约束条件x j ≤ [bj ] 和 x j ≥ [bj ] 1将这两个约束条件,分别加入问题 B ,求两个后继规划问题 B1 和 B2 。不考虑整数条件求解这两个后继问题。
        定界,以每个后继问题为一分枝标明求解的结果,与其它问题的解的结果中,找出
最优目标函数值最大者作为新的上界 z 。从已符合整数条件的各分支中,找出目标函数
值为最大者作为新的下界 z ,若无作用 z 不变。
        第二步:比较与剪枝,各分枝的最优目标函数中若有小于 z 者,则剪掉这枝,即
以后不再考虑了。若大于 z ,且不符合整数条件,则重复第一步骤。一直到最后得到
z = z* 为止。得最优整数解 x*j , j = 1,L , n 。

0——1型整数规划

        0 -1 型整数规划是整数规划中的特殊情形,它的变量x j 仅取值 0 或 1。这时 x j 称为 0 -1 变量,或称二进制变量。x j 仅取值 0 或 1 这个条件可由下述约束条件:0 ≤ x j ≤ 1,(整数)所代替,是和一般整数规划的约束条件形式一致的。在实际问题中,如果引入 0 -1 变量,就可以把有各种情况需要分别讨论的线性规划问题统一在一个问题中讨论了。我们先介绍引入 0 -1 变量的实际问题,再研究解法。

举个例子:某工厂为了生产某种产品,有几种不同的生产方式可供选择,如选定的生产方式投资高(选购自动化程度高的设备),由于产量大,因而分配到每件产品的变动成本就降低; 反之, 如选定的生产方式投资低, 将来分配到每件产品的变动成本可能增加。所以必须全面考虑。今设有三种方式可供选择,令

x j 表示采用第 j 种方式时的产量;
c j 表示采用第 j 种方式时每件产品的变动成本;
k j 表示采用第 j 种方式时的固定成本。
为了说明成本的特点,暂不考虑其它约束条件。采用各种生产方式的总成本分别为

学新通              学新通

在构成目标函数时,为了统一在一个问题中讨论,现引入 0 -1变量y j ,令

学新通

于是目标函数:学新通

解法(过滤隐枚举)

        解 0 -1型整数规划最容易想到的方法,和一般整数规划的情形一样,就是穷举法,即检查变量取值为 0 或 1 的每一种组合,比较目标函数值以求得最优解,这就需要检查变量取值的 2n 个组合。对于变量个数 n 较大(例如 n >100 ),这几乎是不可能的。因此常设计一些方法,只检查变量取值的组合的一部分,就能求到问题的最优解。这样的方法称为隐枚举法( Implicit Enumeration),分枝定界法也是一种隐枚举法。当然,对有些问题隐枚举法并不适用,所以有时穷举法还是必要的。

下面举例说明一种解 0 -1型整数规划的隐枚举法。
学新通

学新通

求解思路及改进措施:

( i) 先试探性求一个可行解,易看出 (x1, x2, x3) = (1,0,0) 满足约束条件,故为一个可行解,且 z = 3 。
( ii) 因为是求极大值问题,故求最优解时,凡是目标值 z < 3 的解不必检验是否满足约束条件即可删除, 因它肯定不是最优解, 于是应增加一个约束条件(目标值下界):
( iii) 改进过滤条件。
( iv) 由于对每个组合首先计算目标值以验证过滤条件, 故应优先计算目标值 z 大的组合,这样可提前抬高过滤门槛,以减少计算量。

解法(蒙特卡罗法)

        前面介绍的常用的整数规划求解方法,主要是针对线性整数规划而言,而对于非线性整数规划目前尚未有一种成熟而准确的求解方法, 因为非线性规划本身的通用有效解法尚未找到,更何况是非线性整数规划。

        然而,尽管整数规划由于限制变量为整数而增加了难度;然而又由于整数解是有限个,于是为枚举法提供了方便。当然,当自变量维数很大和取值范围很宽情况下,企图用显枚举法(即穷举法)计算出最优值是不现实的,但是应用概率理论可以证明,在一定的计算量的情况下,完全可以得出一个满意解。

例如,已知非线性整数规划为:
学新通

学新通

        如果用显枚举法试探,共需计算 (100)5 = 1010 个点,其计算量非常之大。然而应用蒙特卡洛去随机计算106 个点,便可找到满意解,那么这种方法的可信度究竟怎样呢?

matlab代码实现

  1.  
    function [f,g]=mengte(x);
  2.  
    f=x(1)^2 x(2)^2 3*x(3)^2 4*x(4)^2 2*x(5)-8*x(1)-2*x(2)-3*x(3)-...
  3.  
    x(4)-2*x(5);
  4.  
    g=[sum(x)-400
  5.  
    x(1) 2*x(2) 2*x(3) x(4) 6*x(5)-800
  6.  
    2*x(1) x(2) 6*x(3)-200
  7.  
    x(3) x(4) 5*x(5)-200];
  8.  
    (ii)编写M文件mainint.m如下求问题的解:
  9.  
    rand('state',sum(clock));
  10.  
    p0=0;
  11.  
    tic
  12.  
    for i=1:10^6
  13.  
    x=99*rand(5,1);
  14.  
    x1=floor(x);x2=ceil(x);
  15.  
    [f,g]=mengte(x1);
  16.  
    if sum(g<=0)==4
  17.  
    if p0<=f
  18.  
    x0=x1;p0=f;
  19.  
    end
  20.  
    end
  21.  
    [f,g]=mengte(x2);
  22.  
    if sum(g<=0)==4
  23.  
    if p0<=f
  24.  
    x0=x2;p0=f;
  25.  
    end
  26.  
    end
  27.  
    end
  28.  
    x0,p0
  29.  
    toc
  30.  
     
  31.  
    function [f,g]=mengte(x);
  32.  
    f=x(1)^2 x(2)^2 3*x(3)^2 4*x(4)^2 2*x(5)-8*x(1)-2*x(2)-3*x(3)-...
  33.  
    x(4)-2*x(5);
  34.  
    g=[sum(x)-400
  35.  
    x(1) 2*x(2) 2*x(3) x(4) 6*x(5)-800
  36.  
    2*x(1) x(2) 6*x(3)-200
  37.  
    x(3) x(4) 5*x(5)-200];
学新通

LINGO代码实现

  1.  
    model:
  2.  
    sets:
  3.  
    row/1..4/:b;
  4.  
    col/1..5/:c1,c2,x;
  5.  
    link(row,col):a;
  6.  
    endsets
  7.  
    data:
  8.  
    c1=1,1,3,4,2;
  9.  
    c2=-8,-2,-3,-1,-2;
  10.  
    a=1 1 1 1 1
  11.  
    1 2 2 1 6
  12.  
    2 1 6 0 0
  13.  
    model:
  14.  
    sets:
  15.  
    row/1..4/:b;
  16.  
    col/1..5/:c1,c2,x;
  17.  
    link(row,col):a;
  18.  
    endsets
  19.  
    data:
  20.  
    c1=1,1,3,4,2;
  21.  
    c2=-8,-2,-3,-1,-2;
  22.  
    a=1 1 1 1 1
  23.  
    1 2 2 1 6
  24.  
    2 1 6 0 0
学新通

这两种方式得出的结果相差几乎无异。感兴趣的小伙伴可以自行尝试。文笔不太好,以后会慢慢改进的,如果你认为以上内容对你有所帮助,不妨点个关注,感谢观看!

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggbhjb
系列文章
更多 icon
同类精品
更多 icon
继续加载