MATLAB-数学建模-求解线性规划-2-LINGO

在校学习数学建模,整理的matlab相关笔记,按照学校授课时间顺序发布相关内容,做这个的初衷是为了方便自己学习,所以有些地方以教材为主,大家不要见怪。
希望能在这里分享学习的一些知识碎片,接触时间不长,如果文章有任何错误,欢迎大家指正。
如果喜欢我的文章还请大家不吝动手给我点赞收藏关注哦,留下你来过的足迹,让我眼熟你。

目录

1.1  用MATLB优化工具箱解线性规划问题

1.2  Lingo软件包使用

1.2.1  简单编程方法

1.2.2  Lingo软件包的变量界定

上节的代码如下:


1.1  用MATLB优化工具箱解线性规划问题

1.模型: minz=cX

s.t.          AXgif.latex?%5Cleqslant

命令:    x=linprog(c,A,b)

2.            minz=cXc

s.t.          AXgif.latex?%5Cleqslantb

               Aeq*X=beq

命令:    x=linprog(c,A,b,Aeq,beq)

或           x=linprog(c,A,b,Aeq,beq,x0)

或           [x,fval]=linprog(c,A,b,Aeq,beq)

若没有不等式约束Axgif.latex?%5Cleqslantb,则令 A=[ ],B=[ ] 

3.            VLBgif.latex?%5CleqslantXgif.latex?%5CleqslantVUB 

命令:     X=linprog(c,A,b,Aeq,beq,VLB,VUB)

若没有等式约束Aeq·x=beq,则令 Aeq=[  ],beq=[ ] 

4.             [x,fval]=linprog(...)

返回最优解x及x处的目标函数值fval

例:    gif.latex?minz%3D6x_%7B1%7D+3x_%7B2%7D+4x_%7B3%7D

s.t.       gif.latex?x_%7B1%7D+2x_%7B2%7D-3x_%7B3%7D%5Cleqslant%2080

            gif.latex?x_%7B1%7D+x_%7B2%7D+x_%7B3%7D%3D120

            gif.latex?x_%7B1%7D%5Cgeqslant%2030    gif.latex?0%5Cleqslant%20x_%7B2%7D%5Cleqslant%2050    gif.latex?x_%7B3%7D%5Cgeq%2020

注意:matlab中只能识别小于等于,大于等于可以用负号来编写

% 编写M文件xxg1.m如下:
c = [6 3 4];
A = [1 2 -3;0 1 0];
b = [80;50];
Aeq = [1 1 1];
beq = [120];
vlb = [30;0;20;];
vub = [ ];
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)

1.2  Lingo软件包使用

1.2.1  简单编程方法

模型:                                                                程序:

            Min                                                         min=7*x1+3*x2;       

            gif.latex?f%3D7x_%7B1%7D+3x_%7B2%7D                                       x1+x2>=345.5;

            gif.latex?x_%7B1%7D+x_%7B2%7D%5Cgeqslant%20345.5                                    x1>=98;

            gif.latex?x_%7B1%7D%5Cgeqslant%2098                                                  2*x1+x2<=600;

            gif.latex?2x_%7B1%7D&plus;x_%7B2%7D%5Cleqslant%20600                                     @gin(x1);

             gif.latex?x_%7B1%7D%2Cx_%7B2%7D 为整数                                         @gin(x2);

                                                                            end

注意:等号、乘号、分号、说明

1.2.2  Lingo软件包的变量界定

变量界定函数实现对变量取值范围的限制,共4种

  • @bin(x)                            限制x为0或1
  • @bnd(L,x,U)                    限制gif.latex?L%5Cleqslant%20x%5Cleqslant%20U
  • @free(x)                          x可以取任意实数
  • @gin(x)                            限制x为整数

默认情况下,LINGO规定变量是非负的,下界为0 

例:一加工厂用牛奶生产A1,A2两种奶制品,1桶牛奶可以在甲车间12h加工成3kgA1,或者在乙车间用8h加工成4kgA2.根据市场需求,生产的A1,A2全部能售出,且每千克A1获利24元,每千克获利16元。现在加工厂每天能得到50桶牛奶的供应,每天正式工人总的劳动时间为480h,并且甲车间每天至多能加工100kgA1,乙车间的加工能力没有限制,试为该厂制定一个生产计划,使每天获利最大,问:

  1. 如果用35元可以买到1桶牛奶,是否应该做这项投资?如果投资,每天最多购买多少桶牛奶?最多买10桶
  2. 如果可以聘请临时工人以增加劳动时间,付给临时工人的工资最多是每小时几元?
  3. 由于市场需求变化,每千克A1的获利增加到30元,是否应改变生产计划?

