matlab01规划问题,MATLAB求解线性规划(含整数规划与01规划)问题.pdf

MATLAB 求解线性规划(含整数规划和0-1 规划)问题

线性规划是数学规划中的一类最简单规划问题,常见的线性规划是一个有约

束的,变量范围为有理数的线性规划。如:

max z  7x 12 y

9x  4y  300

4x 5y  200

s.t 

3x 10y  300

x , y  0

对于这类线性规划问题,数学理论已经较为完善,可以有多种方法求解此类问题。

但写这篇文章的目的并不是为了介绍数学理论,我们这里主要讲解如果利用工具

求解这一类线性规划问题。

最著名,同时也是最强大的数学最优化软件是LINGO/LINDO 软件包,它能

够求解多种的数学规划问题,同时还提供了多种的分析能力。但LINGO 软件并

不容易上手,同时,应用LINGO 的场合一般是大规模的线性规划问题,小小的

线性规划完全可以不使用它。一个更受科研人员欢迎的数学软件是 MATLAB ,

它以功能强大而称著,并有数学软件中的“航空母舰”之称。我们这里就是要学

习使用MATLAB 软件求解线性规划 (含整数规划和0-1 规划)问题。

为了使得不熟悉MATLAB 的人员也能够使用MATLAB 进行线性规划问题

求解,本文将对MATALB 中使用到的函数和过程以及结果进行详细的分析,最

后会对每一个问题都给出一个可以完全“套用”的MATLAB 程序。

我们首先从上面的线性规划问题开始,为了便于表达,将上面的式子写成矩

阵形式:

max z 7x 12y

 9 4 300

   

x

     

 4 5    200

s.t   y  

3 10    300 

   

x , y  0

于是约束就表达为了一个Ax b 不等式。

求解MATLAB 线性规划时,最常用的函数是linprog 函数,下面来介绍一下这个

函数的使用。

打开MATLAB 帮助文档 (PS:帮助文档的内容是最全的,只要你的英文过了专业8

级),可以看到linprog 函数求解的是具有如下标准形式的线性规划:

min f Tx

x

 A X b

s.t Aeq X beq

 lb  x  ub

公式中各符号的意义是自明的,在这里简单介绍下,首先MATLAB 中求解的

是目标函数是最小值的问题,但如果我们的目标函数是求最大值,可以通过对目

标函数中每一项中乘以-1,将求最大值问题转化为求最小值问题;A,b 分别为

不等式约束中的系数矩阵。Aeq 和beq 分别为等式约束中的系数矩阵,lb,和ub

分别为每个变量的上下区间;最后f 为目标函数中各变量的系数矩阵。

现在,是时候动动手,使用MATLAB 编写代码求解这个线性规划了。MATLAB

代码如下所示:

f=[-7,-12];

A=[9 4;4 5;3 10];

b=[300;200;300];

lb=zeros(2,1);% 生成一个2行1列的全1矩阵

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

我们来解释下linprog 函数中每参数的意义,linprog 中的一个原型如下:

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

这7 个参数的意义和上面f、A、b 的意义是一样的。f 为目标函数的系数矩阵,

A 为线性规划不等式约束的变量系数矩阵,b 为不等式约束的资源数(如上面的

[300;200;300]),这是一个N 行1 列的矩阵,N 为变量的个数。Aeq 和beq 是相

应等式约束的变量系数矩阵和资源数(很明显,上面的例子中并没有等式约束)。

lb 和ub 分别为保变量的上下区间。在上面的例子中,x 和y 和最小值都为0 但

都无最大值约束。而

你可能感兴趣的:(matlab01规划问题)