摘要:本文探讨了在高等学校线性规划教学中引入计算机程序思想的重要性,在理论教学与软件工具之间搭起桥梁,通过Matlab编程,不但使教师在理论教学中培养学生的应用能力,而且使得学生的计算机编程能力得到了很大提高。通过巧妙的计算机程序语言与理论模型的结合,使学生的学习兴趣及学习能力都大为提高,达到了理论数学思维与计算机应用能力双向丰收的教学效果。
关键词:Matlab仿真;线性规划;编程能力;教学效果
中图分类号:G421 文献标志码:A 文章编号:1674-9324(2018)10-0181-04
一、引言
线性规划不但是高校理工科专业的重要课程,而且在经管类的数据挖掘教学中占据着非常重要的位置,是数据建模的重要内容,是企业资源计划(Enterprise Resource Planning,ERP)的核心思想之一。最优化的资源管理及开发应用是每个企业长期坚持的战略任务[1-5]。
但是在现行许多高等学校线性规划实际的教学中,往往是过于偏重理论教学,没有计算机应用及软件编程,忽视了计算机应用能力的培养,这使得教学过于枯燥,只进行理论教学会带来三方面的问题:
1.重理论而不重计算机应用能力。“学以致用”是教学的本质,再好的理论如果不加以应用,这样的理论发展往往受到限制,当然,一些纯抽象某些专业课程(如抽象代数)除外。许多高校的大学生都是要培养学生的应用能力,培养应用型复合型人才,特别是强调计算机应用能力,如果线性规划教学只培养了学生的理论部分,这就欠缺了应用能力特别是计算机应用能力的培养。
2.教学的深度受到限制。线性规划问题的解一般有图解法及单纯型法两种,但图解法对于两个决策变量还好,三个以上就很难实施;而单纯型法对于四个变量以上就将耗费大量时间,特别对于5个变量以上就显得无从下手。如今的企业资源复杂,往往涉及更多的约束及决策变量,如果不借助计算机求解,这就会严重影响教学的深度及解决实际问题的能力。
3.学生的学习兴趣大为降低,导致教学效果也低。因为只有枯燥的理论课堂使学生无法进入计算机实验室进行操作程面的锻炼。课堂上没有计算机仿真的演示,现代计算机软件工具没有在课堂上体现,学生学习枯燥无兴趣,这使得这门课程的学习效果大打折扣。
因此,在线性规划教学中引入计算机软件工具不但有必要而且是现代教学培养目标非常重要的要求,通过Matlab这种优秀的软件来培养学生的编程能力在上述三个方面都会有重要的教学改革意义。
二、线性规划与Matlab相关问题
1.线性规划问题。线性规划问题的历史悠久、理论成熟及应用广泛。法国数学家J.B.J.傅里叶和C.瓦莱-普森分别于1832和1911年独立地提出线性规划的想法,但未引起学术界注意。1939年苏联数学家Л.В.康托罗维奇在《生产组织与计划中的数学方法》一书中提出线性规划问题,也未引起重视。1947年美国数学家G.B.Dantzing提出求解线性规划的单纯形法,为这门学科奠定了算法基础。1947年美国数学家J.冯诺伊曼提出对偶理论,开创了线性规划的许多新的研究领域,扩大了它的应用范围和解题能力。康托洛维奇和库伯曼斯(Koopmans)因对资源最优分配理论的贡献而获1975年诺贝尔经济学奖。上世纪60—70年代,随着计算机的应用,线性规划问题发展到了30000個约束,3000000个变量,这是理论和手工再也无法计算的。
从1964年诺贝尔奖设经济学奖后,到1992年28年间的32名获奖者中有13人(40.6%)从事过与线性规划有关的研究工作,其中比较著名的有Simon,Samullson,Leontief,Arrow,Miller等。
如今,随着大数据时代的来临及企业复杂业务的开展,线性规划问题解决企业资源最优配置变得异常重要,同时,为了解决复杂问题,计算机的应用也显得越来越重要。
2.Matlab问题。Matlab是由美国MathWorks公司开发的一款商业软件,起初是为实现数学计算而设计的。20世纪70年代,美国新墨西哥大学计算机科学系主任Cleve Moler为了减轻学生编程的负担,用FORTRAN编写了最早的Matlab。1984年由Little、Moler、Steve Bangert合作成立的MathWorks公司正式把Matlab推向市场。到20世纪90年代,Matlab已成为国际控制界的标准计算软件[1-5]。
Matlab软件优势主要体现在编程环境、简单易用、强处理能力、图形处理、模块集合工具箱、程序接口和发布平台、应用软件开发等方面。目前已应用到数值分析、数值和符号计算、工程与科学绘图、控制系统的设计与仿真、数字图像处理技术、数字信号处理技术、通讯系统设计与仿真、财务与金融工程、管理与调度优化计算(运筹学)等领域。
新版的Matlab自1984年推向市场以来,历经十多年的发展和竞争,现已成为国际认可的最优化的科技应用软件。与其他高级语言相比,Matlab提供了一个人机交互的数学系统环境,可以大大节省编程时间。Matlab语法规则简单、容易掌握、调试方便,具有高效、简单和直观的特性。使用者只需输入一条命令而不用编制大量的程序即可解决许多数字问题,正是由于Matlab的强大功能,受到国内外专家学者的欢迎和重视,它已成为许多大学生研究与学习的重要工具[6-10]。
三、线性规划问题的标准型及Matlab函数
1.线性规划问题的标准型。利用线性规划问题求解的步骤一般为“确定决策变量、确定目标函数、确定约束条件、确定非负约束、求解”五个步骤,为了求解,需要将之化为标准形式。线性规划问题的标准型是:
max(min)z=■c■x■■■a■x■=b■,i=1,2,…,mx■≥0,j=1,2,…,nb■≥0,i=1,2,…,m (1)
其中z称为目标函数,x■(≥0,j=1,2,…,n)为决策变量。为了在教学中便于计算机求解,我们将(1)式化为:
max(min)z=fXs,t.AX≤BX≥0,B≥0 (2)
其中:
f=[c■,c■,…,c■],X=[x■,x■,…,x■]",
B=[b■,b■,…,b■]",
A=■=(a■)■
2.Matlab线性规划程序。我们用linprog函数来求作为线性规划程序。Matlab对于线性规划问题的求解是求最小值问题:
minz=fXs,t.AX≤B (3)
使用linprog时,已经用单纯型方法进行了打包,计算机代码简单灵活,可以针对任意多个变量进行处理,同时,教学中要注意以下几个不同的函数:
X=linprog(f,A,B)
X=linprog(f,A,B,aeq,beq)
X=linprog(f,A,B,aeq,beq,LB,UB)
X=linprog(f,A,B,aeq,beq,LB,UB,X■) (4)
满足Aeq·X=beq,是那些有等式的约束条件,LB,UB是决策变量X的下界与上界,X■为初值。
因此,教学中应根据不同的问题使用不同的Matlab函数。一般情况下应用X=linprog(f,A,B);当既有不等式又有等式时,用函数X=linprog(f,A,B,aeq,beq);当不但有等式约束而且明显给出决策变量的上下界时,就用函数X=linprog(f,A,B,aeq,beq,LB,UB);既有等式约束,又有上下界约束,同时可以观察到解的大致范围时,不妨给出一个初值而利用函数X=linprog(f,A,B,aeq,beq,LB,UB,X■)。这样可以省下计算机大量寻找解的时间。
同时,教学中要注意的是,Matlab使用的是求解最小值的表达式(3),因此,如果是求解的最大值问题,必须先将求解最大值用变换化为求最小值的形式,许多求解错误就是没有注意到这一点。
四、Matlab求解线性规划问题的仿真实验
例子 最大利润问题
某企业计划生产Ⅰ、Ⅱ两种产品。这两种产品都要分别在A、B、C、D四种不同设备上加工。生产每件产品Ⅰ需占用各设备分别为2、1、4、0h,生产每件产品Ⅱ,需占用各设备分别为2、2、0、4h。已知各设备计划期内用于生产这两种产品的能力分别为12、8、16、12h,又知每生产一件产品Ⅰ企业能获得2元利润,每生产一件产品Ⅱ企业能获得3元利润,问企业应安排生产两种产品各多少件,使总的利润收入为最大。
问题分析:
设分别用x■,x■分别表示Ⅰ、Ⅱ两种产品在计划期内的产量,因为设备A在计划期内的可用时间为12h,不允许超,于是有:
2x■+x■≤12
同样的对设备B,C,D有:
x■+2x■≤8
4x■≤16
4x■≤12
企业的目标是在各种设备能力允许的条件下,利润达到最大,即有:
maxz=2x■+3x■
因此,这个问题对于Matlab要化为求最小值问题,这样,该问题化为:
minz′=-z=-2x■-3x■
约束条件是:
2x■+x■≤12x■+2x■≤84x■+0x■≤160x■+4x■≤12 (5)
可见,这个问题显然应该用函数X=linprog(f,A,B),这样,其Matlab程序为:
f=[-2,-3];
A=[2,2;1,2;4,0;0,4];
B=[12,8,16,12]
X=linprog(f,A,B);
经过运行,则有:
Optimization terminated.
x=
4.0000
2.0000
即当X=(4 2),即当x■=4,x■=2时,总的利润收入为最大,最大利润为z=2x■+3x■=14元。
如果在解题中没有注意将最大值问题化为最小值问题而直接用如下程序:
f=[2,3]
A=[2,2;1,2;4,0;0,4];
B=[12,8,16,12]
X=linprog(f,A,B)
则会出现以下错误信息并得到错误结果:
Exiting:One or more of the residuals,duality gap,or total relative error has grown 100000 times greater than its minimum value so far:the dual appears to be infeasible (and the primal unbounded).,(The primal residual < TolFun=1.00e-008.)。
x=1.0e+024*(-0.0000 -2.2587)
意思是:一个或多个残差、二元间隙或总相对误差到目前为止已经增长了100000倍以上:对偶似乎是不可行的(和原始无界)。并得到了上述错误结果。
另外,如果将(5)式化为:
2x■+x■≤12x■+2x■≤80≤x■≤40≤x■≤3 (6)
则反而没有linprog的函数可以利用。计算无法进行下去。因此,正确的方法是根据linprog函数化为可以解出的函数模型,才会有真正的结果。
五、结论
线性规划是高等学校教学中比较抽象的部分,本文论述了在高等学校线性规划教学中引入计算机程序思想的重要性,在理论教学与软件工具之间搭起桥梁,通过Matlab编程,不但使教师在理论教学中培养学生的应用能力,而且使得学生的计算机编程能力得到了很大提高。通过巧妙的计算机程序语言与理论模型的结合,使学生的学习兴趣及学习能力都大为提高,达到了理论数学思维与计算机应用能力双向丰收的教学效果。
参考文献:
[1]聂建辉.Matlab与科学计算课程教学方法改革[J].学周刊,2017,(19):5-6.
[2]蒋玲玲.ASP和MATLAB混合编程实现线性规划模型求解[J].信息与电脑:理论版,2017,(01):82-83.
[3]袁明珠.Matlab遗传算法工具箱在约束非线性惩罚函数中的应用[J].软件工程,2017,(01):37-39.
[4]孙建英.MATLAB平台下运筹学模型的仿真实验[J].沈阳大学学报:自然科学版,2016,(04):337-339.
[5]揭逸飞.运用MATLAB软件求解高中数学中的线性和非线性规划问题[J].科技视界,2016,(21):164.
[6]尚飞.Matlab在线性规划中的应用[J].中华建设,2016,(06):90-93.
[7]张雪峰.MATLAB仿真软件在线性代数课程中的应用研究[J].曲阜师范大学学报:自然科学版,2016,(01):42-46+50.
[8]李林漢,韩祝华.基于matlab的《线性规划》教学研究[J].价值工程,2015,(23):195-197.
[9]刘森,刘琳.Matlab与Excel联合求解堤防工程土料场规划的线性规划模型[J].黑龙江水利科技,2015,(04):1-5.
[10]蒋春迪,张韬.表上作业法和Matlab求解土方调配方案的比较[J].价值工程,2015,(09):110-113.