算法2—整数规划

本文详细介绍了整数规划的概念、分类,重点探讨了分枝定界法和割平面法的原理、实例求解步骤,以及0-1整数规划的应用,包括指派问题和固定费用问题。通过蒙特卡洛法的对比,突出了这两种求解方法在处理整数约束问题中的效率和特点。
摘要由CSDN通过智能技术生成

1. 概论

1.1整数规划的定义

规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。(目前求解整数规划方法只是适用整数线性规划)

1.2整数规划的分类

如不加特殊说明,一般指整数线性规划。对于整数线性规划模型大致可分为两类:

1.变量全限制为整数时,称纯(完全)整数规划。

2.变量部分限制为整数
,称混合整数规划。

1.3整数规划的特点

(1)原线性规划有最优解,当自变量限制为整数后,其整数规划会出现:
①原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。
②整数规划无可行解。
在这里插入图片描述
③有可行解(当然就存在最优解),但最优解值变差。
在这里插入图片描述
(2) 整数规划最优解不能按照实数最优解简单取整而获得。

1.4求解方法的分类

(1)分枝定界法—可求纯或混合整数线性规划。

(2)割平面法—可求纯或混合整数线性规划。

(3)隐枚举法—求解“0-1”整数规划:

过滤隐枚举法

②分枝隐枚举法。

(4)匈牙利法—解决指派问题(“0-1”规划特殊情形)。

(5)蒙特卡洛法—求解各种类型规划。

1.5整数线性规划模型

整数线性规划模型为:
在这里插入图片描述

2. 分枝定界法

2.1定义

对有约束条件的最优化问题(其可行解为有限)的所有可行解空间恰当地进行系统搜索,这就是分枝与定界内容。分支定界法把全部可行解空间反复地分割为越来越小的子集,称为分枝;并且对每个子集内的解集计算一个目标上界,称为定界。每次分枝后,对于超出已知可行解集目标值的那些子集不再进一步分枝,就可以删减很多子集,这称为剪枝。

2.2解法过程

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

2.3例题求解
  • 求解整数化规划
    在这里插入图片描述
    (1)先不考虑整数规划,求解线性规划B得出最优解:

当x1 = 4.8092, x2 = 1.8168,则最优解 z = 355.8779

所以得出来是问题 A 的最优目标函数值 z* 的上界,记作 z 1。而x1 = 0, x2 = 0 显然是问题 A 的一个整数可行解,这时 z = 0 ,是 z* 的一个下界,记作 z2 , 即0 ≤ z* ≤ 356。

(2) 上述求出来的x1, x2 当前均为非整数,故不满足整数要求,任选一个进行分枝。设选 x1进行分枝,把可行集分成 2 个子集:x1 ≤ [4.8092] = 4, x1 ≥ [4.8092] +1 = 5
因为 4 与 5 之间无整数,故这两个子集的整数解必与原可行集合整数解一致。这一步称为分枝。这两个子集的规划及求解如下:

  • 根据求解出来的最优值来确定z* 的界域

(3)根据求解出来x1的值,由问题B1继续分枝可得
根据求解出来的最优值来确定z* 的界域

  • 由于x1=4和x2=2是整数解,所以z是B1的可行解,故z11是z*的下界。

(4)由问题B2继续分枝,并将不满足的子集删除
在这里插入图片描述

  • 由于其它子集都不满足,只有B11满足,则最优解就是B11
2.4求解步骤

从以上解题过程可得用分枝定界法求解整数规划(最大化)问题的步骤为:
开始,将要求解的整数规划问题称为问题 A ,将与它相应的线性规划问题称为问题 B 。

(i)解问题 B 可能得到以下情况之一:

(a) B 没有可行解,这时 A 也没有可行解,则停止.

(b) B 有最优解,并符合问题 A 的整数条件, B 的最优解即为 A 的最优解,则停止。

(c) B 有最优解,但不符合问题 A 的整数条件,记它的目标函数值为 z1。

(ii)用观察法找问题 A 的一个整数可行解,一般可取 xj = 0, j = 1,L,n ,试探,求得其目标函数值,并记作 z2 。以 z* 表示问题 A 的最优目标函数值;这时有 z2 ≤ z* ≤ z1进行迭代。

