基础数学建模(1)线性规划问题

线性规划模型(IP)

线性规划(linear problem)的发展曾被20世纪中期称为最重要的科学进展之一,这以评估也奠定了线性规划模型在数学应用和工程管理等领域的重要学术地位,今天我们就来探讨一下线性规划中子问题------整数规划的魅力。

这里虽然探讨的是数学建模的内容,但是属于管理类和工程类的学科同学,有时间可以直接学习《运筹学》或者《管理运筹学》这类的书籍。运筹学这门学科是直接从数学理论基础的角度解释相当一部分模型,是对模型更加深入的理论探讨的学科,学有余力的同学可以认真研究相关内容。

数学规划通俗的来讲就是通过数学建模或者建立数学方程组,建立关于问题的符号公式和数学关系,从而求解一定的实际问题的数学方法。

数学规划中的变量(部分或全部)限制为整数时,称为整数规划。整数规划是线性规划模型的一个子分支,当线性规划模型中的所有变量被限制为整数时,我们将这个线性规划问题统称为整数线性规划问题。
当线性规划中变量是普通的值的时候,我们直接称为线性规划,线性规划中的变量一般都是大于0的,当然也存在部分变量没有限制的特殊情况。
对于整数规划来说,还有一类问题叫做混合整数规划,未来的日子,我们带领大家详细做这些问题的研究。

Part01.线性规划简单介绍

现在我们举个例子大概讲解一下线性规划模型。有相关基础的同学可以直接略过。

假设我们遇到一个问题,小王和小李共同经营了一家公司,双方都进行投资。小王希望经营电商相关的业务,而小李希望经营软件相关的业务,于是他们共同决定根据自身爱好分别对两个业务进行投资,其中投资的相关数据如下:

业务 电商单位花费 软件单位花费 资金限制
小王 30 20 4250
小李 15 40 4300
获得的利润 20 30

现在询问,如何进行投资才能使得小王和小李的总利润最多。

通过上面的数据,我们可以进行简单的数学假设。

设小王和小李的针对不同业务的投资设施量分别为。i代表小王小李,j代表不同业务。所以根据线性代数的相关分析,我们可以建立一个线性方程组如下:

我们需要小王和小李的资金不超过自己的承担水平:
所以建立方程组:

这个方程组相比大家都是非常乐于求解的,当然在线性代数中,不等式应该是等式才比较合适。
这个问题到了这一步并没有结束,这里我们应该针对问题的目标添加一个目标函数,如下:

这个方程表示了最终要获得的利润应该是最大的。通过上述两个方程,我们可以将方程组组建为如下模型:

注释:上述中的s.t.表示“使得”的意思,这个应该在高中数学中讲过,s.t.英文全称是subject to 。

对于上述模型,我们可以进行一个简单的归纳,上述方程用普通方法描述,可以写为如下公式:

A大家应该都知道什么东西,线性知识点是贯穿数学建模的整个体系的一块知识内容。
至此,我们对线性规划的建模讲述完毕。

Part02.线性规划的求解

针对上述线性规划模型,我们可以手动编写python程序进行求解,使用的还是线性代数或者运筹学书中的相关知识。也可以编写matlab或者lingo程序进行求解。
一般情况下,求解线性规划的方法称为单纯型法,但是由于求解过程复杂,这里不在叙述,有兴趣的同学可以详细学习运筹学书中的相关知识。而对于python来说,学好单纯形法是解决问题的基础,所以python这里也不再和大家讲解了。
这里使用matlab的相关程序进行讲解,当然求解单纯形法的工具还有很多,比如杉树科技公司研究了一款求解器,目前从学术领域来说,是比较好用的工具,据说这款求解器的求解速度已经达到全球领先。又况且这个公司是我国一些学者自主自建的公司,有一定的科技主导争取意识,有兴趣的同学可以增加涉猎知识深度,对这些公司的求解器和公司研究做一些了解。其余的求解器大部分以美国研究为主,有兴趣同学可以进行探索。

01.线性规划模型标准化

我们根据教材中的内容,对上述模型进行规范性书写,也就是标准化:

其中:
\\c = [c_1 \space c_2 \space ... \space c_m] \\ x = [ x_1 \space x_2 \space ... \space x_m]^T \\ b = [ b_1 \space b_2 \space ... \space b_n]^T \\ A =[a_{11}\space a_{12}\space ...\space a_{1m}\\ a_{21}\space a_{22}\space .... \space a_{2m}\\ ...\space ...\space ... \space...\\ a_{n1}\space a_{n2}\space...\space a_{nm}]_{n \times m}
.

此时便可以使用matlab函数进行计算,计算过程如下:

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

注释:这里的c和b向量在输入的时候,都是按照行向量进行输入,x表示结果,fval表示目标函数的值。

到这里,线性规划的基础知识讲解便结束了,有问题的可以关注公众号 binder的学习空间 后台留言咨询,也可以直接在评论区留言。

数学建模相关学习资源推荐:
1.B站的数学建模相关教程(推荐老哥建模)
2.中文版《运筹学》(推荐使用清华大学出版的《管理运筹学》)
3.推荐使用英文版运筹学书籍《Introduction of operating Research》

你可能感兴趣的:(基础数学建模(1)线性规划问题)