Matlab软件在运筹学中的应用

Matlab软件在运筹学中的应用
Matlab软件在运筹学中的应用

Matlab软件在运筹学中的应用

摘要:Matlab软件是一种广泛应用于工程计算及数值分析领域的新型高级语言。而运筹学是近代应用数学的一个分支,主要是研究如何将生产、管理等事件中出现的运筹问题加以提炼,然后利用数学方法进行解决的学科。运筹学是应用数学和形式科学的跨领域研究,利用像是统计学、数学模型和算法等方法,去寻找复杂问题中的最佳或近似最佳的解答。运筹学经常用于解决现实生活中的复杂问题,特别是改善或优化现有系统的效率。本文首先介绍了Matlab软件和运筹学产生的背景,以及它们的发展历程和发展方向。接着叙述了用Matlab软件来解决运筹学中的问题的方法及其算法。我们通过分析问题建立数学模型,使用适当方法求出解,并对其进行分析得到该问题的最优值。最后运用这种方法来解决相关实际问题,即它被应用的过程。

关键词: Matlab软件;运筹学;数学模型;最优值。

Matlab software in the application of operations research Abstract:Matlab software is widely used in the field of engineering calculations and numerical analysis of a new type of high-level language. The modern application of operations research is a branch of mathematics to study how the production, management and logistics for events such as the problem appears to be refined, and then use mathematical methods to solve the subjects. Operations research is a form of applied mathematics and interdisciplinary scientific research, the use of such statistical, mathematical models and algorithms and other methods to find complex issues in the best or near best solution. Operations research is often used to solve complex problems in real life, in particular, to improve or optimize the efficiency of existing systems. This paper introduces the Matlab software and operations research background, and their development process and development. Then described using Matlab software to solve problems in operations research methods and algorithms. We analyze a mathematical model of the problem, find the solution using the appropriate methods, and analyzed to get the optimal values. Finally, we use this method to solve practical problems related to, that is the application process.

Keywords:Matlab software, Operations research, Mathematical model, The optimal value.

目录

1 绪论 (1)

1.1 问题的背景、意义 (1)

2运筹学及Matlab软件的历史 (3)

2.1 运筹学历史背景 (3)

2.2 MA TLAB历史背景 (3)

2.3运筹学的发展方向 (4)

3 运筹学的步骤及实际问题的解答 (5)

3.1 运筹学处理问题的步骤 (5)

3.2 运筹学在现实生活中的应用 (6)

3.2.1 线性规划 (6)

3.2.2 指派问题 (8)

3.2.3 动态规划 (9)

4 结论 (15)

致谢 (16)

参考文献..................................................... 错误!未定义书签。

1 绪论

1.1 问题的背景、意义

运筹学是一门研究如何有效地组织和管理人机系统的科学。由于它同管理科学的紧密联系,它在研究解决实际问题时所蕴涵的的系统整体优化思想,以及从提出问题、分析建模、求解到方案实施的一整套严密科学方法。[1]

随着科学技术和生产的发展,运筹学已渗入很多领域里,发挥了越来越重要的作用。运筹学本身也在不断发展,现在已经是一个包括好几个分支的数学部门了。比如:数学规划(又包含线性规划;非线性规划;整数规划;组合规划等)、图论、网络流、决策分析、排队论、可靠性数学理论、库存论、对策论、搜索论、模拟等等。[2]现在解决运筹学问题如果还像以前一样自己一步一步来计算明显效率不高,随着科技的进步,我们需要一种软件能使我们能在计算机上能快速的计算出问题的答案。而Matlab软件这一常用软件正好符合我们的需求。

那什么是MATLAB软件?

MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。

MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++ ,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下

载就可以用。[3]

2. 运筹学及Matlab软件的历史

2.1 运筹学历史背景:

运筹学作为科学名词出现在20世纪30年代末。第二次世界大战期间,运筹学的研究与应用范围主要是战略、战术方面。随着世界性战争的结束,各国开始快速发展经济,世界范围内的剧烈竞争也体现在经济、技术方面,运筹学的研究也向些方面拓展。运筹学为了适应时代的要求,在近几十年中,无论从理论上还是应用上都得到了快速的发展。在应用方面,今天运筹学已经涉及了服务、管理、规划、决策、组织、生产、建设等诸多方面,甚至可以说,很难找出它涉不到的领域。在理论方面,由于运筹学的需要和刺激而发展起来的一些数学分支,如数学规划,应用概率与统计、应用组合数学、对策论、数理经济学、系统科学等,都得到了迅速发展。[4]第二次世界大战以后,运筹学的活动扩展到工业和政府等部门,它的发展大致可分为三个阶段:

