司守奎数学建模刷书_第1章_线性规划

第一章线性规划

利用现有资源安排生产,以取得最大经济效益的问题。此类问题构成了运筹学的一个重要分支——数学规划,而线性规划(Linear Programming 简记 LP) 则是数学规划的一个重要分支。

【1】问题举例
线性规划在高中数学中多少涉猎过,这里只给出最终的问题:厂商生产x1台甲机床和x2台乙机床时利润最大,则x1和x2应满足目标函数,这里是利润的表达式;需要有约束条件,比如A机器和B机器生产时间的 限制。几个约束条件记为s.t.(即 subject to ) .然后需要记住的是决策变量,这里是x1和x2,有两个决策变量。

【2】线性规划因何得名?

由于目标函数和约束条件均为线性函数,故称之为线性规划问题。

【3】实际提醒

在解决实际问题的时候,把问题归结成为一个线性规划数学模型是很重要的一步。模型归类是否恰当,决策变量选取是否得当,都很重要。

【4】线性规划的matlab标准形式

背景:对于最优化问题,我们有自己的目标方程(即目标函数),然后有根据实际情况得来的约束条件,这里存在的问题是:线性规划的目标函数可以是求最大值,也可以是求最小值;约束条件的不等号可以是小于号,同样也可以是大于号。为了减少形式多样性带来的计算不便,Matlab中规定线性规划的标准形式
在这里插入图片描述

其中c和x为n维列向量,A,Aeq为适当维数的矩阵,b,beq为适当维数的列向量。

即线性规划Matlab标准型:目标函数用小于等于号;约束条件用小于等于号。
例如下面的线性规划要求:
在这里插入图片描述

其对应的Matlab标准型为:

在这里插入图片描述

【5】Matlab中线性规划的解法

我们已知上面Matlab线性规划的标准型 目标函数:在这里插入图片描述
基本的线性约束条件:在这里插入图片描述

Matlab中基本函数形式为linprog(c,A,b),它的返回值是向量x的值。
备注:这里linprog就是linear program线性规划的缩写
标准形式为:

[x,fval]=linprog(c,A,b,Aeq,beq,lb,ub,x0,OPTIONS)

对上式的解释:这里fval返回目标函数的值,lb和ub分别是变量x的下界和上界,x0是x的初始值,OPTIONS是控制参数。

【5.1】例题求解下面的线性规划问题
在这里插入图片描述
【5.1.1】matlab代码:

c=[2;3;-5];%目标函数的系数,标准形式
A=[-2,5,-1;1,3,1];%约束条件不等式等号左边
b=[-10;12];%约束条件不等式等号右边
Aeq=[1,1,1];%约束等式等号左边
beq=[7];%约束等式等号右边
%x得到决策变量x向量的值,这里是3*1
x=linprog(c,A,b,Aeq,beq,zeros(3,1))%zeros(3,1)表示决策变量的左边界
value=c'*x

【5.1.2】得到实验结果:
在这里插入图片描述

【5.1.3】分析结果:
在x1=6.4286,x2=0.5714,x3=0时,最优化值为14.5715

【5.1.4】现在回头看这道例题,笔者回头琢磨一下,如果如下标准形式解法如何?
即:使用[x,fval]在一起,而不是单独计算出x而后计算value。
这样逻辑不清楚,容易搞乱。

c=[-2;-3;5];%目标函数的系数取反,目的是保证min标准形式
A=[-2,5,-1;1,3,1];%约束不等式等号左边系数
b=[-10;12];%约束不等式等号右边系数
Aeq=[1,1,1,];%约束等式等号左边系数
beq=[7];%约束等式等号右边系数
%x得到决策变量x向量的值
[x,fval]=linprog(c,A,b,Aeq,beq,zeros(3,1))%zeros(3,1)表示决策变量的左边界,这里是x1,x2,x3=0

【5.1.4】实验结果:
在这里插入图片描述

发现,决策变量的取值没变,最后的最优化值变成相反数。说明了什么?

说明了Matlab标准型(目标函数是最小值)和目标函数是最大值的处理手法不一样,不能直接[x,fval]一起用,这样会出现上面的问题,差一个负号。正确处理方法目标函数的系数正常书写,linprog函数输出一个变量x;目标函数的值后面通过下式计算:

 fval=c'*x;%c表示目标函数系数向量;x表示解的向量;fval目标函数的值

【5.2】练习题
在这里插入图片描述
【5.2.1】练习代码:

c=[2;3;1];%目标函数的系数,转置完为c
A=[-1,-4,-2;-3,-2,0];
b=[-8;-6];
[x,fval]=linprog(c,A,b,[],[],zeros(3,1))

【5.2.2】练习结果:
在这里插入图片描述

【总结】
1.学习线性规划的Matlab实现,其主要函数是linprog()。
2.linprog()函数的使用,注意matlab中线性规划标准型的定义。

发布了113 篇原创文章 · 获赞 69 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/shizheng_Li/article/details/104057376