第一步:对A分枝,在 B 的最优解中任选一个不符合整数条件的变量 x j ,其值为bj , 以[bj] 表示小于bj 的最大整数。构造两个约束条件xj ≤ [bj] 和 xj ≥ [bj] +1将这两个约束条件,分别加入问题 B ,求两个后继规划问题 B1 和 B2 。

定界,以每个后继问题为一分枝标明求解的结果,与其它问题的解的结果中,找出最优目标函数值最大者作为新的上界 z1。从已符合整数条件的各分支中,找出目标函数值为最大者作为新的下界 z2,若无作用 z2不变。

第二步:比较与剪枝,各分枝的最优目标函数中若有小于 z1 者,则剪掉这枝,即删除不满足的子集。若大于 z1 ,且不符合整数条件,则重复第一步骤。一直到最后得到z* = z1 为止。得最优整数解

3.割平面法

割平面法的基本思路是先求解普通线性规划问题的最优解,再对非整数解添加约束条件使可行域缩小,如此反复求解添加了约束条件的普通线性规划问题,直到得到整数解。

在先不考虑整数约束条件,直接求解松弛问题的最优解,如果满足整数条件就结束了,如果不满足整数条件,就在此非整数解的基础上增加新的约束条件重新求解。这个新增加的约束条件称为割平面,对松弛问题的可行域割一刀,割去松弛问题的部分非整数解。经过有限次的反复切割,必定可在缩小的可行域的一个整数极点上达到整数规划问题的最优解 。

割平面法的计算量比较小,但对问题的结构及求解的要求较高,算法比较复杂。割平面法

  • 1.松弛变量
    不等式约束相对于等式约束来说越说条件更多,有时候不好解决问题
    比如x1+x2<=10
    可以写为x1+x2+x3=10
    只需要x3>=0
    则x3被称为松弛变量

  • 2.剩余变量
    x1+x2>=10
    可以写为x1+x2-x3=10
    x3<=0
    则x3被称为剩余变量

4. 0-1型整数规划

0 −1型整数规划是整数规划中的特殊情形,它的变量 x j 仅取值 0 或 1。这时 x j 称 为0 −1变量,或称二进制变量。 x j 仅取值 0 或 1 这个条件可由下述约束条件:0 ≤ xj ≤ 1,整数。

4.1相互排斥的约束条件

若有两个相互排斥的约束条件为:5x1 + 4x2 ≤ 24 或 7x1 + 3x2 ≤ 45。

为了统一在一个问题中,引入0 −1变量 y ,则上述约束条件可改写为:

在这里插入图片描述
式中:M为充分大的数

若把相互排斥的约束条件改为普通约束条件,就不需要引入M:
在这里插入图片描述
改写为:
在这里插入图片描述

  • 若有 m 个互相排斥的约束条件:
    在这里插入图片描述
    为了保证这 m 个约束条件只有一个起作用,我们引入 m 个0 −1变量 yi(i = 1,2…m)1代表第i个约束条件起作用反之不起作用,引入一个充分大的常数 M ,而下面这一组m +1个约束条件
    在这里插入图片描述
  • 由于m个yi中只有一个能取1,设yi* = 1,所以就只有i = i*的约束条件才起作用。
4.2关于固定费用的问题(Fixed Cost Problem)

在讨论线性规划时,有些问题是要求使成本为最小。那时总设固定成本为常数,并在线性规划的模型中不必明显列出。但有些固定费用(固定成本)的问题不能用一般线性规划来描述,但可改变为混合整数规划来解决。

  • 例题
    某工厂为了生产某种产品,有几种不同的生产方式可供选择,如选定的生产方式投资高(选购自动化程度高的设备),由于产量大,因而分配到每件产品的变动成本就降低;反之,如选定的生产方式投资低,将来分配到每件产品的变动成本可能增加。
    所以必须全面考虑。今设有三种方式可供选择:
    令x j 表示采用第 j 种方式时的产量;
    cj 表示采用第 j 种方式时每件产品的变动成本;
    k j 表示采用第 j 种方式时的固定成本。
    各种生产方式的总成本分别为:
    在这里插入图片描述
    引入0 −1变量 y j ,令:
    在这里插入图片描述
    目标函数为:
    在这里插入图片描述
    由引入0-1变量中可表示3个线性约束条件:
    在这里插入图片描述
    其中ε 是一个充分小的正常数,M 是个充分大的正常数。
  • 当 x j > 0时 y j必须为 1;当 x j = 0时只有 y j 为 0 时才有意义,所以上述约束条件完全可以代替引入0-1变量。
