LP问题的MATLB优化工具箱求解方法

LP问题是最常见的线性规划的问题,广泛的运用在生活的各个领域,用作求解最优。本文将会以具体的任务分配问题为例子,给出运用MATLAB这一方法求解这一类型的问题的具体解决方法。

具体问题如下

在这里插入图片描述

问题分析

这是工厂常见的任务分配问题,求解目标有两个,一是怎样安排甲乙两工厂的加工方案,即分别加工三种工件各多少个。二是在完成既定的生产目标条件下,使得加工费用最少。为了求解问题,不妨设甲车床生产工件1的数量为 X 1 X1 X1,生产工件2的数量为 X 2 X2 X2,生产工件3的数量为 X 3 X3 X3,乙车床生产工件的数量分别 X 4 、 X 5 、 X 6 X4、X5、X6 X4X5X6

问题求解

目标函数即其约束条件如下:

p s ps ps:因为MarkDown编辑器么有公式编辑,博主就懒得换用富文本编辑了,这里就只能通过图片的形式展现给大家了,嘻嘻

m i n Z min Z minZ表示花费最小,也是我们要求的目标函数,等式约束是表示各个零件所要求的产量,不等式约束表示可用台时数的上限约束,而 X X X本身也是具有大于等于0的自身约束。

模型及MATLAB命令

模型
m i n Z = c X minZ=cX minZ=cX
st A X ≤ b AX≤b AXb
A e q = b e q Aeq=beq Aeq=beq
v l b ≤ X ≤ v u b vlb≤X≤vub vlbXvub
命令 x = l i n p r o g ( c , A , b , A e q , b e q , v l b , v u b , x 0 ) x=linprog(c,A,b,Aeq,beq,vlb,vub,x0) x=linprog(c,A,b,Aeq,beq,vlb,vub,x0)
注意:若没有不等式或者等式存在,则令A=[ ],b=[ ]。或者Aeq=[ ],beq=[ ]。

上述模型代入相关数据改写为如下所示:
在这里插入图片描述

相关符号说明

c矩阵是对应零件的加工费矩阵
X矩阵为对应零件的矩阵
A为等式的系数矩阵
b为目标零件的对应生产量矩阵
Aeq为不等式的系数矩阵
beq为甲乙两机床对应的可用台时数
vlb为对应X的下限矩阵,根据约束可知这是一个 6 ∗ 1 6*1 61的零矩阵
vub为对应的X的上限矩阵,这里无上限约束
X0为X的初始值,这里没有初始值,在命令中就不用写入

MATLAB求解

根据上述的分析在MATLAB中的代码如下:

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);%下限为x=0
vub=[];%无上限
[x,fval] = linprog(c,A,b,Aeq,beq,vlb,vub)%求解线性规划的函数

关于linprog函数的使用这里博主就不多讲,可以在matlab搜索库里通过help工具查看到具体内容,求解结果如下:

> LP
Optimization terminated.

x =

    0.0000
  600.0000
    0.0000
  400.0000
    0.0000
  500.0000


fval =

   1.3800e+04

最小的费用为 1.38 ∗ 1 0 4 1.38*10^4 1.38104,甲车床生产三种零件的个数分别为 0 、 600 、 0 0、600、0 06000,乙车床生产三种零件的个数分别为 400 、 0 、 500 400、0、500 4000500

以上就是博主真对这一问题所引出的一类线性规划的matlab的解决方法

但有的小伙伴会问了(其实是博主自问自答啦,嘻嘻),这里的模型是不是只能求解最小值得问题?求解最大值的情况怎么求解

求解最大值的问题在本模型中也是同样适用,只需将目标函数和约束条件做一些相应的改变就可以求解了。求解最大值的目标函数,只需将原来目标函数的系数变为其相反数即可,并且在约束条件中有大于的约束也只需将约束的系数和对应右边的约束变为其相反数即可。这样求得的变量对应值也是我们所需要的最优解时的数值,但是得到的目标值变成的最小值,对其取相反数就可以得到目标函数的最大值。

------------------------------------------手动分割线--------------------------------------------------------
这是本人在学习matlab的过程中的一些经验,希望通过写博客的形式巩固并其能够用和大家一起交流学习

注:上述的截图均来自于本人老师的 PPT,由衷感谢。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值