数学建模之规划1——线性规划
什么是规划
在有限的资源状况下,干最有意义的事,其实就是规划。
小例子
例如我要盖大楼,我有这么多钱,我要请人设计、买设备、买材料资源,我们应该怎么平衡钱的花费,使得完成盖大楼这件事。
数学规划模型怎么分类
a. 线性规划模型
引例(生产规划问题):某厂利用a、b、c三种原料生产A、B、C三种产品,已知生产每种产品在消耗原料方面的各项技术条件和单位产品的利润,以及可利用的各种原料的量(具体数据如下表),试制订适当的生产规划使得该厂的总的利润最大。
- 我们要生成多少件A、B、C使得该厂的总利润最大。
- 首先我们假设x1,x2,x3x_1,x_2,x_3x1,x2,x3是生产A,B,C的量,称之为决策变量。(能对最终结果产生关联的变量称之为决策变量)。
- 我们的求解核心关系式是z=2x1+4x2+3x3z = 2x_1+4x_2+3x_3z=2x1+4x2+3x3,我们的目的是求z最大。
- 下面的这些就是约束条件,把现有资源用关系式表示的方法。
名词小总结
- 目标函数:利润最大化、成本最小化,表现为决策变量的一个函数。
- 约束条件:资源、工期等,表现为决策变量的一些等式或者不等式
- 决策变量:对结果产生影响的变量
- 线性规划问题:由一些线性等式或不等式组成的约束条件下,求决策变量的一组具体取值,使得一个线性目标函数实现最优(大或小)化。
- 线性规划数学算子。
例题1
线性规划实例:某机床厂生产甲、乙两种机床,每台销售后的利润分别为4元与3元。生产甲机床需用A、B机器加工,加工时间分别为每台 2小时和1小时;生产乙机床需用A、B、C三种机器加工,加工时间为每台各一小时。若每天可用于加工的机器时数分别为A机器10小时、B机器8小时和C机器7小时,问该厂应生产甲、乙机床各多少台,才能使总利润最大?
解答
{maxz=4x1+3x2s.t.2x1+x2≤10x1+x2≤8x2≤7x1,x2≥0\begin{cases}max\space \space z = 4x_1+3x_2\\s.t.\space \space \space2x_1+x_2\leq10\\x_1+x_2\leq 8\\x_2\leq 7\\x_1,x_2\geq 0 \end{cases}⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧max z=4x1+3x2s.t. 2x1+x2≤10x1+x2≤8x2≤7x1,x2≥0
线性规划的求解方法
- 单纯形法(不好,不建议使用)
- 图解法
- 软件求解法(用Lingo或Lingdo软件)
图解法
- 可行点:满足线性规划所有约束条件的点称为问题的可行点。
- 可行域:所有可行点构成的集合称为问题的可行域,记为R。
- 等位线:对于每一固定的值z,使目标函数值等于z的点构成的直线称为目标函数等位线。
可行点
- 例如刚才的,对于2x1+x2≤102x_1+x_2\leq 102x1+x2≤10,x1=1,x2=1x_1 = 1,x_2 = 1x1=1,x2=1就是一个可行点。
- 所有在R中的都为可行点。
- z所在的先就是$x_1和.
- 顶点一般就是最优值点。
- 可以把所有的顶点都算一遍。
软件解法
- 直接把下列代码复制入lingo
model: !程序开始
sets: !变量集合开始var/1..2/:x; !说明x是二维变量
endsets !集合说明结束
max=4*x(1)+3*x(2); !目标函数求极大
2*x(1)+x(2)<=10; !约束函数
x(1)+x(2)<=8; !约束函数
x(2)<=7; !约束函数
End !程序结束 如果不加以说明,LINGO认为所有变量非负
输出结果
Global optimal solution found.Objective value: 26.00000Infeasibilities: 0.000000Total solver iterations: 2Model Class: LPTotal variables: 2Nonlinear variables: 0Integer variables: 0Total constraints: 4Nonlinear constraints: 0Total nonzeros: 7Nonlinear nonzeros: 0Variable Value Reduced CostX( 1) 2.000000 0.000000X( 2) 6.000000 0.000000Row Slack or Surplus Dual Price1 26.00000 1.0000002 0.000000 1.0000003 0.000000 2.0000004 1.000000 0.000000
- 课下把第一个练习用lingo求解。
例题2(思维难度大,先自己思考)
某车间在未来的五天内所需的某种刀具统计资料如表所示。每把刀具成本0.6元。用过的刀具送机修车间研磨,每把需花费0.2元。刀具每天用过后,如果立即送去磨,两天后可以磨好送回,供当天的需要。第五天后,刀具全部换新的。假设开始时,该车间没有任何刀具。问这个车间需要多少刀具才能应付需要,而成本又最低
题解
- xnx_nxn表示5天用的新刀具。
- 目标函数:min=0.6∗(x1+x2+x3+x4+x5)+0.2x1+0.2x2+0.2∗(x1+x3)min = 0.6*(x_1+x_2+x_3+x_4+x_5)+0.2x_1+0.2x_2+0.2*(x_1+x_3)min=0.6∗(x1+x2+x3+x4+x5)+0.2x1+0.2x2+0.2∗(x1+x3)
- 这分别表示5天的新刀具,第三天的刀具、第四天的刀具、第五天的刀具。
- 约束条件:x1≥120;x2≥85x_1\geq120;x_2\geq 85x1≥120;x2≥85
- 一号道具磨后:x1+x3≥160x_1+x_3\geq 160x1+x3≥160
- 二号刀具磨后:x2+x4≥145x_2+x_4\geq 145x2+x4≥145
- 三号刀具磨后:x1+x3+x5≥300x_1+x_3+x_5\geq300x1+x3+x5≥300
b. 交错规划模型
运输问题
生产、生活物资从若干供应点运送到一些需求点,怎样安排输送方案使运费最小,或利润最大;
各种类型的货物装箱,由于受体积、重量等限制,如何搭配装载,使获利最高,或装箱数量最少。
例题1
问题:某城市有甲、乙、丙、丁四个居民区,自来水由A、B、C三个水库供应,四个区基本用水量(必须保证)分别为30、70、10、10千吨,三个水库最多供水量分别50、60、50千吨。自来水公司从水库向各个小区送水付出引水管理费不同,其它管理费是450元/千吨。各小区收费相同,标准900元/千吨。此外,四个小区申请额外用水量分别50、70、20、40千吨,该公司应如何分配供水量能使利润最大?若水库供水量都提高一倍,公司利润可增加到多少?
精简
- 我们是A、B、C三个水库,我们要给居民区供水,怎么样的供水方案最赚钱。
- 我们要求的有11个量,A向甲、A向乙、A向丙…C向丙
- 上面那幅图上的是引水管理费,是我们要支出的;450元是固定要支出的其他管理费。
- 我们的收入是900元每千吨,对于每一个小区都是一样的。
分析
- 我们的收入一定是固定的,大概为$900*160 = 144000元。
- 我们的某一部分支出是固定的,为450*160 = 72000元
- 所以我们其实要做的就是:使引水管理费最小,这样就能让我们的利润最大。
模型建立
- 首先我们需要确定这个变量,如上图所示
- 目标函数MinZ=160x11+130x12+220x13+170x14+140x21+130x22+190x23+150x24+190x31+200x32+230x33Min\space Z = 160x_{11}+130x_{12}+220x_{13}+170x_{14}+140x_{21}+130x_{22}+190x_{23}+150x_{24}+190x_{31}+200x_{32}+230x_{33}Min Z=160x11+130x12+220x13+170x14+140x21+130x22+190x23+150x24+190x31+200x32+230x33
- 供应限制
- x_{11}+x_{12}+x_{13}+x_{14} = 50 A水库
- x_{21}+x_{22}+x_{23}+x_{24} = 60 B水库
- x_{31}+x_{32}+x_{33} = 50 C水库
- 需求限制
- 30≤x11+x21+x31≤8030\leq x_{11}+x_{21}+x_{31}\leq 8030≤x11+x21+x31≤80 甲小区
- 70≤x12+x22+x32≤14070\leq x_{12}+x_{22}+x_{32}\leq 14070≤x12+x22+x32≤140 乙小区
- 10≤x13+x23+x33≤3010\leq x_{13}+x_{23}+x_{33}\leq 3010≤x13+x23+x33≤30 丙小区
- 10≤x14+x24≤5010\leq x_{14}+x_{24}\leq 5010≤x14+x24≤50 丁小区
输入lingo
model:sets:kar/1..3/;car/1..4/;var(kar,car):x;
endsets
min=160*x(1,1)+130*x(1,2)+220*x(1,3)+
170*x(1,4)+140*x(2,1)+130*x(2,2)+190*x(2,3)
+150*x(2,4)+190*x(3,1)+200*x(3,2)+230*x(3,3);
x(1,1)+x(1,2)+x(1,3)+x(1,4)=50;
x(2,1)+x(2,2)+x(2,3)+x(2,4)=60;
x(3,1)+x(3,2)+x(3,3)=50;
x(1,1)+x(2,1)+x(3,1)<=80;
x(1,1)+x(2,1)+x(3,1)>=30;
x(1,2)+x(2,2)+x(3,2)<=140;
x(1,2)+x(2,2)+x(3,2)>=70;x(1,3)+x(2,3)+x(3,3)<=30;
x(1,3)+x(2,3)+x(3,3)>=10;x(1,4)+x(2,4)<=50;
x(1,4)+x(2,4)>=10;
End
得出结果
Global optimal solution found.Objective value: 340.0000Infeasibilities: 0.000000Total solver iterations: 0Model Class: LPTotal variables: 5Nonlinear variables: 0Integer variables: 0Total constraints: 6Nonlinear constraints: 0Total nonzeros: 14Nonlinear nonzeros: 0Variable Value Reduced CostX1 120.0000 0.000000X2 85.00000 0.000000X3 40.00000 0.000000X4 60.00000 0.000000X5 140.0000 0.000000Row Slack or Surplus Dual Price1 340.0000 -1.0000002 0.000000 -0.20000003 0.000000 -0.20000004 0.000000 -0.20000005 0.000000 -0.60000006 0.000000 -0.6000000
问题讨论
- 当每个水库最大供水量都提高了一倍会发生什么?
- 这时候不再是供大于求了,这应该怎么做呢?
数学建模之规划1——线性规划相关推荐
- 数学建模【规划模型--线性规划(整数规划、0-1规划)、非线性规划-附:案例分析、奶制品的生产和销售(详细求解过程)】
- 数学建模算法与应用 线性规划(cvxpy包)
数学建模算法与应用 线性规划(使用cvxpy包) 说明 使用python中cvxpy库完成<数学建模算法与应用>中课后习题 因为本人也是初学者,若代码有错误还请各位指出 cvxpy库的使用 ...
- python数学建模(二)线性规划2.实战(思路清晰\过程完整、详细)
文章目录 (一)简单陈述本文章的内容 (二)线性规划例题(实战) 2.1 实战题目 2.2 符号规定和基本假设 2.3 模型的分析 2.4 模型的建立 2.5 模型一的求解和分析 2.5.1 (代码) ...
- 关于数学建模中线性规划总结
前言 目录 前言 一.一般线性规划问题的解决 (1)相关程序编写: (2)相关代码编写: 一.python方法解决 python运行结果 二.matlab中此函数的.m文件 编写的相应代码 (3)代码 ...
- 个人数学建模算法库之线性规划模型
线性规划模型 模型描述 Matlab代码 基于求解器 基于问题 Python代码 Scipy库 Plup库 模型描述 m i n z = f T x ( 1 ) s . t . { A x ≤ b ( ...
- 指派问题数学规划matlab,数学建模(一)线性规划
一.线性规划 1.1 定义 它的原理很简单,跟高中学过的简单线性规划一样,不多说 1.2 MATLAB标准形式 线性规划的目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以 是小于号也可以 ...
- 【数学建模】数学规划模型 - 线性规划 整数规划
非线性规划 matlab 求解: 因为非线性规划对初始值很敏感 使用蒙特卡洛模拟方法(不是算法)获得初始值 写作技巧: 不同的算法有其名自的优缺点和适用情况,我们可以改变求解的算法来看求解的结量是否变 ...
- 数学建模学习笔记01——线性规划
使用MATLAB2019b进行的求解,使用的是基于问题的求解方法 clc,clear prob=optimproblem('ObjectiveSense','max');%ObjectiveSense ...
- 数学建模--30+种常用算法模型
全国大学生数学建模竞赛中,常见的算法模型有以下30种: 1.线性规划模型:用于寻找最优解的数学模型. 线性规划(Linear Programming,简称 LP)是一种运筹学方法,用于在一定的约束条件 ...
最新文章
- 和php工具箱一样的,将php工具箱或其它类似工具正确安装好,并写出安装步骤与注意事项...
- 一个 Linux 上分析死锁的简单方法
- html 分割线_零基础网页设计/前端/html,第四课:前三课总结,以及单标签img
- javaScript如何监听浏览器关闭事件
- bitmap 转byte[]后读取_闲谈redis的bitmap
- 聊聊基准测试的MVP方案
- java两个对象属性比较
- c语言中转义字符efg,c语言的转义字符与空白符
- 汇编语言中sbb是什么意思_汇编语言的所有指令
- matlab色差,科学网—实用图片处理技巧(1)---MATLAB学习笔记 - 冯竟超的博文
- MVPArms官方快速组件化方案开源,来自5K star的信赖
- 在Access数据库中使用SQL查询分析器
- Latex排版图片样式
- 罗马音平假字复制_全部日文平假字翻译
- Ubuntu 命令大全 Ubuntu技巧
- SpringBoot实现企业微信-获取临时素材
- eclipse的启动失败提示“发生了错误,请参阅日志文件“
- my name is van
- linux系统编程之信号(一):信号基本概述
- Browsersandbox浏览器兼容性测试工具介绍