目录:
一、规划问题介绍及线性规划的引出
二、matlab函数(linprog)求解线性规划(介绍matlab优化工具箱Optimization Toolbox)
三、数据包络分析(data envelopment analysis,DEA)
一、规划问题介绍及线性规划的引出
利用有限的人力、物力、财力去完成任务,同时保证效用最大化,即使用尽可能少的资源使得产生结果的效益最大,这就是规划问题。
PS:这个规划问题属于运筹学的范畴
根据将求解问题的性质从而又对规划问题进行更细的划分:
·线性规划(linear programming)
·非线性规划(nonlinear programming)
·整数规划(integer programming)
·目标规划(goal programming)
·动态规划(dynamic programming)
·图论与网络分析(graph theory and network analysis)
·存储论(inventory theory)
·排队论(queueing and waiting line)
·博弈论(game theory)
·决策论(decision theory)
线性规划(linear programming)
对资源的限制称为规划的约束条件,用资源完成的效用称为目标函数。如果目标函数与约束条件均为线性时,则称为线性规划。
·线性规划的数学表述形式
min(或max)=f(x)
st. A*x<=b
Aeq*x=beq
lb<=x<=ub
二、matlab函数(linprog)求解线性规划
linprog是matlab自带求解线性规划的函数
其求解的函数形式为
min c*x %c为1×n double 型向量
st. A*x<=b %A为不等式约束的系数矩阵,b为n×1 double型向量
Aeq*x=beq %Aeq为等式约束的系数矩阵,beq为n×1 double型向量
lb<=x<=ub %lb,ub为解(x)对应的可行域,均为n×1 double型向量
[x,fval]=linprog(c,A,b,Aeq,beq,lb,ub)
在使用中,linprog函数中不存在的约束用[]代替
matlab代码实现
f=[1 2 3];
A=[-2 1 1;
3 -1 -2]; %将>=号用两边同乘-1的方法变为标准形式<=形式
b=[9;-4];
Aeq=[4 -2 -3];
beq=[-6];
lb=[-Inf 0 []]; %x(1)下限不存在故用-Inf表示,x(3)无约束故上下限均用[]代替
ub=[0 Inf []];
[x,fx]=linprog(f,A,b,Aeq,beq,lb,ub)
运行结果
Optimal solution found.
x =
-10.5000
0
-12.0000
fx =
-46.5000
Optimization Toolbox工具箱的介绍
Optimization Toolbox是用来专门解决优化问题的一个工具箱,里面具有很多解决优化问题的内置函数,使用起来比较方便,这里先学习线性规划的工具箱使用,其余的放在以后学习。
Optimization Toolbox工具箱的使用界面
1.solver:优化类型,由于解决的问题为线性优化,所以选择linprog-Linear programming
2. Algortithm:选择解决问题所使用的算法
3.problem:目标函数的系数向量
4.Linear inequalities:非线性规划的系数矩阵
5.Linear equalities:线性规划的系数矩阵
6.Bound:可行域范围
7.start:开始运行
这里继续使用上述linprog的例子
其中f、A、b、Aeq、beq、lb、ub均已提前导入到matlab工作区,导入方式同linprog函数
运行结果:
三、数据包络分析(data envelopment analysis,DEA)
百度百科是这样定义的:数据包络分析方法(Data Envelopment Analysis,DEA)是运筹学、管理科学与数理经济学交叉研究的一个新领域。它是根据多项投入指标和多项产出指标,利用线性规划的方法,对具有可比性的同类型单位进行相对有效性评价的一种数量分析方法。
数据包络分析法可以用来干什么?
管理者运用DEA来比较一组服务单位,识别相对无效率单位,衡量无效率的严重性,并通过对无效率和有效率单位的比较,发现降低无效率的方法。
数据包络分析的数学模型
决策单元 | |||||
投入 | 1 | 2 | ... | n | |
1 | X(11) | X(12) | ... | X(1n) | |
2 | X(21) | X(22) | ... | X(2n) | |
... | ... | ... | X(ij) | ... | |
m | X(m1) | X(m2) | ... | X(mn) |
决策单元 | |||||
产出 | 1 | 2 | ... | n | |
1 | y(11) | y(12) | ... | y(1n) | |
2 | y(21) | y(22) | ... | y(2n) | |
... | ... | ... | y(ij) | ... | |
s | y(s1) | y(s2) | ... | y(sn) |
在DEA中通常称被衡量绩效的组织称为决策单元。设有n个决策单元(j=1,2,...,n),每个决策单元有相同的m项投入(i=1,2,...,m)和相同的s项产出(r=1,2,...,s)。用x(ij)表示第j个决策单元的第i项投入,用y(rj)表示第j个决策单元的第r项产出。如上图。
由于DEA模型已经存在,所以在这里不再造轮子,直接把结论拿来使用。
PS:感兴趣的可以去找找有关资料。
数学模型如下
min E
st.
参数分析:
E为是否DEA有效(即帕累托最优,在没有一方变差的情况下,使得至少有一方情况变好)判断,E=1则有效,E<1则非DEA有效。
理论有点抽象难懂,下面用例子来理解
例:某银行的4个分理处的投入产出情况如下表所示。要求分别确定各分理处的运行DEA是否有效
分理处 | 投入 | 产出 | |||
职员数 | 营业面积 | 储蓄存取 | 贷款 | 中间业务 | |
分理处1 | 15 | 140 | 1800 | 200 | 1600 |
分理处2 | 20 | 130 | 1000 | 250 | 1000 |
分理处3 | 21 | 120 | 800 | 450 | 1300 |
分理处4 | 20 | 135 | 900 | 420 | 1500 |
分析:这里有4个分处理处,即4个决策单元,n=2;两项投入,m=2;三项产出,s=3;因此应有(m+s)个不等式约束。决策变量有5个,分别为4个λ,一个E
列出第一个分理处的(由于λ懒得打,就用x代替了)仿式:
min E
st.
1800*x1+1000*x2+800*x3+900*x4>=1800
200*x1+350*x2+450*x3+420*x4>=200
1600*x1+1000*x2+1300*x3+1500*x4>=1600
15*x1+20*x2+21*x3+20*x4<=15*E
140*x1+130*x2+120*x3+135*x4<=140*E
x1+x2+x3+x4=1
x(1:5)>=0
clear all
clc
in=[15 140;20 130;21 120;20 135]; %投入
out=[1800 200 1600
1000 350 1000
800 450 1300
900 420 1500]; %产出
f=[0 0 0 0 1]; %目标函数的系数向量
A=[-1800 -1000 -800 -900 0 %不等式约束
-200 -350 -450 -420 0 %这里的x5为E
-1600 -1000 -1300 -1500 0
15 20 21 20 -15
140 130 120 135 -140];
b=[-1800;-200;-1600;0;0];
Aeq=[1 1 1 1 0]; %等式约束
beq=1;
lb=[0 0 0 0 0]; %可行域
ub=[1 1 1 1 1];
for i=1:4
A(4:5,5)=-1*in(i,:)'; %更改决策单元
b(1:3,1)=-1*out(i,:)';
x=linprog(f,A,b,Aeq,beq,lb,ub);
DEA(i,:)=x';
end
运行结果:
>> DEA
DEA =
1.0000 0 0 0 1.0000
0.2797 0 0.7203 0 0.9661
0 0 1.0000 0 1.0000
0 0 0 1.0000 1.0000
分析结果:
在结果中,可以看到,对于决策单元1、3、4的E均为1,代表其DEA有效
而决策单元2的E<1,代表决策单元2非DEA有效,其λ的含义是:将28%的分理处1与72%分理处3组合,其各项产出不低于分处理2的各项产出,但其投入只有分处理2的96.61%
参考书籍:胡运权,郭耀煌.运筹学教程[M].北京:清华大学出版社,2018.7:6-7、37-38