1.从1945年到20世纪50年代初,被称为创建时期。此阶段的特点是从是运筹学研究的人数不多,范围较小,运筹学的出版物、学会等寥寥无几。

2.从20世纪50年代初期到50年代末期,被认为是运筹学的成长时期。此阶段的一个特点是电子计算机技术的迅速发展,使得运筹学中一些方法如单纯形法、动态规划方法等,使得以用来解决实际管理系统中的优化问题,促进了运筹学的推广应用。

3.自20世纪60年代以来,被认为是运筹学开始普及和迅速发展的时期。此阶段的特点是运筹学进一步细分为各个分支,专业学术团体迅速增多,更多的期刊创办,运筹学书籍大量出版,以及更多学校将运筹学课程纳入教学计划之中。

由于运筹学在提高组织机构的效率方面已取得显著成效,它的影响还在继续扩展。[5][6]

2.2 MATLAB历史背景:

随着科技的发展运筹学问题的计算也由越来越多的软件来代替,从而节省解决问题的时间和精力,而MATLAB软件就是其中一种应用广泛的软件。

MATLAB 名字由 MATrix 和 LABoratory 两词的前三个字母组合而成。那是 20 世纪七十年代后期的事:时任美国新墨西哥大学计算机科学系主任的 Cleve Moler 教授出于减轻

学生编程负担的动机,为学生设计了一组调用 LINPACK 和 EISPACK 库程序的“通俗易用”的接口,此即用 FORTRAN 编写的萌芽状态的 MATLAB 。[3]

经几年的校际流传,在 Little 的推动下,由 Little 、 Moler 、 Steve Bangert 合作,于 1984 年成立了 MathWorks 公司,并把 MATLAB 正式推向市场。从这时起, MATLAB 的内核采用 C 语言编写,而且除原有的数值计算能力外,还新增了数据图视功能。

MATLAB 以商品形式出现后,仅短短几年,就以其良好的开放性和运行的可靠性,使原先控制领域里的封闭式软件包(如英国的 UMIST ,瑞典的 LUND 和 SIMNON ,德国的KEDDC )纷纷淘汰,而改以 MATLAB 为平台加以重建。在时间进入 20 世纪九十年代的时候,MATLAB 已经成为国际控制界公认的标准计算软件。[7]

Matlab软件是由美国Mathworks公司推出的用于数值计算和图形处理的科学计算系统环境。它具有强大的数值计算、绘图、优化和编程等功能。Matlab 的基础是矩阵计算,但是由于它的开放性,并且Mathwork 也吸收了像Maple 等软件的优点,使Matlab 成为一个强大的

数学软件。总的来说,Matlab 有如下优势和特点:

1) 友好的工作平台和编程环境。

2) 简单易用的程序语言。

3) 强大的科学计算机数据处理能力。

4) 应用广泛的模块集合工具箱。

5) 实用的程序接口和发布平台。

6) 应用软件开发。

在实际教学中主要是通过实例的方法来说明Matlab 在教学过程中的方便性和直观性。[8]

2.3 运筹学的发展方向

运筹学正朝着3个领域发展:运筹学应用、运筹科学和运筹数学。

现代运筹学面临的新对象是经济、技术、社会、生态和政治等因素交叉在一起的复杂系统,因此必须注意大系统、注意与系统分析相结合,与未来学相结合,引入一些非数学的方法和理论,采用软系统的思考方法。总之,运筹学还在不断发展中,新的思想、观点和方法不断出现。

3. 运筹学的步骤及实际问题的解答

3.1 运筹学处理问题的步骤

运筹学研究的内容十分广泛,其主要分支有:线性规划、非线性规划、整数规划、几何规划、大型规划、动态规划、图论、网络理论、博弈论、决策论、排队论、存贮论、搜索论等。

应用运筹学处理问题时分为5个阶段。

①规定目标和明确问题:包括把整个问题分解成若干子问题,确定问题的尺度、有效性度量、可控变量和不可控变量,以及用来表示变量界限和变量间关系的常数和参数。

②收集数据和建立模型:包括定义关系、经验关系和规范关系。

③求解模型和优化方案:包括确定求解模型的数学方法,程序设计和调试,仿真运行和方案选优。

