APP下载

基于Matlab和Lingo的线性规划问题求解过程对比分析

2019-08-07义欣

科技视界 2019年17期
关键词:数学建模

义欣

【摘 要】在日常生活中,为了取得最大化的利益,经常会需要利用现有的资源条件进行科学适当的安排,这就离不开数学规划,即从基础的应用数学角度进行分析问题,依据数字来判断最佳方案。其中最重要的就是数学建模,是属优化管理模型的一种,最为常见的就是利用线性规划的手段进行构建,而Matlab和Lingo同作为可用于数值计算分析的软件,在进行线性规划问题求解时都有着重要的应用。本文主要就线性规划与非线性规划问题进行分析讨论,并利用Matlab和Lingo进行求解,分析两款软件的计算过程,并做出总结。

【关键词】数学建模;非线性规划;Matlab;Lingo

中图分类号: G642;O141.4-4 文献标识码: A 文章编号: 2095-2457(2019)17-0094-003

DOI:10.19694/j.cnki.issn2095-2457.2019.17.045

Analysis and Comparison of Solving Process of Linear Programming Based on Matlab and Lingo

YI Xin

(Northeastern University at Qinhuangdao, Qinhuangdao Hebei 066004, China)

【Abstract】In daily life, in order to maximize the benefits, often need to use the existing resource conditions for scientific and appropriate arrangements, which is inseparable from mathematical programming, namely from the basic applied mathematics perspective to analyze the problem, according to the number to judge the best plan.Among them, the most important one is mathematical modeling, which is a kind of optimal management model. The most common one is to construct by means of linear programming. Matlab and Lingo, both of which can be used for numerical calculation and analysis, have important applications in solving linear programming problems.This paper mainly analyzes and discusses the problems of linear programming and nonlinear programming, and USES Matlab and Lingo to solve them, analyzes the calculation process of the two software, and makes a summary.

【Key words】Mathematical modeling; Nonlinear programming; Matlab; Lingo

1 绪论

对于普通的数学规划问题,其基本理论已经较为完善,可以使用多种手段进行最佳方案的求解,其中利用计算机进行则最为简便,在保证准确率的同时,可以将人力解放出来,而Matlab和Lingo作为用于数学分析计算的专业软件,在进行线性规划问题求解时,都极为简洁方便,在现代社会已经都被广泛用于工程建设、金融预算、智慧城市、信号处理、教育等等领域[1-2],就线性规划问题,将进行详细的分析比。

1.1 线性规划问题

线性规划问题是目标函数和约束条件均为线性函数的问题,利用线性规划可以解决很多问题。如:在不违反一定资源限制下,组织安排生产,获得最好的经济效益(产量最多、利润最大、效用最高);也可以在满足一定需求条件下,进行合理配置,使成本最小。同时还可以在任务或目标确定后,统籌兼顾,合理安排,用最少的资源(如资金、设备、原材料、人工、时间等)去完成任务[3]。

1.2 结构安排

本文主要研究是对两款软件Matlab和Lingo就线性规划问题求解过程进行分析对比,结构安排如下:

第一部分为绪论,主要包括线性规划问题简介,应用计算机软件进行处理的优势和应用。

第二部分为利用Matlab和Lingo进行求解的分析对比。

第三部分为结论,就此次使用Matlab和Lingo解决线性规划问题的进行总结,以及对两款软件应用优势领域进行延伸分析。

2 线性规划问题求解

一般的线性规划问题标准式为:

max(min)f=cTX

s.t.AX≤baeqX≤beqlb≤X≤ub

线性规划关于解可能存在四种情况:

(1)无解,即不存在满足条件的解;

(2)有唯一解,即在众多的可行解中有唯一的最优解;

(3)无穷解,即在可行解中的无穷解都可以作为最优解;

(4)有解,有可行解,但由于值无界所以没有最优解。

一般的求解思路是先求一个可行解,然后检验,如若不是,则用迭代的方法找到更优解,反复有限次迭代,直至找到最优解或者判定无解[4]。

2.1 求线性规划最小最优解

例如求

minf=5x1+9x2-3x3+8x4-7x5;

s.t.-5x1-4x2-6x3-x5≥-6-2x1+3x2-x3+x4-3x5≤70≤xi≤21

2.1.1 基于Matlab求线性规划最优解

在Matlab中求线性规划问题,可直接调用linprog函数,其原理即为简单的迭代检验,伪代码格式如下:

[x,fval]=linprog(f,A,b,aeq,beq,lb,ub)

[x,fval]=linprog(f,A,b,aeq,beq,lb,ub,x0)

A:约束条件矩阵b:目标函数的系数向量c:约束条件最右边的数值向量

lb、ub:解向量的下、上界  x0:初始解向量

可在Matlab中輸入代码:

>>f=[5 9 -3 8 -7];

>>A=[-2 3 -1 1 -3;5 4 6 0 1];

>>b=[7 6];