建立模型 

决策变量              每天用x1桶牛奶生产A1.x2桶牛奶生产A2

目标函数              Max z=72x1+64x2           (每天获利)

约束条件              x1+x2gif.latex?%5Cleqslant50                        原料供应

                            12x1+8x2gif.latex?%5Cleqslant480                劳动时间

                            3x1gif.latex?%5Cleqslant100                          加工能力

                             x1,x2gif.latex?%5Cgeqslant0                          非负约束

Model:
Max=72*x1+64*x2;
x1+x2<=50;
12*x1+8*x2<=480;
3*x1<=100;
end

46d5dd811d8246d7bb5b500c7d9edddf.png

生产计划为20桶牛奶生产A1,30桶牛奶生产A2,利润3360元。

Variable   变量                 objective value   目标值                  Row    行 

Reduced Cost  缩减成本系数  (最优解中变量Reduced Cost值自动取0)

Slack or Surplus              松弛或剩余

对于“ gif.latex?%5Cleqslant ”不等式右边减左边的差值成为Slack

对于“ gif.latex?%5Cgeqslant ”不等式右边减左边的差值成为Surplus

当约束条件的左右两边相等时,Slack or Surplus 的值为0

资源剩余为0的约束为紧约束(有效约束)

Dual Price         影子价格              最优解下“资源”增加一个单位时“效益”的增量

在这里代表原料增加一单位,利润增48

时间增加一单位,利润增2

能力增减不影响利润

35元可以买到一桶牛奶,35<48,要投资。付给临时工人的工资最多是每小时2元。

结果解释 (灵敏度分析)(Range)

6f1a7127d0f74722badae9cd6d5a884a.png

Objective Coefficient Range                 目标函数系数的变化范围

x1系数变化范围(64,96) 

x2系数变化范围(48,72)

每千克A1获利增加到30元,64<30×3<96故不应改变生产计划。

Righthand Side Ranges                         右边变化范围               INFINITY            无穷大

影子价格有意义时约束右端的允许变化范围         (目标函数不变)

注意:充分但可能不必要

在这里原料最多增加10,时间最多增加53

35元可买到1桶牛奶,每天最多买10桶牛奶。

上节的代码如下:

% 任务分配问题
c = [13 9 10 11 12 8];
A = [0.4 1.1 1 0 0 0
    0 0 0 0.5 1.2 1.3];
b = [800;900];
Aeq = [1 0 0 1 0 0
    0 1 0 0 1 0
    0 0 1 0 0 1];
beq = [400;600;500];
vlb = zeros(6,1);
vub = [ ];
[x,fval] = linprog(c,A,b,Aeq,beq,vlb,vub)
c = [40 36];
A = [-5 -3];
b = [-45];
Aeq = [ ];
beq = [ ];
vlb = zeros(2,1);
vub = [9;15];
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Lindo 和 Lingo 是美国 Lindo 系统公司开发的一套专门用于求解最优化问题的软件包。Lindo 用于求解线性规划和二次规划问题,Lingo 除了具有 Lindo 的全部功能外,还可以用于求解线性规划问题,也可以用于一些线性和非线性方程(组)的求解,等等。Lindo 和 Lingo 软件的最大特色在于可以允许优化型中的决策变量是整数(即整数规划),而且执行速度很快。   Lingo 实际上还是最优化问题的一种语言,包括许多常用的函数可供使用者立优化型时调用,并提供与其他数据文件(如文本文件、Excel电子表格文件、数据库文件等)的接口,易于方便地输入、求解和分析大规最优化问题。   由于这些特点,Lindo系统公司的线性、非线性和整数规划求解程序已经被全世界数千万的公司用来做最大化利润和最小化成本的分析。应用的范围包含生产线规划、运输、财务金融、投资分配、资本预算、混合排程、库存管理、资源配置等等...   Lindo/Lingo 软件作为著名的专业优化软件,其功能比较强、计算效果比较好,与那些包含部分优化功能的非专业软件相比,通常具有明显的优势。此外,Lindo/Lingo 软件使用起来非常简便,很容易学会,在优化软件(尤其是运行于个人电脑上的优化软件)市场占有很大份额,在国外运筹学类的教科书中也被广泛用做教学软件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qqgg77

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

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

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

打赏作者

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

抵扣说明:

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

余额充值