Matlab和LINGO求解线性规划问题

19 篇文章 8 订阅

加工奶制品的生产计划
加工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

s.t.a11x1+a12x2+...+a1nxnb1a21x1+a22x2+...+a2nxnb2..............................am1x1+am2x2+...+amnxnbm

xi0(i=1,2,...n)
用矩阵表示是
minf=cTX
s.t.AXb,X0
例:求解线性规划问题
maxf=3x1x2x3
s.t.x1x2+x3114x1+x2+2x332x1x3=1xi0,i=1,2,3

解:考虑到linprog函数只能解决形如
minf=cTX
s.t.AXBaeqx=beqxX0

变形为下面这个形式
minf=3x1+x2+x3
s.t.2x1x3=1x1x2+x3114x1x22x33xi0,i=1,2,3

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=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
MATLABLINGO都是用来解决线性规划问题的工具。下面我们以一个具体的例题来说明如何在MATLABLINGO求解线性规划问题。 假设有一个农场,农场有限的土地可以用于种植两种作物:小麦和玉米。现在农场主希望决定如何分配土地才能使得总产量最大化。已知每亩小麦的产量为 5 个单位,每亩玉米的产量为 10 个单位。此外,农场总共有100亩土地可供使用,小麦的最大种植面积为80亩,而玉米的最大种植面积为90亩。其中,小麦和玉米的种植不能超过总土地面积。 在LINGO中,我们可以使用以下语句来求解这个线性规划问题: ``` SETS: CROPS /WHEAT, CORN/; DATA: SIZES(CROPS) = 100; MAX_ACRE(CROPS) = 80, 90; YIELD("WHEAT") = 5; YIELD("CORN") = 10; VARIABLES: ACRES(CROPS) >= 0; OBJECTIVE: MAX = YIELD("WHEAT") * ACRES("WHEAT") + YIELD("CORN") * ACRES("CORN"); CONSTRAINTS: CONSTRAINT1: ACRES("WHEAT") + ACRES("CORN") <= SIZES("CROPS"); CONSTRAINT2: ACRES("WHEAT") <= MAX_ACRE("WHEAT"); CONSTRAINT3: ACRES("CORN") <= MAX_ACRE("CORN"); END ``` 在MATLAB中,我们可以使用优化工具箱中的`linprog`函数来求解这个线性规划问题。具体的MATLAB代码如下: ```matlab f = [-5; -10]; A = [1 1; 1 0; 0 1]; b = [100; 80; 90]; lb = [0; 0]; ub = []; x = linprog(f, A, b, [], [], lb, ub); ``` 在LINGO中,可以得到结果:小麦种植面积为75亩,玉米种植面积为25亩,总产量为625个单位。 在MATLAB中,可以得到结果:小麦种植面积为75亩,玉米种植面积为25亩,总产量为625个单位。 通过以上两种工具的使用,我们可以看到无论是使用MATLAB还是LINGO,都可以很方便地求解线性规划问题,并得到最优解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值