④检验模型和评价解答:包括检验模型的一致性、灵敏度、似然性和工作能力,并用试验数据来评价模型的解。一致性是指主要参数变动时(尤其是变到极值时)模型得出的结果是否合理;灵敏度是指输入发生微小变化时输出变化的相对大小是否合适;似然性是指对于真实数据的案例,模型是否适应;工作能力则是指模型是否容易解出,即在规定时间内算出所需的结果。

⑤方案实施和不断优化:包括应用所得的解解决实际问题,并在方案实施过程中发现新的问题和不断进行优化。上述5个阶段往往需要交叉进行,不断反复。

现代运筹学方法强调黑箱方法、数学模型和仿真运行。它重视系统的输入输出关系,即问题所处的环境条件和问题中主要因素与环境间的关系,而不追求系统内部机理,因而易于达到从系统整体出发来研究问题的目的。常用的数学模型有:分配模型、运输模型、选址模型、网络模型、计划排序模型、存储模型、排队模型、概率决策模型、马尔可夫模型等。模型求解往往成为应用计算机程序进行仿真运行。现在已有各种运筹学软件包供应,使运筹学可以处理相当复杂的大型问题。随着运筹学应用于社会大系统,仅靠定量分析已难以找到合

理的优化方案,人们常采用定量与定性相结合、在定量分析的基础上进行定性分析的方法。因此,在许多情况下已很难划分运筹学、系统分析与政策分析的界限。

3.2 运筹学在现实生活中的应用:

运筹学作为一门新兴科学,其应用范围是十分广泛的。对于不同类型问题,运筹学都有着不同的解决方法,因而形成了许多分支学科。它们虽然各有特性,但在运用系统观念分析问题,并对问题建立模型求解这两点上都是共同的。这些分支学科包括线性规划、非线性规划、动态规划、决策分析等等,在此主要介绍线性规划和动态规划在经济管理中的一些应用。

3.2.1 线性规划

线性规划是目前在经济管理中应用最广泛的一种优化法,它的理论已经十分成熟,可以应用于生产计划、物资调用、资源优化配置等问题。它主要研究的是经济管理活动中经常遇到的两类问题:一类是在有限的劳动力、设备、资金等资源条件下,研究如何合理安排,取得最大的经济效果(如生产经营利润);另一类是为了达到一定的目标(生产指标或其它指标),研究如何组织生产,或合理安排工艺流程,或调整产品的成份等等,以使消耗资料(人力、设备台数、资金原材料等)为最少去实现目标。这类统筹规划的问题用数学语言表达(即数学模型),先根据问题要达到的目标选取适当的变量,问题的目标通过用变量的函数形式表示(称为目标函数),对问题的限制条件用有关变量的等式或不等式表达(称为约束条件)。当变量连续取值,且目标函数和约束条件均为线性时,称这类模型为线性规划的数学模型。下面举例说明线性规划在经济管理中的应用。

线性规划是运筹学的一个大分支——数学规划的组成部分。数学规划可分为静态规划和动态规划;静态规划又可分为线性规划和非线性规划。静态线性规划一般来说是研究一个n元实函数(称为目标函数)在一组等式或不等式约束条件下的极值问题。如果目标函数和约束条件都是线性的,则称为线性规划;否则,称之为非线性规划。线性规划问题就是一个线性函数在一组约束条件下的极值问题,其数学模型的一般形式为:

112211112211211222221122

()(,)(,).(,)0(1,2,,)

n n

n n n n m m mn n m j Max Min Z c x c x c x a x a x a x b a x a x a x b s t a x a x a x b x j n =+++?+++=≤≥?+++=≤≥????+++=≤≥?≥=??L L L L L

L L 为便于讨论一般解法,常将线性规划问题的约束条件归结为一组线性方程和一组非负性

限制条件,并且对目标函数统一成求最小值。即是说,将线性规划问题的数学形式化成如下

形式,称之为线性规划问题的标准形式:

112211112211211222221122

.0(1,2,,)

=+++?+++=?+++=????+++=?≥=??L L L L L

L L n n

n n n n m m mn n m j Max Z c x c x c x a x a x a x b a x a x a x b s t a x a x a x b x j n 在很多时候,为了表示线性规划问题的特殊情况,一般形式的线性规划问题用矩阵向量

表示为

..0??≤????≥??

Max CX LP AX b S T X 称为线性规划问题的规范形式。

实例:某村计划在100 hm2 土地上种植A ,B ,C 三种农作物,可供劳力、粪肥、化肥等资

源的数量,种植每公顷作物所需资源数量以及能获利润如表1 所示。

表1 资源数量及利润表

问如何选择种植方案,使所获利润最大。

