线性规划(上)
一、什么是线性规划问题?
在一组线性的等式或不等式下的约束下,求一线性目标函数最大值或最小值的问题。
二、Matlab 中规定线性规划的标准形式
其中 c 和 x 为 n 维列向量, A 、 Aeq 为适当维数的矩阵,b 、beq 为适当维数的列向量。 基本函数形式为 linprog(c,A,b),它的返回值是向量 x 的值。还有其它的一些函数调用形式(在 Matlab 指令窗运行 help linprog 可以看到所有的函数调用形式),如:[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS) 这里 fval 返回目标函数的值,LB 和 UB 分别是变量 x 的下界和上界, X0是 x 的初始值,OPTIONS 是控制参数。
三、例题
1)
题意为求Z的最大值,后面四个方程为x1,x2,x3的约束条件 matlab代码:
c=[2;3;-5];
a=[-2,5,-1;1,3,1]; b=[-10;12];
aeq=[1,1,1];
beq=7;
x=linprog(-c,a,b,aeq,beq,zeros(3,1))
value=c'*x
linprog中使用-c是因为求解问题为优化最大值,而linprog只优化最小值。
在matlab中运行结果(将代码粘到命令行窗口回车,或新建保存为m文件,再运行该m文件): 如图,当x1=6.4286,x2=0.5714,x3=0时,Z取得最大值14.5714 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))=号,而linprog优化 |