>>lb=[0 0 0 0 0];

>>ub=[21 21 21 21 21];

>>[x,fval]=linprog(f , A, b, [ ], [ ], lb, ub)

Optimization terminated.

则会输出结果为:

x=0.0000

0.0000

0.0000

0.0000

6.0000

fval==-42.0000

即在该规划问题上x1=x2=x3=x4=0,x5=6时符合取值要求,且取最小值-42.

2.1.2 基于Lingo求线性规划最优解

Lingo的原理也是迭代取值检验法,在Lingo软件中需要先输入一个模型[5],以MIN开始,按线性规划问题的自然形式输入即可,在模型窗口输入以下代码:

min=5*x1+9*x2-3*x3+8*x4-7*x5;

5*x1+4*x2+6*x3+x5<=6;

-2*x1+3*x2-x3-x4-3*x5<=7;

@bnd(0,x,21);

代码中:@bnd指的是x的取值范围。

点击Solve即可得到代码运行结果如图1。

其中很明显看到当x1=x2=x3=x4=0,x5=6时可以取得最优值-42,同时可以看到一些其它的变量值,得到总变量为6,非线性变量为0,也可以看到松弛或盈余量等等[5]。

2.2 求线性规划最大最优解

例如:max f=3x1+3x2

2.2.1 基于Matlab求线性规划最优解

在Matlab中没有求最大值函数,因此需要先将目标转化为最小值问题:

然后进行转换即可。

Matlab中代码设计如下:

>>f=[-3,-7];

>>A=[1,0;0,1;1,2];

>>b=[7,6,17];

>>lb=[0,0];

>>[x,fval]=linprog(f, A, b,[ ],[ ], lb)

Optimization terminated.

可得到x=5.0000      fval=-57.0000

6.0000

可以发现x1和x2取值都符合要求,即maxf=fval*(-1),则maxf=57.0000。

2.2.2 基于Lingo求线性规划最优解

在Lingo中先输入模型,然后以max输入即可,在模型窗口中设计的代码如下:

max=3*x1+7*x2;

x1<=7;

x2<=6;

x1+2*x2<=17;

其代码运行结果如图2。

可以得到最优解值结果当x1=5;x2=6时取得最优值(最大值)为57。

在图中其中可以得到总变量为2,非线性变量为0,还有经过迭代后松弛或盈余的量。

3 结论

通过以上的基于两种软件的求最优值的过程对比可以得出,不管是使用Matlab还是Lingo,两种方法一样,但求解的程序形式有着较大的差异。

Matlab中,需要用到数组(矩阵)的知识点,所以可能需要前期的学习过程作为铺垫。同时,也可以明显知道,Matlab中的程序接口是已经写好的,即linprog的使用格式是固定的,就线性规划而言,在日常生活中,需要使用的整数性的线性规划时就会受到一定的限制,一般的情况下,整数情况可能较少,所以关于小数化整数的过程需要自己进行编译,因此,这一过程可能对初学者很不友善,受到一定的制约。但Matlab在进行规模庞大的变量运算时具有很大的优势,在非线性规划时较为方便,同时它在数据可视化方面也有很大应用,也支持其他的如C、JAVA等语言。

相比较而言,利用Lingo进行线性规划整体使用体验较为流畅,中间不涉及其他的知识框架,可以直接按照原始的书写习惯进行,符合大部分人的习惯,较为容易掌握,实用性比较强,且在使用中可以与excel表格进行对接调用,但整个框架较为严格,大于等于与大于以及小于等于与小于等价,忽略掉了边界的影响,同时在程序中每个变量、约束条件都要输入,由此当变量很多是就会造成一定难度。

拿本文的规划问题求解的过程来说,Matlab需要将最大值的求解转变为最小值之后再求解,而Lingo则不需要,可以直接求,这一方面Lingo比Matlab方便且易懂。

综上所述,Matlab在各自领域都有一定优势,对于初学者而言,比较推崇使用Lingo进行线性规划,而入门后,关于各种问题的求解Matlab是更好选择。

【参考文献】

[1]燕浩.浅谈高中数学线性规划问题的软件实现——以Lingo环境下多决策变量为例[J].数学学习与研究:教研版, 2015(23):143-144.

[2]盛仲飙.基于Matlab的线性规划问题求解[J].计算机与数字工程,2012,40(10).

[3]揭逸飞.运用MATLAB软件求解高中数学中的线性和非线性规划问题[J].科技视界,2016(21):164-164.

[4]龙松.大学数学MATLAB应用教程[M].武汉:武汉大学出版社,2014.7.

[5]吴拿达.基于Lingo软件的“线性规划”应用性教学[J]. 科教文汇,2017(32).

猜你喜欢

数学建模
数学建模课程教学现状分析及对策研究
基于常微分方程的数学建模问题的求解
在数学建模中培养学生的提问能力
数学建模中创造性思维的培养
谈数学建模时的问题分析步骤