4.3指派问题的数学模型
  • 例题
    拟分配n人去做n项工作,每人做且仅做一项工作,若分配第i人去做j项工作,需要花费c(ij)单位时间,求如何分配工作使工人花费时间最少?
    设矩阵C = c(ij),C称为指派问题的系数矩阵。
    引入0-1变量,若x(ij) = 1表示第i个人做第j项工作。
    数学模型:
    在这里插入图片描述

5. 蒙特卡洛法(随机取样法)

蒙特卡洛方法也称为计算机随机模拟方法,它是基于对大量事件的统计结果来实现一些确定性问题的计算。

  • 例题
    在这里插入图片描述
    如果用显枚举法试探,共需计算(100)5 = 1010 个点,其计算量非常之大。然而应用蒙特卡洛去随机计算106 个点,便可找到满意解,那么这种方法的可信度究竟怎样呢?
    下面就分析随机取样采集106 个点计算时,应用概率理论来估计一下可信度。
    不失一般性,假定一个整数规划的最优点不是孤立的奇点。
    假设目标函数落在高值区的概率分别为 0.01,0.00001,则当计算106 个点后,有 任一个点能落在高值区的概率分别为
    1− 0.991000000 ≈ 0.99L99(100多位);
    1− 0.999991000000 ≈ 0.999954602。
% 先编写M文件mengte定义目标函数 f 和约束向量函数 g
function [f,g]=mengte(x);
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)-...
x(4)-2*x(5);
g=[sum(x)-400
x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800
2*x(1)+x(2)+6*x(3)-200
x(3)+x(4)+5*x(5)-200];

% 编写M文件main如下求问题的解
rand('state',sum(clock));  % 初始化随机数发生器
p0=0;
tic % 计时开始
for i=1:10^6
    x=randi([0,99],1,5); % 产生一行五列在区间[0,99]上的随机数
    [f,g]=mengte(x);
    if all(g<=0)
        if p0<=f
            x0=x;p0=f; % 记录当前较好的解
        end
    end
end
x0,p0
toc % 计时结束

输出为


x0 =

    41    96     3    99    12


p0 =

       49500

6. 整数线性规划的计算机求解

在Matlab上求解需要把多维决策变量化为一维决策变量,但是变量替换后很难把约束条件写出来。
Matlab求解混合整数线性规划的命令为:
[x,fval] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
对应数学模型为:
min f’x,
在这里插入图片描述

  • 例题1
    已知指派矩阵
    在这里插入图片描述
% 需要把二维决策变量x(ij)i,j=1,...5变成一维决策变量y(k)k=1,...,25
代码为:
clc,clear
c=[3 8 2 10 3;8 7 2 9 7;6 4 2 7 5 
 8 4 2 3 5;9 10 6 9 10]; 
c=c(:); 
a=zeros(10,25); 
intcon = 1:25;
for i=1:5 
 a(i,(i-1)*5+1:5*i)=1; 
 a(5+i,i:5:25)=1; 
end 
b=ones(10,1); 
lb = zeros(25,1);
ub = ones(25,1);
[x,y]=intlinprog(c,intcon,[],[],a,b,lb,ub); 
x=reshape(x,[5,5]),y

输出为

x =

     0     0     0     0     1
     0     0     1     0     0
     0     1     0     0     0
     0     0     0     1     0
     1     0     0     0     0


y =

    21
  • 例题2
    在这里插入图片描述

clc,clear
f = [-3;-2;-1];
intcon = 3;
a = ones(1,3); % 整数变量的地址
b = 7;
Aeq = [4,2,1];
beq = 12;
lb = zeros(3,1);
ub = [inf;inf;1]; % x(3)0-1变量
[x,z] = intlinprog(f,intcon,a,b,Aeq,beq,lb,ub)
x,z

输出为

x =

         0
    5.5000
    1.0000


z =

   -12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白只对大佬的文章感兴趣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值