设x1 , x2 , x3 分别表示农作物A ,B ,C 的种植面积,则问题的

模型可归结如下:

max z = 1 500 x1 + 1 200 x2 + 1 800 x3

s. t .

x1 + x2 + x3 = 100

450 x1 + 600 x2 + 900 x3 ≤63 000

35 x1 + 25 x2 + 30 x3 ≤3 300

350 x1 + 400 x2 + 300 x3 ≤33 000

x1 , x2 , x3 ≥0

用Matlab 求解上述规划问题,只需编制如下的程序:

f = [1 500 1 200 1 800 ]’;

f = - f ;

a = [450 600 900 ;35 25 30 ;350 400 300 ] ;

b = [6 300 3 300 33 000 ]’;

aeq = [1 1 1 ] ;beq = [100 ] ; lb = zeros(3 ,1) ;

[ x ,fval ,exitflag ,output ,lambda ] = linprog(f ,a ,b ,aeq ,beq ,lb) ;

执行上述程序后,可得问题的最优解:exitflag = 1 ,fval = - 16 200 ,

x1 = 60 , x2 = 0 , x3 = 40 。由此可知最优的种植方案为种植A 作

物60 hm2 ,种植C 作物40 hm2 ,总利润为16 200 元。[11]

3.2.2 指派问题

在现实生活中,有各种性质的指派问题,例如有若干项工作需要分配给若干人来完成;有若干班级需要安排给各教师上课等。这些问题的基本要求是在满足特定的指派要求条件下,使指派方案的总体效果最佳。指派问题一般的解法为匈牙利解法。实例:某商业公司计划开办4 家新商店,为了尽早建成营业,商业公司决定由4 家建筑公司A ,B ,C ,D 分别承建。规定每家建筑公司只能承建一家新商店,每家新商店只能承包给一个建筑公司。建筑公司对新商店的建造费用的报价(万元) 如表2 所示。要求商业公司应当对4 家建筑公司怎样分配建造任务,才能使总的建造费用最少。

表2 建造费用报价表(单位:万元)

这是一个平衡的分派问题。输入如下的Matlab 程序:

e = [15 18 21 24 ;19 23 22 18 ;26 17 16 19 ;19 21 23 17 ] ;

a = e’;f = a ( :) ;

o = ones(1 ,4) ;z = zeros(1 ,4) ;y = eye (4) ;

aeq = [o ,z ,z ,z ;z ,o ,z ,z ;z ,z ,o ,z ;z ,z ,z ,o ] ;

aeq = [aeq ;y ,y ,y ,y] ;

beq = ones(8 ,1) ;lb = zeros(16 ,1) ; [ x ,fval ,exitflag ,output ,lambda ] =

linprog(f ,[ ] ,[ ] ,aeq ,beq ,

lb) ;

xv = reshape (x ,4 ,4) ; xx = xv’; %xx 为指派方阵

xx0 = round(xx) ; %xx0 为xx 取整后的方阵

xe = xx0. / e ;xe = xx0. 3 e ;

rfv = sum(sum(xe) ) ;

在Matlab 中执行上述程序后得到fval = 70 ,即最优解为70 ;得到指派方阵xx 以及xx0 的结果,由fval = 70 可知,xx0 为最优指派方阵,即最优指派方案为:商店1 承包给建筑公司B ,商店2承包给建筑公司A ,商店3 承包给建筑公司C ,商店4 承包给建筑公司D ,总耗费70 万元。由此可知,利用该软件求解指派问题非常简单,而且速度很快。[12][13]

3.2.3 动态规划

动态规划是解决多阶段决策过程最优化问题的一种方法。该方法是由美国数学家贝尔曼(R.Bellman)等人在2O世纪50年代初提出的.他们针对多阶段决策问题的特点,提出了解决这类问题的最优化原理,并成功地解决了生产管理、资源分配等方面的许多实际题,从

而建立了运筹学的一个新分支——动态规划.

动态规划是现代企业管理中的一种重要决策方法,可用于解决最优路径、资源分配、生产计划与库存、投资、装载、排序等问题,还可用于生产过程的最优控制等.由于它有独特的解题思路,因而在处理某些优化问题时,比线性规划或非线性规划方法更有效.

使用动态规划方法解决多阶段决策问题,首先要将实际问题写成动态规划模型,此时要用到以下概念:

1)阶段

将所给问题的过程,按时间或空间特征分解成若干互相联系的阶段,以便按次序去求解每阶段的解,每个阶段就是一个子问题,常用字母k表示阶段变量.

2)状态

各阶段开始时的客观条件叫做状态.描述各阶段状态的变量称为状态变量,常用s k表示第k阶段的状态变量.状态变量s k的取值集合称为状态集合,用s k表示.

3)决策

当各段的状态取定以后,就可以作出不同的决策(或选择),从而确定下一阶段的状态,这种决定称为决策.表示决策的变量称为决策变量,常用u k(s k)表示第k阶段当状态为s k

时的决策变量.在实际问题中,决策变量的取值往往限制在一定范围内,称此范围为允许决策集合,常用D k(s k)表示第k阶段从状态s k出发的允许决策集合,显然有“u k∈D k(s k).

4)策略

一个由每个阶段的决策按顺序组成的集合称为策略,用p表示,即

p(s1)={u1(s1),u2(s2),.......,u n(s n),}。一个n阶段决策过程,从1到n叫作问题的原过程.对于任意给定的k(1≤k≤n),从第k阶段状态s k到第n阶段状态s n的过程称为原过程的一个后部子过程.后部子过程的策略记为p k(s k)={u k(s k),u k+1(s k+1),......,u n(s n)},在实际问题中,可供选择的策略有一定的范围,此范围成为允许策略集合。允许策略集合中达到最优效果的策略成为最优策略

5)状态转移

动态规划中本阶段往往是上一阶段状态和上一阶段的决策进行综合的结果.如果给定了第k段的状态s k,且该阶段决策为u k(s k),则第k+1段的状态s k+1也就完全确定.它们的关系可表示为:

s k+1=T k(s k,u k)

由于上式表示了由k阶段到k+1阶段的状态转移规律,所以称该式为状态转移方程.

6)指标函数

用于衡量所选定策略优劣的数量指标称为指标函数.一个n阶段决策过程,从1到n

叫作问题的原过程.对于任意一个给定的k(1≤k≤n),从第k阶段到第n阶段的过程称为原过程的一个后部子过程。V1,n(s1,p1,n)表示初始状态为s1采用策略p1,n时原过程的指标函数值。而V k,n(s k,p k,n)表示在第k阶段,状态为s k采用策略p k,n时后部子过程的指标函数值.最优指标函数记为f k(s k),它表示从第k阶段状态s k采用最优策略p k,n到过程终止时的最佳效益值.f k(s k)与V k,n(s k,p k,n)间的关系为:

f k(s k)=V k,n(s k,p k,n)=optimize V k,n(s k,p k,n)

当k=1时,f1(s1)就是从初始状态s1到全过程结束的整体最优函数.

动态规划基本思路

1)将多阶段决策过程划分阶段,恰当地选择状态变量、决策变量以定义最优指标函数,从而把问题化成一族同类型的子问题,然后逐个求解.

2)求解时从边界条件开始,逆序过程行进,逐段递推寻优.在每一个子问题求解时,都要使用它前面已求出的子问题的最优结果.最后一个子问题的最优解,就是整个问题的最优解.

3)动态规划方法是既将当前一段与未来各段分开,又把当前效益和未来效益结合起来考虑的一种最优化方法,因此每段的最优决策选取是从全局考虑的,与该段的最优选择一般是不同的.

实例:某公司拟将某种设备5台分配给甲、乙、丙3个工厂,各工厂利润与设备数量之间的关系如下表所示,问这5台设备如何分配使3个工厂的总利润为最大?

应用动态规划方法分析如下

1.阶段k

将问题按工厂分为3个阶段,k=1,2,3

2.状态sk

给第k个工厂分配前拥有的设备台数,显然s1=5

3.决策uk

分配给第k个工厂的设备台数,显然

分给第一个工厂可以0到s1台之间

分给第二个工厂也可以0到s2台之间

分给第三个工厂的为s2台

状态转移Tk

前后两个状态之间的关系如下

s2=s1-u1,s3=s2-u2

5.阶段指标Vk

第k阶段的指标函数,表示配给第k个工厂uk台设备所获得的利益,显然

Vk=w(uk,k)

6.各阶段状态变量可能取值

由已知,我们容易知道

s1={5}

s2={0,1,2,3,4,5}

s3={0,1,2,3,4,5}

根据上面的分析,我们编写程序如下

function matlabsky

%计算各状态变量可能取值,第k列代表第k个状态变量的可能取值,没有的使用NaN代替s=nan*ones(6,3);

s(1,1)=5;

s(:,2)=[0 1 2 3 4 5]';

s(:,3)=[0 1 2 3 4 5]';

相关主题
相关文档
最新文档