您的位置:首页 > 编程语言 > MATLAB

Matlab和LINGO求解线性规划问题

2015-06-17 16:56 1011 查看
加工奶制品的生产计划

加工1桶牛奶有两种加工方式,(1)生产12小时得到3公斤A1,获利24元/公斤(2)生产8小时得到4公斤A2,

获利16元/公斤

每天:

50桶牛奶 时间480小时 至多加工100公斤A1

制订生产计划,使每天获利最大

分析:

设x1桶牛奶生产A1x1桶牛奶生产A2

则生产A1获利 24×3x1 生产A2获利 16×4 x2

每天获利

Max z=72x1+64x2

约束条件

原料 x1+x2≤50

时间 12×x1+8×x2≤480

加工能力 3×x1≤100

非负约束 x1,x2≥0

LINGO代码

model:
max=72*x1+64*x2;
[milk] x1+x2<50;
[time]
12*x1+8*x2<480;
[cpct] 3*x1<100;
end


结果

Global optimal solution found.
Objective value:                              3360.000
Infeasibilities:                              0.000000
Total solver iterations:                             2

Variable           Value        Reduced Cost
X1        20.00000            0.000000
X2        30.00000            0.000000

Row    Slack or Surplus      Dual Price
1        3360.000            1.000000
MILK        0.000000            48.00000
TIME        0.000000            2.000000
CPCT        40.00000            0.000000


Matlab求解

f=(-1)*[72 64]; %因为题中要求最大值这里取相反数,linprog是求最小值的
A=[1 1;12 8;3 0;-1 0;0 -1];
b=[50 480 100 0 0];
[xopt fxopt]=linprog(f,A,b)
-fxopt   %再取负得到最大值


代码2

f=(-1)*[72 64]; %因为题中要求最大值这里取相反数,linprog是求最小值的
A=[1 1;12 8;3 0];
b=[50 480 100];
LB=[0;0];
[xopt fxopt]=linprog(f,A,b,[],[],LB)
-fxopt   %再取负得到最大值


结果

Optimization terminated.

xopt =

20.0000
30.0000

fxopt =

-3.3600e+003

ans =

3.3600e+003


线性规划的一般形式

minf=c1x1+c2x2+...+cnxn\min f=c_1x_1+c_2x_2+...+c_nx_n

s.t.⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪a11x1+a12x2+...+a1nxn≤b1a21x1+a22x2+...+a2nxn≤b2..............................am1x1+am2x2+...+amnxn≤bms.t.\left\{
\begin{aligned}
a_{11}x_1+a_{12}x_2+...+a_{1n}x_n ≤b_1 \\
a_{21}x_1+a_{22}x_2+...+a_{2n}x_n ≤b_2 \\
..............................\\
a_{m1}x_1+a_{m2}x_2+...+a_{mn}x_n ≤b_m
\end{aligned}
\right.

xi≥0(i=1,2,...n)x_i≥0 (i=1,2,...n)

用矩阵表示是

minf=cTX\min f=c^TX

s.t.AX≤b,X≥0s.t. AX≤b,X≥0

例:求解线性规划问题

maxf=3x1−x2−x3\max f=3x_1-x_2-x_3

s.t.⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪x1−x2+x3≤11−4x1+x2+2x3≥32x1−x3=−1xi≥0,i=1,2,3s.t.\left\{
\begin{aligned}
x_1-x_2+x_3 ≤11 \\
-4x_1+x_2+2x_3 ≥3 \\
2x_1-x_3=-1\\
x_i≥0,i=1,2,3
\end{aligned}
\right.

解:考虑到linprog函数只能解决形如

minf=cTX\min f=c^TX

s.t.⎧⎩⎨⎪⎪AX≤Baeqx=beqxX≥0
s.t.\left\{
\begin{aligned}
AX≤B \\
aeqx=beqx \\
X≥0
\end{aligned}
\right.

变形为下面这个形式

minf=−3x1+x2+x3\min f=-3x_1+x_2+x_3

s.t.⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪2x1−x3=−1x1−x2+x3≤114x1−x2−2x3≤−3xi≥0,i=1,2,3s.t.\left\{
\begin{aligned}
2x_1-x_3=-1\\
x_1-x_2+x_3 ≤11 \\
4x_1-x_2-2x_3 ≤-3 \\
x_i≥0,i=1,2,3
\end{aligned}
\right.

matlab代码

c=[-3;1;1];
A=[1 -2 1;4 -1 -2];
b=[11;-3];
aeq=[2 0 -1];
beq=-1;
vlb=[0;0;0];
[x,fval]=linprog(c,A,b,aeq,beq,vlb)


结果

Optimization terminated.

x =

4.0000
1.0000
9.0000

fval =

-2.0000


对应原来的线性规划中即知目标函数的最大值为2,此时

x1=4,x2=1,x3=9x_1=4,x_2=1,x_3=9

LINGO求解

model:
max=3*x1-x2-x3;
x1-2*x2+x3<=11;
-4*x1+x2+2*x3>=3;
2*x1-x3=-1;
end


结果

Global optimal solution found.
Objective value:                              2.000000
Infeasibilities:                              0.000000
Total solver iterations:                             0

Variable           Value        Reduced Cost
X1        4.000000            0.000000
X2        1.000000            0.000000
X3        9.000000            0.000000

Row    Slack or Surplus      Dual Price
1        2.000000            1.000000
2        0.000000           0.3333333
3        0.000000          -0.3333333
4        0.000000           0.6666667
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: