我们先来介绍一下linprog函数
f=[]%目标函数的系数
A=[]%约束条件中小于或等于的未知数系数
b=[]%约束条件中小于或等于对应不等式右边的常数项
Aeq=[]%约束条件中等式条件约束矩阵
beq=[]%约束条件中等式右边的常数项
vlb=[];vub=[]%分别对应决策向量的下界向量和上界向量
[x,fval,lambda]=linprog(f,A,b,Aeq,beq,vlb,vub,x0,options)
%fval为我们要求的最小或者最大值
%lambda为解x处的lagrange乘子
上例题
设甲饮料x百箱,乙饮料y百箱。
由题意得到线性规划的目标函数和约束条件:
Max: 10x+9y
s.t. 10x+20y<=150
6x+5y<=60
x<=8
x>=0
y>=0
由上式可得到下列代码
f=[10 9]%目标函数的系数
A=[10 20;6 5;1 0]%约束条件中小于或等于的未知数系数
b=[150;60;8]%约束条件中小于或等于对应不等式右边的常数项
Aeq=[]%约束条件中等式条件约束矩阵
beq=[]%约束条件中等式右边的常数项
[x,fval]=linprog(-f,A,b,Aeq,beq,zeros(2,1))
注意:这里用-f 把原来求最大的目标函数变成求最小的目标函数。
其中lambda、vlb、x0、options在这里没有用上,所以我们求未使用
输出结果:
Optimal solution found.
x =
6.428571428571428
4.285714285714286
fval =
-1.028571428571429e+02
接下来我们来进入解题
(1)
由题设可得:
Max: 10x+9y-0.8*(6x+5y)<==>5.2x+5y
s.t. 10x+20y<=150
6x+5y<=60
x<=8
x>=0
y>=0
代码:
clc;clear;close all
f=[10 9 -0.8];%目标函数的系数
A=[10 20 0;6 5 -1;1 0 0];%约束条件中小于或等于的未知数系数
b=[150;60;8];%约束条件中小于或等于对应不等式右边的常数项
Aeq=[];%约束条件中等式条件约束矩阵
beq=[];%约束条件中等式右边的常数项
[x,fval,lambda]=linprog(-f,A,b,Aeq,beq,zeros(2,1))
输出结果:
Optimal solution found.
x =
8.000000000000002
3.499999999999999
5.500000000000000
fval =
-1.071000000000000e+02
lambda =
1
答: 应该做这项投资。
(2)
Max: 11x+9y
s.t. 10x+20y<=150
6x+5y<=60
x<=8
x>=0
y>=0
%%question_3
clc;clear;close all
f=[11 9]%目标函数的系数
A=[10 20;6 5;1 0]%约束条件中小于或等于的未知数系数
b=[150;60;8]%约束条件中小于或等于对应不等式右边的常数项
Aeq=[]%约束条件中等式条件约束矩阵
beq=[]%约束条件中等式右边的常数项
vlb=[];vub=[zeros(2,1)]%分别对应决策向量的下界向量和上界向量
[x,fval]=linprog(-f,A,b,Aeq,beq,zeros(2,1))
输出结果:
Optimal solution found.
x =
8.000000000000000
2.399999999999999
fval =
-1.096000000000000e+02
答:应该做这项投资。