05、线性规划

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41591279/article/details/95341245

  线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题。在解决实际问题时,把问题归结成一个线性规划数学模型是很重要的一步,但往往也是困难的一步,模型建立得是否恰当,直接影响到求解。而选适当的决策变量,是我们建立有效模型的关键之一。

  一般线性规划问题的(数学)标准型为

可行解满足约束条件(4)的解x=(x1,x…,x,),称为线性规划问题的可行解,而使目标函数(3)达到最大值的可行解叫最优解。

可行域所有可行解构成的集合称为问题的可行域,记为R。

求解线性规划的Matlab解法

单纯形法是求解线性规划问题的最常用、最有效的算法之一。这里我们就不介绍单纯形法,有兴趣的读者可以参看其它线性规划书籍。下面我们介绍线性规划的Matlab解法。

Matlab中线性规划的标准型为

基本函数形式为linprog(c,A,b),它的返回值是向量x的值。还有其它的一些函数调用形式(在Matlab指令窗运行 help linprog 可以看到所有的函数调用形式),如:

[x,fval]=linprog(c,A,b)
[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB)
[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS)

这里fval返回目标函数的值,LB和UB分别是变量x的下界和上界,xo是x的初始值,OPTIONS 是控制参数。

eg:求解线性规划问题

其MATLAB程序如下:

f = [-2;-3;5] ;
a = [-2,5,-1;1,3,1] ;
b = [-10;12] ;
aeq = [1,1,1] ;
beq = 7 ;
%s = [0;0;0] ;
%s2 = [3;3;3] ;设置上边界,x1,x2,x3<=3 用的时候将其加在zeros(3,1)后面
[x,y] = linprog(f,a,b,aeq,beq,zeros(3,1)) ;%zeros(3,1)生成三行一列的0矩阵,可用s将其换
x,y = -y

其Lingo程序如下

model :
sets:
row/1..2/:b ;
col/1..3/:c,x ;
links(row,col):a ;
endsets 
data:
c = 2 3 -5 ;
a = -2 5 -1 1 3 1 ;
b = -10 12 ;
enddata
max = @sum(col:c*x) ;
@ for(row(i):@sum(col(j):a(i,j)*x(j))<b(i)) ;
@ sum(col:x) = 7 ;
end 

猜你喜欢

转载自blog.csdn.net/qq_41591279/article/details/95341245