Bootstrap

matlab求解线性规划问题


matlab中线性规划问题主要借助于linprog函数,这个函数通过矩阵:Ax=b的原理求解结果。

1. 普通线性规划问题

例1.某机床厂生产甲、乙两种机床,每台销售后的利润分别为4千元与3千元。生产甲机床需用A、B机器加工, 加工时间分别为每台2小时和1小时;生产乙机床需用A、B、C三种机器加工,加工时间为每台各一小时。若每天可用于加工的机器时数分别为A机器10小时、B机器8小时和C机器7小时,问该厂应生产甲、乙机床各几台,才能使总利润最大?

符号说明

符号含义
a生产甲的数量
b生产乙的数量
z目标值

(1)列出约束条件与目标函数

目标函数:·求max: z=4a+3b
约束条件:

  1. 2a+b<10;
  2. a+b<8;
  3. b<7;

(2) 调用matlab函数

(1)函数介绍:

需要调用linprog函数,格式如下:

[x,fval]=linprog(f,a,b,aeq,beq,lb,up,options)

其中,

  1. x为取得最值时自变量x的取值;
  2. fval为取得最值时最值的值; f为目标函数,本题中为:z=4a+3b,表示为[4,3](线代知识)
  3. a,b为不等约束,其中a为不等约束左边系数,b为不等约束右边系数。
  4. aeq,beq为等式约束,aeq为等式左边系数,beq为等式右边系数.
  5. lb,up分别为自变量自身取值范围。本题中a,b取值范围均为[0,+∞].
  6. options为使用的方法种类,一般不做更改。
  7. 注意,linprog函数默认求目标函数最小值,所以如果要求最大值需要使目标函数系数乘以-1;
  8. linprog函数不等约束方程里默认为Ax<b的形式,如果你得出Bx>C的约束方程,需要乘以-1变成(-B)x<-C的形式。

(2)调用函数:

[x,fval]=linprog([-4,-3],[2,1;1,1;0,1],[10;8;7],[0,0;0,0;0,0],[0;0;0],[0,0],[inf,inf]);
fval=-fval

(3)输出结果:

Optimal solution found.
x =

    2.0000
    6.0000
    fval =

    26

(4)代码解释:

1.matlab中linprog函数默认求解目标函数最小值,而题目中为了求解最大值,所以把目标函数系数[4,3]改为[-4,-3],再由fval=-fval求出最大值。
2.由于本题没有等式约束,自变量的取值范围也没有额外要求,所以aeq,beq部分为零矩阵,lb也为零矩阵,ub为无限大。(matlab中inf为+∞),所以上述主要代码也可以缩减为:

[x,fval]=linprog([-4,-3],[2,1;1,1;0,1],[10;8;7])

(3)练习:

在这里插入图片描述
代码如下:

[x,fval]=linprog([-2,-3,5],[-2,5,-1;1,3,1],[-10,12],[1,1,1],[7],[0,0,0],[inf,inf,inf])
fval=-fval
;