MATLAB解决线性规划问题,学会使用linprog函数,在一个实例中演示linprog函数各参数的用法
最近接触到了一个线性规划的题目,尝试用MATLAB解决,动手前想了很多思路,上网搜索了一下发现MATLAB中有专门的linprog函数专门解决线性规划问题,了解学习后果然十分方便。事实上,绝大部分的线性规划问题都是类似的,其方法也比较单一,最基本的就是我们熟悉的图形解法,以图像的方式直观的找到所求解所处的交点位置。但若使用MATLAB中的linprog函数,只要将问题用线性规划问题的方式描述清楚,在MATLAB中几行代码就可以解决。现把这次经验做个记录同时也分享给大家。
问题:
一家制造公司生产四种汽车零部件。每一个都是先制作,然后加工。每个零件所需的工时和利润为:
A部分 | B部分 | C部分 | D部分 | |
制作时间(h/100件) | 2.5 | 1.5 | 2.75 | 2 |
加工时间(h/100件) | 3.5 | 3 | 3 | 2 |
利润(美元/100件) | 375 | 275 | 475 | 325 |
下个月,制造车间和加工车间的生产能力分别为640小时和960小时。确定每个零件应生产多少以实现利润最大化。
类似这种问题的表述都属于线性规划问题,即所谋划的变量只做数积和加减运算,若发现计算时出现多个变量相乘或出现幂次方的情况则为非线性问题。
对于线性规划问题,可以直接使用matlab中的linprog函数,要了解,linprog函数中共有最基本的主要有七个参数,即:
linprog(f,A,b,Aeq,beq,lb,ub)
现将题目以线性规划问题的方式描述,即假设A、B、C、D四个部分的零件分别生产x1、x2、x3、x4(百件),则问题可描述为数学语言即:
目标函数:
约束条件:
2.5x1+1.5x1+2.75x1+2x1≤640
3.5x1+3x2+3x3+2x4≤960
对应到linprog函数中,f为目标函数的系数矩阵(注意linprog函数只能求目标函数的最小值,故在写程序时应将系数矩阵的系数都取负数),A为约束条件的系数矩阵,b为约束条件的每个约束条件的右端数值组成的列向量,此处即[ 640; 960 ]。
Aeq,beq为绝对条件的系数矩阵和条件右端数值组成的列向量,若此题目另有条件
2.5x1+1.5x1+2.75x1+2x1=640;3.5x1+3x2+3x3+2x4=960;
则Aeq为该方程组的系数矩阵,beq = [ 604; 960];本题中并没有绝对条件,则Aeq、beq都赋为空。
lb、ub为所求变量的上限和下限,本题中,xi为生产的零部件的件数,故下限为0,无上限。
代码如下:
A = [2.5,1.5,2.75,2; 3.5,3,3,2];
b = [640; 960];
Aeq = [];
beq = [];
lb = [0,0,0,0];
ub = [inf,inf,inf,inf];
f = [-375,-275,-475,-325];x = linprog(f,A,b,Aeq,beq,lb,ub);
round(x*100)
由于xi的单位为(百件),故在最后将x*100并取整,运行结果为:
ans =
0
19200
12800
0
故当生产B部件19200件和C部件12800件时利润最大。
在命令行验证一下两个约束条件:
>> 2.5*x(1)+1.5*x(2)+2.75*x(3)+2*x(4)
ans =
6.399999999999996e+02
>> 3.5*x(1)+3*x(2)+3*x(3)+2*x(4)
ans =
9.599999999999750e+02
约束条件都是满足的,要注意,linprog函数只能求目标函数的最小值,而本题要求利润的最大值,故在代码中将目标函数的系数矩阵都取了负数。
事实上,大部分的线性规划问题都是类似的,解决方法也是几乎固定的,若是使用MATLAB解决线性规划问题,使用linprog函数是十分方便和简洁的。
MATLAB解决线性规划问题,学会使用linprog函数,在一个实例中演示linprog函数各参数的用法相关推荐
- python文件定位函数_C语言中文件定位函数总结
C语言中文件定位函数主要是:fseek, ftell, fsetpos, fgetpos. 先来讲前两个函数,这是最基本的定位函数: fseek函数:能把文件指针移动到文件任何位置,其原型是:int ...
- python命名空间和闭包_Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】...
本文实例讲述了Python函数基础用法.分享给大家供大家参考,具体如下: 一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点: 1.约束函数的调用者必须按照Kye=value的 ...
- Oracle中to_char函数和MySQL中的str_to_date函数区别
标题Oracle中to_char函数和MySQL中的str_to_date函数 1. str_to_date()----->相当于Oracle中的to_char(): 字符串转换为日期格式 (1 ...
- matlab匿名函数求导,MATLAB中的匿名函数和Python中的匿名函数
在MATLAB和Python中都有一个叫做匿名函数的东西,在这里对比一下. 一. MATLAB中这样来定义一个匿名函数: f = @(x1, x2, ...) exper @后面的括号里面是自变量,然 ...
- matlab中gen2par函数,R语言中绘图par()函数用法
图形参数 当参数no.readonly=TRUE时,函数par()就只允许有这一个参数了,并且会返回当前绘图设备中各个参数的参数值. 每一个图形设备都有自己的绘图参数,如果当前还没有打开绘图设备,那么 ...
- java where函数_WHERE 子句中有用的函数
有很多时候,可能需要对条件进行一些特殊的处理.例如,存储的字符串可能在串前或串后包含空格,这样进行 字符串比较 时,多余的空格可能导致比较的错误,如果能去掉这些空格就不会产生多余的错误.也可能系统规定 ...
- 计算机一级exc除法函数,在Excel中巧用函数出习题EXCEL 函数 -电脑资料
小学低年级的学生家长是不是都有这样的烦恼,就是给孩子出加减乘除法数学练习题, 1. 需要掌握的几个函数 RAND()这是一个随机函数,它的返回值是一个大于0且小于1的随机数. ROUNDUP(Numb ...
- c语言syscall函数,在C中调用syscall函数时出现问题
为了完成家庭作业,我必须修改linux内核. 我在一个虚拟机上工作,我向内核添加了一个系统调用,我称之为get_unique_id.以下是get_unique_id.c的代码:#include #in ...
- oracle分类函数总结,oracle中分组排序函数用法
项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示 ...
最新文章
- drupal cve-2018-7600 远程代码执行漏洞 简介
- 知乎:fastjson 这么快,为啥老外还是热衷 jackson?
- Linux中sudo配置
- Mapreduce设置多路径输入输出
- 有限元笔记02:第三章
- gfi截图_GFI Backup Home Edition是Windows的免费数据备份实用程序
- android版本迭代,多盟:android2.3仍是主流 iOS新版本迭代加
- 计算机网络高级技师,计算机网络管理员(高级技师)职业资格考核标准_new教案.doc...
- Process Explorer
- centos rpm安装mysql5.6_CentOS 7下使用RPM安装MySQL 5.6
- 教你成为质量管理高手GJB
- 最新最全的免费股票数据接口--沪深A股实时交易数据API接口(一)
- 十二首《临江仙》,说尽心中无限事
- 【基于51单片机驱动ST7789VW的TFT显示屏240x240
- 【光学】基于矩阵法和等效界面法分析光学薄膜膜对反射率影响附matlab代码
- luooj1559最强阵容加强版
- 单元格等于计算机日期,Excel相邻单元格快速填入相同日期的几种方法
- [翻译/转载] 部分使用intel RST硬盘驱动与电脑安装Linux系列系统相互冲突 导致无法装linux系统的解决方法
- (机械师T90外接显卡GTX-1080)Win10笔记本通过M.2接口外接独立显卡+解决错误代码43
- 最近远景论坛打不开修改hosts