数学建模之线性规划问题与LINGO软件的使用

线性规划(Linear programming,简称LP),是运筹学中研究较早、发展较快、应用广泛、方法较成熟的一个重要分支,它是辅助人们进行科学管理的一种数学方法。研究线性约束条件下线性目标函数的极值问题的数学理论和方法。英文缩写LP。

LINGO基本用法

不会LINGO的建议先看完这个再往下看

我们数学建模一般就是MATLAB,LINGO可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解等,功能十分强大,是求解优化模型的最佳选择。所以我们在做规划问题时用LINGO。

基础知识

★ 程序以“MAX”(或“MIN”)开始,表示目标最大化(或最小化)问题,后面直接写出目标函数表达式和约束表达式;
★ 目标函数和约束之间用“ST”分开;(或用“s.t.”,“sunject to”)
★ 程序以“END”结束( “END” 也可以省略)。
★ 系数与变量之间的乘号必须省略
★ 系统对目标函数所在行自动生成行名“1)”,对约束默认的行名分别是“2)” “3)”…,用户也可以自己输入行名;行名放在对应的约束之前。
★ 书写相当灵活,不必对齐,不区分字符的大小写。
★ 默认所有的变量都是非负的, 所以不必输入非负约束。
★ 约束条件中的“<=” 及“>=”可分别用“<” 及“>”代替。
★ 一行中感叹号“!”后面的文字为是注释语句,可增强程序的可读性,不参与模型的建立。
★ LINGO默认x,y变量大于0,若有其他条件必须要写。
例如
求解
在这里插入图片描述
程序

max   2x+3y
st    4x+3y<=10
       3x+5y<12
end

运行结果
在这里插入图片描述
具体结果的含义我们用下面的例题具体来说。

例1 加工奶制品的生产计划

问题引出:

对牛奶制品我们现有两种生产方式:

  1. 生产A产品:一桶牛奶,加工12小时,可生产3kgA,获利24元/kg。
  2. 生产B产品:一桶牛奶,加工8小时,可生产4kgA,获利16元/kg。
    在这里插入图片描述

条件:共有50桶牛奶,480小时,由于生产水平不足最多只能加工100kgA。

要求制订生产计划,使每天获利最大

  1. 35元可买到1桶牛奶,买吗?若买,每天最多买多少?
  2. 可聘用临时工人,付出的工资最多是每小时几元?
  3. A的获利增加到 30元/kg,应否改变生产计划?

模型建立

设x桶牛奶用于生产A,y桶生产B。
则:

  • 获利:
    • A: 24 3 x 24*3*x
    • B: 16 4 y 16*4*y
    • 总: m a x z = 72 x + 64 y max \quad z=72*x+64*y
  • 约束条件:
    • 原料: x + y 50 x+y\leq50
    • 时间: 12 x + 8 y 480 12*x+8*y\leq480
    • 加工能力: 3 x 100 3*x\leq100
    • 非负: x , y 0 x, y\geq0

模型分析

  • 比例性:
    • x,y对目标函数的“贡献”与x,y的取值成正比
    • x,y对约束条件的“贡献”与x,y的取值成正比
  • 可加性:
    • x,y对目标函数的“贡献”与x,y的取值无关
    • x,y对约束条件的“贡献”与x,y的取值无关

模型求解

这里x1为x,x2为y
在这里插入图片描述
在这里插入图片描述
求解可以用MATLAB,当然这里我们用LONGO,因为LINGO比MATLAB好用

例题解

在这里插入图片描述

model:
max = 72*x1+64*x2;
[milk]   x1 + x2<50;
[time] 	 12*x1+8*x2<480;
[cpct]   3*x1<100;
end 

最终结果就是20桶用于生产A,30桶用于生产B,最优解为3360元
在这里插入图片描述
敏感度分析
打开方式:

  1. 把这个Dual Computation设置成prices & rangees
    在这里插入图片描述
  2. 从这里打开command窗口,或者ctrl +1 打开
    在这里插入图片描述
  3. 窗口中输入range回车
    在这里插入图片描述
    就出现了这个。
    名词解释:
    Objective Coefficient Ranges:目标系数范围
    Coefficient:系数
    Increase:增加
    Decrease:下降
    这部分就是系数可以在加上可以增加的,减去可以减少,得到的两个值,在这两个值的范围内对结果无影响。
    下面那部分类似。
    在这里插入图片描述

问题解析

  1. 35元可买到1桶牛奶,要买吗?
    • 要买,一桶利润增长48,35一桶还能多赚13
  2. 聘用临时工人付出的工资最多每小时几元?
    • 最多2块
  3. A的获利增加到 30元/kg,应否改变生产计划?
  • 在这里插入图片描述
  • 分析可知X1的变化范围是(64,96),原来是24元每千克每桶获利72元,现在是30元/kg每桶获利90元。但是就是在(64,96)之间,所以不需要改变计划。
  1. 35元可买到1桶牛奶, 每天最多买多少?
    在这里插入图片描述

例2 奶制品的生产销售计划 在例1基础上深加工

问题引出:

对牛奶制品我们现有两种生产方式:

  1. 生产A产品:一桶牛奶,加工12小时,可生产3kgA,获利24元/kg;如果对A奶制品再加工,每一千克需要花费2小时,三块钱可以加工成0.8kg产品C,并且获利44元/kg
  2. 生产B产品:一桶牛奶,加工8小时,可生产4kgA,获利16元/kg;如果对B奶制品再加工,每一千克需要花费2小时,三块钱可以加工成0.75kg产品C,并且获利32元/kg

在这里插入图片描述
条件:共有50桶牛奶,480小时,由于生产水平不足最多只能加工100kgA。

要求制订生产计划,使每天获利最大

  1. 30元可增加1桶牛奶,3元可增加1h时间,应否投资?现投资150元,可赚回多少?
  2. C,D的获利经常有10%的波动,对计划有无影响?
  3. 每天销售10kgA的合同必须满足,对利润有什么影响?

模型建立

设出售x1kgA, x2B, x3C , x4D,其中x5kgA加工成C,x6kgB加工成D
则:

  • 获利:在这里插入图片描述
  • 约束条件:
    • 原料:在这里插入图片描述
    • 时间:
      在这里插入图片描述
    • 加工能力:
      在这里插入图片描述
    • 附加约束:
      在这里插入图片描述
    • 非负约束 : x 1.... x 6 0 x1....x6\geq0

LINGO程序

model:
max = 24*x1+16*x2+44*x3+32*x4-3*x5-3*x6;
[milk]   (x1+x5)/3+(x2+x6)/4<50;
[time] 4*(x1+x5)+2*(x2+x6)+2*x5+2*x6<480;
[cpct]   x1+x5<100;
x3=0.8*x5;
x4=0.75*x6;
end 

运行结果
在这里插入图片描述

结果分析

  • 用于生产A的一共有x1+x5=24kg,所以生产A耗费了24/3=8桶牛奶。
  • 用于生产B的共有x2+x6=168kg,所以消耗了168/4=42桶牛奶。
  • x1的值为0,所以A产品一点没出售,生产后都接着用于生产C产品了,可以看到C产品是19.2kg(24*0.8=19.2)
  • x2共168kg,x4是0,也就是B产品没有进行再加工生成D
  • 利润3460.8(元)

问题解析

  1. 30元可增加1桶牛奶,3元可增加1h时间,应否投资?现投资150元,可赚回多少?
    • 看Dual Price,每增加一桶牛奶可以多赚37.9元,所以可买5桶,多赚189.5元
    • 每增加1小时,多赚3.26元,增加50小时可以多赚113元
    • 所以可以买成牛奶,比增加时间赚的多
  2. C,D的获利有10%的波动,对计划有无影响
    • C获利下降10%也就是x3*0.1=4.4,超出X3 系数允许范围3.16666
    • D获利上升10%,也就是x4*0.1=3.2.超出X4 系数允许范围2.02667
    • 所以有影响
      在这里插入图片描述
  3. 每天销售10kgA的合同必须满足,对利润有什么影响?
    看到结果分析,Reduced Cost为差额成本,也就是每增加1单位x1会减少1.68元,现在固定要销售10kgA,所以利润减少16.8元

在这里插入图片描述

小结:

  • 由于产品利润、加工时间等均为常数,可建立线性规划模型.
  • 线性规划模型的三要素:决策变量、目标函数、约束条件.
  • 建模时尽可能利用原始的数据信息,把尽量多的计算留给计算机去做(分析例2的建模).
  • 用LINGO求解,输出丰富,利用影子价格和灵敏性分析可对结果做进一步研究.

猜你喜欢

转载自blog.csdn.net/weixin_45755332/article/details/107311254
今日推荐