数学建模 整数规划

一.概论
1.概念:

当数学规划中的变量被(部分或全部)限制为整数时,称为整数规划.若在线性规划中将变量限制为整数,则称为整数线性规划.目前多数流行的求解整数规划的方法都只适用于整数线性规划,因而如果不加说明,整数规划一般指整数线性规划

2.分类:

①变量全部限制为整数时,称为纯(完全)整数规划
②变量部分限制为整数时,称为混合整数规划

3.求解方法:

①分枝定界法——用于求解纯/混合整数线性规划
②割平面法——用于求解纯/混合整数线性规划
③隐枚举法——用于求解0-1型整数规划
\quad Ⅰ过滤隐枚举法
\quad Ⅱ分枝隐枚举法
④匈牙利法——用于求解指派问题
⑤蒙特卡洛法——用于求解各类规划

二.0-1型整数规划
1.概念:

0-1型整数规划是整数规划中的特殊情形,其变量 x j x_j xj仅取0或1,即 0 ≤ x j ≤ 1 x j ∈ Z 0≤x_j≤1\\x_j∈Z 0xj1xjZ这时称 x j x_j xj0-1变量二进制变量.通过在实际问题中引入0-1变量,可将某些有不同情况需要分别讨论的数学规划问题统一在1个问题中讨论

2.相互排斥的约束条件:

