一文带你学透线性规划与整数规划(更新中)

一.线性规划与单纯形法

1.一般线性规划的数学模型

max z =\sum_{i}^{n}c_{i}x_{i}

\sum_{i=1}^{n}a_i{}*x_{i}\leqslant b

x_{i}\geqslant 0

2.线性规划模型的三要素:

决策变量, 目标函数, 约束条件

3.线性规划问题的标准形式:

max z =\sum_{i}^{n}c_{i}x_{i}

\sum_{i=1}^{n}a_{i}x_{i} = b

x_{i}\geqslant 0

标准形式中

1.目标函数为求极大值

2.约束条件为全等式

3.约束条件右端的常数为非复值

4.变量为非负值

4.如何将线性规划问题化为标准形式

1.若目标函数为求极小值

 min (z) 等价为 max (-z)

2.若约束条件为不等式

在不等式左边加入松弛变量或者剩余变量

并且它们在目标函数中的系数为0

3.若约束条件右端为b<0

将不等式两端同时乘(-1)

4.若变量为无约束

x = x^{'} - x^{''}

其中x^{'},x^{''}\geq 0

5.对于变量为负数

x^{'} = -x 

x^{'} > 0

参考例题:

 5.什么时候可以用到线性/整数规划

当题中出现例如样安排最合理,如何最大化,最小化...

具体有如下几种:

1). 生产安排

目标:如何使得总利润最大,如何使得成本最小;

约束:原料、工人、时间、设备限制;

2). 销售运输

目标:如何使得运输成本最低;

约束:由产地运往不同销地的运价,产销不平衡等;

3). 投资收益

目标:总收益最大;

约束:不同资产配置下收益率不同,总资金有限;

对于整数规划,除了通常要求变量为整数外,典型的还有指派/背包等问题(决策变量有0-1变量)。

6.线性规划问题的求解

1)图解法

图解法步骤

建立直角坐标系,根据约束条件划分可行域,利用目标函数寻找最优解

最终的解可能出现的情况

无穷多最优解(目标函数直线与约束条件平行),无界解(可能是缺少了某个约束条件),无解(不存在满足约束条件的可行域)

2)单纯形法

2.1)单纯形原理

对于一个标准形式的线性规划问题

可行解:满足所有约束条件的解

可行域:可行解的集合

最优解:使目标函数取得最大值的可行解

基:记A为约束方程为m*n的矩阵(n>m),B为m*m的满秩子矩阵, 则B为该线性规划问题的一个基

基解:在约束方程中令非基变量为0,求解m*m矩阵B基变量的解X = x1,x2,...xm,将其加上非基变量的0的值,称为线性规划的基解,基解的个数不超过C_{n}^{m}

基可行解:满足非负约束条件的基解

可行基:对应于基可行解的基

凸集:若集合中的两个点,它们连线上的点依旧在这个集合中,则这个集合成为凸集

连线可表示为ax_{1}+(1-a)x_{2}

顶点:不存在x^{}使得其等于ax_{1}+(1-a)x_{2},这样的点成为顶点

2.2)单纯形法的计算步骤

1.首先将非标准型的线性规划问题转换为线性规划问题

2.列出初始单纯形表格

3.求出初始基可行解

4.最优性检验

5.换入换出变量构造新的单纯形表

6.不断重复,直到符合条件最优性

2.3)单纯形法的进一步讨论

1.大M法

2.两阶段法

3)程序求解

3.1 Matlab求解线性规划问题:

f = [-2; -3; 5];
a = [-2, 5, -1; 1, 3, 1];
b = [-10; 12];
aeq = [1, 1, 1];
beq = 7;
[x, y] = linprog(f, a, b, aeq, beq, zeros(3, 1));
x; y = -y;

Lingo代码求解线性规划问题:

例一:

max z = 72*x1 + 64*x2

    x1 +   x2 <= 50

12*x1 + 8*x2 <= 480

  3*x1           <= 100

    x1, x2 >= 0

未标准化: 

model:   
   sets: 
   var/1..2/:x;
   endsets

   max = 72*x(1)+64*x(2);
         x(1)+x(2) <= 50;
         12*x(1)+8*x(2)<=480;
         3*x(1)<=100;
   end

 标准化:(引入松弛变量)

max z = 72*x1 + 64*x2 +0*x3 +0*x4 +0*x5

    x1 +   x2 + x3 = 50

12*x1 + 8*x2 + x4 = 480

  3*x1 + x5 = 100

    x1, x2 , x3, x4, x5 >= 0

model:   
   sets: 
     var_name/1..5/:c, x;
     const_name/1..3/: b;
     matrix(const_name, var_name): A;! 3*5的A;
   endsets

   max = @sum(var_name: c*x);
   @for(const_name(i):
        @sum(var_name(j): A(i,j)*x(j))=b(i));
   data:
     c = 72, 64, 0, 0, 0;
     b = 50, 480, 100;
     A = 1, 1, 1, 0, 0,
         12, 8, 0, 1, 0,
         3, 0, 0, 0, 1;
   enddata 
end

二. 整数规划的一般形式:

max z =\sum_{i}^{n}c_{i}x_{i}

\sum_{i=1}^{n}a_i{}*x_{i}\leqslant b

x_{i}为整数 

整数规划一般的求解方法:

分枝定界法——可求完全或混合整数线性规划
割平面法——可求完全或混合整数线性规划
隐枚举法——求解“0-1”整数规划
匈牙利法——解决指派问题
蒙特卡洛法——求解各种类型规划

相互排斥的变量,可以引入一个M(充分大的数)放在约束条件中,使得其两个约束条件始终成立

a_{i1}x_{1}+... +a_{in}x_{n}\leqslant b_{i} + (1 - y_{i})M

y_{1}+... y_{n} = 1

整数规划问题的求解:

lingo求解:(钢管下料问题)

model:   
   sets: 
     var_name/1..7/:c, x;
     const_name/1..3/: b;
     matrix(const_name, var_name): A;
   endsets

   max = @sum(var_name: c*x);
   @for(const_name(i):
        @sum(var_name(j): A(i,j)*x(j))=b(i));
   
   @for(var_name:@gin(x));
   data:
     c = 3, 1, 3, 3, 1, 1, 3;
     b = 50, 20, 15;
     A = 4, 3, 2, 1, 1, 0, 0,
         0, 1, 0, 2, 1, 3, 0,
         0, 0, 1, 0, 1, 0, 2;
   enddata 
end

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值