我们先来介绍一下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乘子

上例题

question.jpg

设甲饮料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

答:应该做这项投资。

Last modification:April 17th, 2020 at 11:03 pm