如果有 m m m个相互排斥的约束条件 a i 1 x 1 + a i 2 x 2 + . . . + a i n x n ≤ b i   ( i = 1 , 2... m ) a_{i1}x_1+a_{i2}x_2+...+a_{in}x_n≤b_i\,(i=1,2...m) ai1x1+ai2x2+...+ainxnbi(i=1,2...m)为保证这 m m m个约束条件只有1个起作用,引入 m m m个0-1变量 y i = { 1 , 第 i 个 约 束 起 作 用 0 , 第 i 个 约 束 不 起 作 用   ( i = 1 , 2... m ) y_i=\begin{cases}1,第i个约束起作用\\0,第i个约束不起作用\end{cases}\,(i=1,2...m) yi={1,i0,i(i=1,2...m)和1个充分大的常数 M M M,将上述 m m m个约束条件替换为下述 m + 1 m+1 m+1个约束条件 a i 1 x 1 + a i 2 x 2 + . . . + a i n x n ≤ b i + ( 1 − y i ) M   ( i = 1 , 2... m ) ( 2.1 ) y 1 + y 2 + . . . + y m = 1 ( 2.2 ) a_{i1}x_1+a_{i2}x_2+...+a_{in}x_n≤b_i+(1-y_i)M\,(i=1,2...m)\qquad(2.1)\\y_1+y_2+...+y_m=1\qquad(2.2) ai1x1+ai2x2+...+ainxnbi+(1yi)M(i=1,2...m)(2.1)y1+y2+...+ym=1(2.2)

3.关于固定费用的问题:

某工厂要生成某种产品,设有3种生产方式可供选择,记为 j = 1 , 2 , 3 j=1,2,3 j=1,2,3.令 x j x_j xj表示采用第 j j j种生产方式时的产量, c j c_j cj表示采用第 j j j种生产方式时每件产品的可变成本, k j k_j kj表示采用第 j j j种生产方式时的固定成本.问如何使总成本最小

采用第 j j j种生产方式时的总成本为 P j = { k j + c j x j   ( x j > 0 ) 0      ( x j = 0 ) P_j=\begin{cases}k_j+c_jx_j\,(x_j>0)\\0\qquad\quad\:\:\:\,(x_j=0)\end{cases} Pj={kj+cjxj(xj>0)0(xj=0)为了在统一在1个问题中进行讨论,现引入0-1变量 y j y_j yj,令 y j = { 1 , x j > 0 0 , x j = 0 y_j=\begin{cases}1,x_j>0\\0,x_j=0\end{cases} yj={1,xj>00,xj=0则上述问题的数学模型为(此处忽略了其他约束条件): m i n    z = ( k 1 y 1 + c 1 x 1 ) + ( k 2 y 2 + c 2 x 2 ) + ( k 3 y 3 + c 3 x 3 ) s . t . y j ε ≤ x j ≤ y j M   ( j = 1 , 2 , 3 ) min\,\:z=(k_1y_1+c_1x_1)+(k_2y_2+c_2x_2)+(k_3y_3+c_3x_3)\\s.t.\quad y_jε≤x_j≤y_jM\,(j=1,2,3) minz=(k1y1+c1x1)+(k2y2+c2x2)+(k3y3+c3x3)s.t.yjεxjyjM(j=1,2,3)其中 ε ε ε为充分小的正常数, M M M为充分大的正常数

4.指派问题:

分配 n n n人去做 n n n项工作,每人做且仅做1项工作.若分配第 i i i人去做第 j j j项工作,需花费 c i j c_{ij} cij的时间(矩阵 C = ( c i j ) C=(c_{ij}) C=(cij)称为指派问题的系数矩阵指派矩阵),问应如何分配工作才能使花费的总时间最少

引入0-1变量 x i j = { 1 , 第 i 人 做 第 j 项 工 作 0 , 第 i 人 不 做 第 j 项 工 作 x_{ij}=\begin{cases}1,第i人做第j项工作\\0,第i人不做第j项工作\end{cases} xij={1,ij0,ij则上述指派问题的数学模型为 m i n    ∑ i = 1 n ∑ j = 1 n c i j x i j s . t . { ∑ j = 1 n x i j = 1 ∑ i = 1 n x i j = 1 x i j = 0 或 1 min\,\:\displaystyle\sum_{i=1}^n\displaystyle\sum_{j=1}^nc_{ij}x_{ij}\\s.t.\begin{cases}\displaystyle\sum_{j=1}^nx_{ij}=1\\\displaystyle\sum_{i=1}^nx_{ij}=1\\x_{ij}=0或1\end{cases} mini=1nj=1ncijxijs.t.j=1nxij=1i=1nxij=1xij=01指派问题的求解可使用匈牙利算法/拍卖算法等算法

三.蒙特卡洛法
1.概念:

蒙特卡洛法又称计算机随机模拟方法,是基于对大量事件的统计结果来实现一些确定性问题的计算的方法.要使用蒙特卡洛法就必须使用计算机生成相关分布的随机数

2.求不规则图形的面积:

y = x 2 , y = 12 − x , x y=x^2,y=12-x,x y=x2,y=12x,x轴围成的图形的近似面积

思路:在矩形区域 [ 0 , 12 ] × [ 0 , 9 ] [0,12]×[0,9] [0,12]×[0,9]上产生服从均匀分布的 1 0 7 10^7 107个随机点,统计随机点落在指定图形中的频率,该图形上的面积近似为上述矩形的面积乘以频率.计算代码如下:

>> x=unifrnd(0,12,[1,10000000]);
>> y=unifrnd(0,9,[1,10000000]);
>> pinshu=sum(y<x.^2&x<=3)+sum(y<12-x&x>=3);
>> area_appr=12*9*pinshu/10^7;
>> area_appr

area_appr =

   49.5026

3.替代穷举法:

在自变量的维数和取值范围都很大时,使用穷举法求出整数规划问题的最优解是不现实的.但是应用概率理论可证明,在一顶计算量的情况下,用蒙特卡洛法可用得到满意的结果.如求解下述问题: m a x    z = x 1 2 + x 2 2 + 3 x 3 2 + 4 x 4 2 + 2 x 5 2 − 8 x 1 − 2 x 2 − 3 x 3 − x 4 − 2 x 5 s . t . { 0 ≤ x i ≤ 99   ( i = 1 , 2 , 3 , 4 , 5 ) x 1 + x 2 + x 3 + x 4 + x 5 ≤ 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 max\,\:z=x_1^2+x_2^2+3x_3^2+4x_4^2+2x_5^2-8x_1-2x_2-3x_3-x_4-2x_5\\s.t.\begin{cases}0≤x_i≤99\,(i=1,2,3,4,5)\\x_1+x_2+x_3+x_4+x_5≤400\\x_1+2x_2+2x_3+x_4+6x_5≤800\\2x_1+x_2+6x_3≤200\\x_3+x_4+5x_5≤200\end{cases} maxz=x12+x22+3x32+4x42+2x528x12x23x3x42x5s.t.0xi99(i=1,2,3,4,5)x1+x2+x3+x4+x5400x1+2x2+2x3+x4+6x58002x1+x2+6x3200x3+x4+5x5200使用穷举法计算全部 1 0 10 10^{10} 1010个点的计算量极大,但应用蒙特卡洛法来计算 1 0 6 10^6 106个随机点是可行且可信的.计算代码如下:

#MonteCarlo.m中:
function [f,g]=MonteCarlo(x);
f=x(1)^2+x(2)^2+3*x(3)^2+4*x(4)^2+2*x(5)^2-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];
end

#命令行窗口中:
>> p0=0;
>> for i=1:10^6
x=randi([0,99],1,5);
[f,g]=MonteCarlo(x);
if all(g<=0)
if p0<f
x0=x;
p0=f;
end
end
end
>> x0

x0 =

    28    96     1    99    19

>> p0

p0 =

       49373

四.整数线性规划问题的计算机求解

使用Lingo等专用软件比较方便,但也可使用MATLAB中的intlinprog()求解.使用MATLAB求解的问题在于需要把多维决策变量转换为1维决策变量,转换后,约束条件常很难写出;使用Lingo求解则不需要

使用MATLAB求解的标准形式为 m i n x f T x s . t . { x ( i n t c o n ) ∈ Z A x ≤ b A e q ⋅ x = b e q l b ≤ x ≤ u b \mathop{min}\limits_{x}f^Tx\\s.t.\begin{cases}x(intcon)∈Z\\Ax≤b\\Aeq·x=beq\\lb≤x≤ub\end{cases} xminfTxs.t.x(intcon)ZAxbAeqx=beqlbxub其中 f , x , i n t c o n , b , b e q , l b , u b f,x,intcon,b,beq,lb,ub f,x,intcon,b,beq,lb,ub为列向量. A , A e q A,Aeq A,Aeq为矩阵.求解命令为 [ x , f v a l ] = i n t l i n p r o g ( f , i n t c o n , A , b [ , A e q , b e q , l b , u b , x 0 , o p t i o n s ] ) [x,fval]=intlinprog(f,intcon,A,b[,Aeq,beq,lb,ub,x0,options]) [x,fval]=intlinprog(f,intcon,A,b[,Aeq,beq,lb,ub,x0,options])

求解下述指派问题 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=\left[\begin{matrix}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\end{matrix}\right] C=3868987441022226109739375510计算代码为:

>> 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=intlinprog(c,intcon,[],[],a,b,lb,ub);
LP:                Optimal objective value is 21.000000.                                            


Optimal solution found.

Intlinprog stopped at the root node because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 0 (the default
value). The intcon variables are integer within tolerance, options.IntegerTolerance = 1e-05 (the default value).

>> x=reshape(x,[5,5]);
>> x

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

求解下述混合整数规划问题 m i n    z = − 3 x 1 − 2 x 2 − x 3 s . t . { x 1 + x 2 + x 3 ≤ 7 4 x 1 + 2 x 2 + x 3 = 12 x 1 , x 2 ≥ 0 x 3 = 0 或 1 min\,\:z=-3x_1-2x_2-x_3\\s.t.\begin{cases}x_1+x_2+x_3≤7\\4x_1+2x_2+x_3=12\\x_1,x_2≥0\\x_3=0或1\end{cases} minz=3x12x2x3s.t.x1+x2+x374x1+2x2+x3=12x1,x20x3=01

>> 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=intlinprog(f,intcon,a,b,aeq,beq,lb,ub);
LP:                Optimal objective value is -12.000000.                                           


Optimal solution found.

Intlinprog stopped at the root node because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 0 (the default
value). The intcon variables are integer within tolerance, options.IntegerTolerance = 1e-05 (the default value).

>> x

x =

         0
    5.5000
    1.0000

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值